我构建了一个表单,其中包含与db字段名称相同的字段。
我有代码,当我提交表单时,我将数据导入数据库而不编写字段的特定名称:
foreach ($_POST AS $field => $value)
$sql[] = $field." = '". $value."'";
$sql = implode(' , ',$sql);
$query = "UPDATE clients SET ".$sql." WHERE (id = ".$clientID.") " ;
问题是我有一些我不想导入数据库的字段(因为它们甚至不存在于数据库中)。 你知道如何避免这些领域吗?
由于
答案 0 :(得分:0)
尝试将您想要的元素放入数组中,忽略您不想要的元素:
$post1 = $_POST[1]; // Elements that you do not want in sql statement
$post2 = $_POST[2];
// Elements you want in the db
$array = ($field3 => $_POST[3], $field4 => $_POST[4], $field5 => $_POST[5]);
foreach ($array AS $field => $value){
$value = mysqli_real_escape_string($conn, $value); // Escape your strings and use mysqli (since mysql is deprecated)
$sql[] = $field." = '". $value."'";
$sql = implode(' , ',$sql);
$query = "UPDATE clients SET ".$sql." WHERE (id = ".$clientID.") " ;
}
我尽量不要改变太多。从它看起来,你的代码很好,除了逃避你的数据和分离字段的需要。
答案 1 :(得分:0)
您现在的代码可以让您了解各种SQL注入攻击。我建议您不要直接访问$ _POST超全局。
您可以通过添加到SQL语句的$ _POST变量进入任何内容。
您应该始终考虑如何过滤和清理来自未知来源的所有数据。
要回答您的问题,作为过滤的一部分,您还可以拥有一个不想导入数据库的表单字段列表。
答案 2 :(得分:0)
一个简单的解决方案可能是为您不希望在查询中使用的字段名称添加前缀。
例如
<input type="email" name="*email">
foreach ($_POST AS $field => $value)
if(substr($field,0,1)<>"*")
{
$sql[] = $field." = '". $value."'";
}