解答:表单正在正确更新数据库

时间:2014-01-29 18:40:58

标签: php forms loops set

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

原始问题是我无法单独更新每条记录,而是更新所有行,而不是只更新匹配我想要的ID。

CONNECTIONS STUFF

 <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>";
} 
?> 

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

问题在于您没有确定单击了哪个按钮,因此在按下任何按钮时会更新每一行。试试这个:

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

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

答案 2 :(得分:0)

故障在这里:

...
<?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']时才会增加。在这种特殊情况下,它为每个和每个evry单行生成一个更新,$id来自数据库而不是当前的POST。

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

Modfify:

...
<?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++;
?>
....