0

再会。

这个小错误一直困扰着我,我似乎无法找到问题所在。有 3 列:id、last_name 和 first_name。后 2 次更新很好,但 id 列不断恢复到其原始值。

好的,这是我的一些代码片段:

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

    echo "<tr>";  
    echo "<td><input type='checkbox' name ='doc_list[]' value =". $row ."></input></td>
          <td><input type='text' maxlength='9' id='id' name ='id' value =". $row['id'] ."></input></td> 
          <td><input type='text' maxlength='32' id='last_name' name ='last_name' value =". $row['last_name'] ."></input></td>
          <td><input type='text' maxlength='32' id='first_name' name ='first_name' value =". $row['first_name'] ."></input></td>
          <td><input type='submit' value='Update'/></td>
          <td><div id='message'></div></td>";

}   

然后当表单提交时:

//Extracts the information from the form
$id = clean($_POST['id']);
$first_name = clean($_POST['first_name']);
$last_name = clean($_POST['last_name']);

//Input validations
//include("../php/validate_insertion.php");


//Updates doctor info
$query1="UPDATE doctors 
     SET id= '$id', last_name='$last_name', first_name='$first_name'
     WHERE id='$id'";
$result = mysql_query($query1) or die(mysql_error());

错误在哪里?

4

2 回答 2

2

我并没有真正理解更改 ID 的逻辑,但问题是您没有保留原始 ID。您需要在where条件下更新原始记录,而不是恰好具有新 ID 的记录。

如果你真的想这样做(如果有重复的 id,你会遇到麻烦......),你应该将原始 ID 添加为隐藏字段,以便你知道要更新哪个记录。

于 2012-04-19T00:50:44.787 回答
1

你为什么要改变 id 是我的第一个问题。

在任何情况下,如果您确实需要更改 id,则必须获取生成此表单的原始 id。这样做的一种方法是在表单中放置一个隐藏的输入字段,它可以为您提供生成此表单的 db 行的原始 ID。

PS:同样从安全的角度来看,从用户表单中接受 id 并不是一个好主意,这取决于您要更新该行。如果有人将该隐藏字段 id 更改为其他内容怎么办。

于 2012-04-19T00:56:00.463 回答