2011-05-23 36 views
1

有人能指出我在正确的方向/网站在这里动态更新的MySQL/PHP的字段名/列名

是否有PHP的方式如何,你可以从表单比较字段名称动态更新特定表和数据库中的column_name。

输入名称= “EMAIL_ADDRESS”

数据库列名是EMAIL_ADDRESS

我发现的东西,但不是在我看来,如此灵活.. 。

+1

它似乎不安全。这样做的理由是什么? – k102 2011-05-23 13:01:17

回答

4

我有类似的地方,它非常稳定。

所有你需要做的是从你的表得到 coloumns,并 产生的输入字段 动态 然后,当它贴后背,破灭的一切,为字符串。检查收到的色彩名称是否与您表格中的名称匹配,并将值也分解。 Add_slashes并转义任何引号或其他可能的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的假输入字段,并赋予其管理员权限!

如果你仍然想去,解决方案很简单。循环发布帖子,获取密钥和值并将其附加到SQL查询;因此:

$sql = "UPDATE user SET "; 
foreach($_POST as $key => $value) 
    $sql .= $key . " = " . $value . ','; 

$sql = substr($sql,0,-1);  //Remove the last comma 
+0

此功能仅适用于管理员可以登录的网站的后端部分... – WilfredMifsud 2011-05-23 13:02:29

+0

然后继续使用它,这是一个采取捷径以节省宝贵时间的完美示例! 只要确定你知道风险。 – TJHeuvel 2011-05-23 13:04:29

+0

是的,这是考虑到了。 我还将包含表名称作为隐藏的输入类型加入到这个函数中..所以它更加灵活和动态 感谢您的时间:D – WilfredMifsud 2011-05-23 13:07:12