更新mysql记录时获取普通数组文本

时间:2015-05-11 18:50:43

标签: php mysql

所以我有这样的字段表,如果选中复选框,我希望能够编辑每个用户名/电子邮件等。



echo '<td><input type=checkbox name=checkbox[]  value='. $row['Id'] .'       ></td>';
echo '<td><input type=text     name=username[]  value='. $row['username'] .' ></td>';
echo '<td><input type=text     name=email[]     value='. $row['email'] .'    ></td>';
echo '<td><input type=text     name=adress[]    value='. $row['adress'] .'   ></td>';
&#13;
&#13;
&#13;

这是我的脚本,我从每个输入得到数组纯文本,顺便说一下我只使用查询电子邮件进行测试

&#13;
&#13;
if(isset($_POST['edit']))
{
    if(isset($_POST['checkbox'])) {
        $id_array = $_POST['checkbox']; 
        $id_count = count($_POST['checkbox']);
        for($i=0; $i < $id_count; $i++) {
            $id = $id_array[$i];
            $query = ("UPDATE members SET email = '". $_POST['email'] ."' WHERE ID = '". $id ."'");		
            $result = $conn->query($query); 
            if($result) {
                echo "ok";
            }
            else {
                echo "<br><br>Error: " . $conn->error;
            } 
        }
    }
}
&#13;
&#13;
&#13;

1 个答案:

答案 0 :(得分:2)

首先,您很容易受到sql injection attacks的攻击。享受你的服务器pwn3d。

其次,您将POST数组直接填充到查询中,这是不正确的。由于您在表单字段中使用[]命名黑客,$_POST['email']将成为您表单中值的ARRAY,并且您需要更多类似

的内容
.... VALUES ('$_POST[email][$i]', ...)
                           ^^^^

(注意额外的数组索引)以访问该子数组中的各个值。

请记住,对于PHP,在字符串上下文中使用数组会为您提供文字Array,而不是数组的内容:

$foo = array(1,2,3);
echo "$foo"; // outputs 'Array'
echo "$foo[1]"; // outputs '2'