【发布时间】:2011-05-23 12:58:14
【问题描述】:
有人能指出我正确的方向/网站吗
PHP 中有没有一种方法可以通过比较 FORM 中的字段名称和数据库中的 column_name 来动态更新特定表。
例如
INPUT name="email_address"
和
数据库列名是email_address
我发现了一些东西,但在我看来不是那么灵活......
【问题讨论】:
-
它似乎不安全。这样做的原因是什么?
有人能指出我正确的方向/网站吗
PHP 中有没有一种方法可以通过比较 FORM 中的字段名称和数据库中的 column_name 来动态更新特定表。
例如
INPUT name="email_address"
和
数据库列名是email_address
我发现了一些东西,但在我看来不是那么灵活......
【问题讨论】:
我有类似的东西,它真的很稳定。
您所要做的就是获得 表格中的列,以及 生成您的输入字段 动态的 然后,当它被发回时,将所有内容内爆成一个字符串。检查收到的列名称是否与表中的名称匹配,并内爆这些值。添加斜杠并转义任何引号或其他可能的 sql 注入字符。
以下代码是我用于 MASSIVE 项目的代码。
$postvars = $_POST;
$q = "replace into `".$opertable."`
(
`".(implode('`,`',(remove__v(array_keys($postvars)))))."`)
values
(
'".(implode('\',\'',$postvars))."')";
remove__v 使用以下功能删除一些验证技术和提交按钮等
function removeObj($array) {
foreach($array as $key => $value) {
if (substr_count($key,'obj__')) unset($array[$key]);
}
return $array;
}
我所有的输入按钮都被命名为 obj__*
希望你能明白。
【讨论】:
应该可以从 POST 超级全局中获取它们的密钥,但要考虑所涉及的安全风险。请记住,您的用户正在提交表单,他可以轻松创建一个名为rights 的虚假输入字段,并赋予自己管理员权限!
如果您仍然想使用它,解决方案很简单。循环 post,获取键和值并将其附加到 SQL 查询中;像这样:
$sql = "UPDATE user SET ";
foreach($_POST as $key => $value)
$sql .= $key . " = " . $value . ',';
$sql = substr($sql,0,-1); //Remove the last comma
【讨论】: