就地编辑更新文本

时间:2014-12-03 19:30:45

标签: 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();
}

我不知道为什么它不更新信息。 $id =更改的行:说明,全名,电子邮件等。 $value =有关$id的新信息。用户可以更新他的个人资料信息。

代码没有向我显示任何类型的错误,但仍然无法更新。

1 个答案:

答案 0 :(得分: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();
}