在MySQL中使用foreach语句更新相同的输出


Same output in in MySQL update with foreach statement

我想知道如何更新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循环中传递的是什么,也许可以给出更详细的解决方案。