php数组键/编辑数据库

时间:2013-02-18 09:48:34

标签: php arrays

我有一个页面,其中有多个输入名为 - 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发送的信息进行编辑。我做错了什么?

2 个答案:

答案 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)

看起来像你的问题后,可以做两个解决方案

  1. 如果电话号码可以通过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' ");

  2. 如果没有,则删除id_user的所有电话号码,然后通过POST数据重新插入。