我有一个页面,其中有多个输入名为 - name ='phonenumber []。我正在将表单发送到另一个页面,我希望能够使用新的帖子信息编辑数据库。我应该如何编写代码,以便例如填充第3个输入,并在发送表单后,只编辑表中的第3行。我试过这样但它不起作用:
if ($_POST['phonenumber'] || $_POST['phonetype'])
{
foreach($_POST['phonenumber'] as $k => $phonenumber) {
$phonetype = $_POST['phonetype'][$k];
$n = $k+1;
mysql_query("UPDATE phone SET phone_number='$phonenumber', phone_type='$phonetype' WHERE id_user='$id' LIMIT $n");
}
}
这样,所有电话号码都会使用从第3个输入POST发送的信息进行编辑。我做错了什么?
答案 0 :(得分:1)
这是因为您的电话号码无法识别(我猜);在每个循环中,您使用下一个值更新N行,最后所有条目都将具有最后一个值。
相反,通常更容易删除所有电话号码并重新插入。
DELETE FROM phone WHERE id_user=?
// for loop
INSERT INTO phone (phone_number, phone_type) VALUES (?, ?) WHERE id_user=?
或者,如果您的电话号码有自己的ID,请在执行WHERE
时在UPDATE
语句中包含该ID。你绝对应该删除LIMIT
。
最后,查看预备语句(使用pdo或mysqli);您当前的代码容易受到SQL注入攻击!
答案 1 :(得分:0)
看起来像你的问题后,可以做两个解决方案
如果电话号码可以通过phone_id列单独识别,则通过此发送POST DATA和Update。
mysql_query("UPDATE phone SET phone_number='$phonenumber', phone_type='$phonetype' WHERE id_user='$id' AND phone_id = '$phone_id' ");
如果没有,则删除id_user的所有电话号码,然后通过POST数据重新插入。