Php 通过每个';名称';将值形式输入到动态创建的变量中
我在做一张表格,那是。。。相当大,所有输入都由如下形式组成Php 通过每个';名称';将值形式输入到动态创建的变量中,php,Php,我在做一张表格,那是。。。相当大,所有输入都由如下形式组成 <input type="text" id="first_name" name="first_name" /> 依此类推,对于每个输入,是否有方法从中的每个输入中获取每个“name”或“id”,并应用于具有相同“name”或“id”值的变量 我在想一个类似于foreach语句的东西 有什么想法吗 编辑: 鉴于这里的这段代码,现在如何使用下面给出的示例 function filter($data) { $data =
<input type="text" id="first_name" name="first_name" />
依此类推,对于每个输入,是否有方法从
中的每个输入中获取每个“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 />';
}
函数过滤器($data){
$data=trim(htmlentities(strip_标签($data));
如果(获取\u魔术\u引号\u gpc())
$data=条带斜杠($data);
$data=mysql\u real\u escape\u字符串($data);
返回$data;
}
foreach($\发布为$key=>$value){
$data[$key]=过滤器($value);
回显$value.“
”;
}
这是一个坏主意,使用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\u user\u id
的值时会发生什么情况
他们将能够更改用户的值,而不是您希望他们更改的值
您应该只从
$\u POST
中获取您知道可以且应该存在的值。不要把所有的东西都抓起来,并假设它就在那里。这样的变量赋值是一个非常糟糕的主意。恶意用户可以通过这种方式重写程序中的任何变量。永远不要做这种事。
关于foreach语句,您是对的。但是不要用它来设置变量——只要用它来实现脚本目标就行了。迭代$\u POST并将其值放入查询或邮件正文或其他内容中。不需要全局范围变量 正如我上面所说,使用
foreach
实现真正的自动化。您可以使用此函数从字段名数组和$\u 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);
这是你能想到的最糟糕的事情。此外,您不需要itI,我会建议您不要使用任何您不知道输入的方法,并且在某种意义上无法控制它,从而使您的应用程序/服务器不受注入的影响。我的目标是减少我的工作量,并将表单添加到数据库的过程自动化。我真的不确定那里发生了什么。我可以看到函数接受$field并将其传递到foreach语句中,但我没有得到的是$\u post[$field]应该是什么。那么爆炸阵,那是什么?从哪里提取名称surename lastname数据?该列说明的是一种自动方法,用于获取
POST
变量并创建SQL查询(如果该查询位于字段字符串中)(分解将帮助您定义允许/匹配的输入)。因此,您的$\u POST[$field]
实际上是$\u POST['name']
。。有更清楚的吗?
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);