就地编辑更新文本

jes*_*man 2 php mysql mysqli

我正在尝试在我的网站中进行就地编辑方式.现在我设置了我需要的所有东西.当用户点击提交后,它会发送id的的div元素(什么样的内容)和新的数值进行更新.

这是我的代码:

if($pedit = $mysqli->prepare("UPDATE `accounts` SET ? = ? WHERE `id`= ? ")){
   $pedit->bind_param("sss", $id, $value, $_SESSION["user_id"]);
   $pedit->execute();
   $pedit->free_result();
   $pedit->close();
}
Run Code Online (Sandbox Code Playgroud)

我不知道为什么它不更新信息. $id=更改的行:description,fullname,email etc. $value=有关的新信息$id.用户可以更新其个人资料信息.

代码不会向我显示任何类型的错误,但仍然不会更新.

Dam*_*ick 5

您不能在预准备语句中将列名指定为参数.在准备之前,您必须将列名替换为语句.不要忘记将可编辑的列名列入白名单,以确保不会执行不需要的SQL.

<?php
$accounts_editable_cols = array(
    'name'=>true, 'street'=>true, 'city'=>true,
    'region'=>true, 'postal'=>true, 'phone'=>true
);

// prevent SQL injection by whitelisting column names
if (!array_key_exists($id, $accounts_editable_cols)) return false;

$pedit = $mysqli->prepare("UPDATE `accounts` SET $id = ? WHERE `id`= ? ")
if ($pedit) {
    $pedit->bind_param("ss", $value, $_SESSION["user_id"]);
    $pedit->execute();
    $pedit->free_result();
    $pedit->close();
}
Run Code Online (Sandbox Code Playgroud)