如果单击“提交”按钮,此代码现在可以单独更新每行数据。
原始问题是我无法单独更新每条记录,而是更新所有行,而不是只更新匹配我想要的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>";
}
?>
答案 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++;
?>
....