我想知道如何更新MySQL表与数组。
The Tables有4个字段。REGNO, BATCHNO, NAMES和ATTEN_SUM。REGNO具有唯一的值。
$i = 0;
while($row_recordset = mysql_fetch_array($query_run)) {
echo "<tr>";
echo " <td>{$row_recordset['REGNO']}</td>
<td>{$row_recordset['NAME']}</td>
<td><input type='text' name='atten_ave".$i."'></td>
";
echo "</tr>";
$i++;
这是我的html代码更新页面后的前一页。
foreach($_POST as $textbox => $values) {
$query_update = "UPDATE `grades` SET `ATTEN_SUM` = '$values' WHERE `BATCHNO` = '$sessionbatch'";
if(mysql_query($query_update)) {
echo 'SUCCESS';
} else{
die(mysql_error());
}
}
$_POST是上一页动态输入的数组。下面是我在表格中输出的示例。
REGNO | BATCHNO | NAME | ATTEN_SUM
====================================================
1 | ARPA 00-055 | Jason | 99
2 | ARPA 00-055 | Mark | 99
3 | ARPA 00-055 | Edgar | 99
用最后输入的值更新所有行
html
//<input type='text' name='atten_ave".$i."'
<input type='text' name='atten_ave[]'...
php //foreach($_POST as $textbox => $values) {
foreach($_POST['atten_ave'] as $textbox => $values) {
但是这个更新是无用的。它只是更新所有记录使用最后一个文本框。
我认为你需要传递名称或id到php,然后sql查询添加类似'where id="$_POST[' id ']"…
*CHECK mysql injections.
正如您所说,REGNO是唯一的键,但您正在更新BATCHNO,这不是唯一的,根据您的输出
如果您仔细查看WHERE子句(WHERE BATCHNO
= '$sessionbatch'),您将了解它每次都更新同一行,因此您看到的是最后一次更新。
打印查询语句,你会更清楚。
if(mysql_query($query_update)) {
echo $query_update.'</br>';
1)
你不应该再使用mysql_*函数。它们已被弃用,可能会给mysql注入留下漏洞。你应该学会使用mysql或PDO。
2)
你的代码是完全开放的任何可能的mysql注入。您应该使用mysql_real_escape_string
或参见上面的1)
。
3)
对于foreach($_POST)
,您将遍历每个$_POST
项。我假设(也许我错了)您正在从HTML表单提交数据。试试var_dump($_POST)
,你会看到有许多值与你想做的事情无关。例如:
<input type=”submit” value=”Some value” name="update">
将生成PHP
echo $_POST["update"];
// result: Some value
如果你能发布var_dump($_POST)
的输出,我们都可以看到你在foreach循环中传递的是什么,也许可以给出更详细的解决方案。