0

我想弄清楚如何用数组更新 MySQL 表。

表格有 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

它使用我输入的最后一个值更新所有行。

4

4 回答 4

1

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.
于 2013-04-29T03:01:14.100 回答
0

如果您仔细查看 WHERE 子句 (WHERE BATCHNO= '$sessionbatch'),您会明白它每次都会更新相同的行,因此您会看到最后一次更新。

打印查询语句,你会很清楚。

if(mysql_query($query_update)) {
  echo $query_update.'</br>';
于 2013-04-29T02:51:39.327 回答
0

1)

你不应该再使用 mysql_* 函数了。它们已被弃用,可能会为mysql injections留下漏洞。您应该学习使用MysqliPDO

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 循环中传递的内容,并可能提供更详细的解决方案。

于 2013-04-29T02:57:11.193 回答
0

正如您所说,REGNO 是唯一键,但您正在更新 BATCHNO,根据您的输出,这不是唯一的。

于 2013-04-29T02:43:59.057 回答