美好的一天。
这个小错误一直困扰着我,我似乎无法找到问题所在。有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());
哪里出错?
答案 0 :(得分:2)
我真的没有改变ID的逻辑,但问题是你没有保留原来的id。您需要在where
条件下更新原始记录,而不是恰好具有新ID的记录。
如果你真的想这样做(如果有重复的ID,你会遇到麻烦...),你应该将原始ID添加为隐藏字段,以便你知道要更新的记录。
答案 1 :(得分:1)
为什么你改变身份证是我的第一个问题。
在任何情况下,如果您确实需要更改ID,则必须获取生成此表单的原始ID。这样做的一种方法是在表单中放入一个隐藏的输入字段,该字段可以为您提供生成此表单的数据库行的原始ID。
PS:从安全角度来看,接受用户表单中的id并不是一个好主意,具体取决于您要更新哪一行。如果有人将隐藏的字段ID更改为其他内容,该怎么办?