【问题标题】:Dynamic Update MySQL/PHP for fieldname / column_name字段名/列名的动态更新 MySQL/PHP
【发布时间】:2011-05-23 12:58:14
【问题描述】:

有人能指出我正确的方向/网站吗

PHP 中有没有一种方法可以通过比较 FORM 中的字段名称和数据库中的 column_name 来动态更新特定表。

例如

INPUT name="email_address"

数据库列名是email_address

我发现了一些东西,但在我看来不是那么灵活......

【问题讨论】:

  • 它似乎不安全。这样做的原因是什么?

标签: php mysql database forms


【解决方案1】:

我有类似的东西,它真的很稳定。

您所要做的就是获得 表格中的列,以及 生成您的输入字段 动态的 然后,当它被发回时,将所有内容内爆成一个字符串。检查收到的列名称是否与表中的名称匹配,并内爆这些值。添加斜杠并转义任何引号或其他可能的 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__*

希望你能明白。

【讨论】:

    【解决方案2】:

    应该可以从 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
    

    【讨论】:

    • 此功能仅适用于管理员有权登录的网站后端部分...
    • 那就继续吧,这就是走捷径节省宝贵时间的绝佳例子!只要确保你知道风险。
    • 是的,是的,这已被考虑在内。我还将表名作为隐藏的输入类型包含在此函数中。因此它更加灵活和动态感谢您的时间:D
    • 它不是用来复制粘贴的,你必须用你的头脑才能在现实世界的场景中使用它。
    • Oliver 是对的,提交和隐藏按钮也将被提交.. 所以我会征求他的意见.. 但无论如何,谢谢它是一个启动。谢谢大家
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-30
    • 1970-01-01
    • 1970-01-01
    • 2017-08-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多