我正在创建一个非常大的表单,所有输入都包含类似
的表单<input type="text" id="first_name" name="first_name" />
所以不必做
$first_name = $_POST['first_name'];
对于每个输入等等,有没有办法从<form></form>
中的每个输入中获取每个'name'或'id',并应用于'name'或'的相同值的变量ID”。
我在考虑类似foreach
语句的内容?
有什么想法吗?
编辑:
鉴于此处有一小段代码,现在如何使用下面给出的示例?
function filter($data) {
$data = trim(htmlentities(strip_tags($data)));
if (get_magic_quotes_gpc())
$data = stripslashes($data);
$data = mysql_real_escape_string($data);
return $data;
}
foreach($_POST as $key => $value) {
$data[$key] = filter($value);
echo $value . '<br />';
}
答案 0 :(得分:5)
使用extract
或foreach
这是一个坏主意,它会允许某人劫持您代码中的变量。
想象一下以下
$my_user_id = 10;
extract($_POST);
// Load the user for $my_user_id using MYSQL
// Change some value of the user for $my_user_id
// Update the database for user $my_user_id
当用户攻击您的表单并更改my_user_id
的值时会发生什么?
他们将能够更改您希望他们更改的用户的值。
你应该只获得你知道的$_POST
的值,并且应该在那里。不要抓住所有东西,并假设它应该在那里。
答案 1 :(得分:2)
这样的变量赋值是非常糟糕的主意。恶意用户可以通过这种方式重写程序中的任何变量 永远不要做这样的事情 你对foreach声明是正确的。但是不要用它来设置变量 - 只需使用它来完成脚本目标。迭代$ _POST并将其值放入查询或邮件正文或其他任何内容中。不需要全局范围变量
正如我上面所说,使用foreach
进行真正的自动化
您可以使用此函数从字段名称数组和$ _POST数组中生成SET
SQL语句:
function dbSet($fields) {
$set='';
foreach ($fields as $field) {
if (isset($_POST[$field])) {
$set.="`$field`='".mysql_real_escape_string($_POST[$field])."', ";
}
}
return substr($set, 0, -2);
}
$fields = explode(" ","name surname lastname address zip fax phone");
$query = "INSERT INTO $table SET ".dbSet($fields);