【问题标题】:ANSWERED: Form is updating database correctly回答:表单正在正确更新数据库
【发布时间】:2014-02-21 18:28:16
【问题描述】:

如果单击提交按钮,此代码现在可以单独更新每一行数据。

最初的问题是我无法单独更新每条记录,它正在更新所有行,而不仅仅是与我想要的 ID 匹配的行。

连接的东西

 <form method='post'>";

 $query="SELECT * FROM table WHERE approved='no'";
 $result = mysql_query($query) or die(mysql_error());

$count = mysql_num_rows($result);
echo "<p>$count pending approval.</p>";

while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) { 

$id=$row['id'];
$name = $row['name'];
$extra = $row['extra'];

echo "
<table>
 <tr> 
  <td>ID:</td>
  <td>$id <input type='hidden' name='id[]' value='$id'></td>
 </tr>
 <tr> 
  <td>Name:</td>
  <td>$name <input type='hidden' name='name[]' value='$name'></td>
 </tr>
 <tr> 
  <td>Extra:</td>
  <td>$extra <input type='hidden' name='extra[]' value='$extra'></td>
 </tr>
 <tr colspan='2'>
  <td>
   <center><input name='submit' type='submit' value='Approve'></form></center>
  </td>
 </tr>
</table><br>
";}

if($_POST['submit']) {
$update = "UPDATE table SET approved='yes' WHERE id='$id' LIMIT 1";
if(mysql_query($update)) $count++; 
else die("Error in query:<br>$sql<br>"); 

echo "<p><b>$name has been approved</b></p>";
} 
?> 

【问题讨论】:

  • 尝试通过 $_POST['id'] 更改查询中的 $id 变量
  • @ld04 如果您认为您的问题已得到解答(如标题编辑所暗示的那样),请将答案标记为已接受
  • Update query PHP MySQL的可能重复

标签: php forms loops set


【解决方案1】:

您必须将更新语句移到while (($i &lt; $num)) {...} 之外。 目前,这在循环中......

【讨论】:

    【解决方案2】:

    您正在遍历每一行,然后检查是否单击了提交按钮,如果是,则更新该行。

    问题是您无法识别单击了哪个按钮,因此在按下任何按钮时都会更新每一行。试试这个:

    if (isset($_POST['accepted']) && isset($_POST['id']) && $_POST['id'] == $id)
    

    这将检查提交的表单是否与当前行对应

    【讨论】:

      【解决方案3】:

      故障在这里:

      ...
      <?php
      if (isset($_POST['accepted'])) {
          $query_update = "UPDATE mytable SET accepted='yes' WHERE id ='$id'";
          $result_update=mysql_query($query_update);}
          $i++;
      }
      mysql_close();
      
      ?>
      ....
      

      $i 是可迭代所有行的运行变量。只有在设置$_POST['accepted'] 时才会增加。在这种特殊情况下,它使用来自数据库而不是当前 POST 的 $id 为每一行和每一行生成更新。

      因此:所有记录都将被更新。

      修改:

      ...
      <?php
      if (isset($_POST['accepted']) && isset($_POST['id']) ) {
          $updateId = $_POST['id'];
          $query_update = "UPDATE mytable SET accepted='yes' WHERE id ='$updateId '";
          $result_update=mysql_query($query_update);
           mysql_close();
      }
      
      $i++;
      ?>
      ....
      

      【讨论】:

      • 我想.. 你误读了这个,在更新查询的同一行有一个关闭的括号,这应该关闭 if 语句。然后i++在循环中,下一个括号关闭while循环
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-12-15
      • 1970-01-01
      • 1970-01-01
      • 2022-01-25
      • 1970-01-01
      • 2023-03-31
      • 1970-01-01
      相关资源
      最近更新 更多