使用foreach语句在mysql update中输出相同的内容(CLOSED)

时间:2013-04-29 02:40:08

标签: php mysql

嗨我知道这个问题在这个论坛上有很多答案,但我真的不明白,对不起我只是一个想要学习php的新手,请你好。 =(

我试图找出如何使用数组更新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 个答案:

答案 0 :(得分: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.

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

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

if(mysql_query($query_update)) {
  echo $query_update.'</br>';

答案 3 :(得分:0)

1)

你不应该再使用mysql_ *函数了。它们是deprecated,可能会为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循环内部传递的内容,并可能提供更详细的解决方案。