Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 通过每个';名称';将值形式输入到动态创建的变量中_Php - Fatal编程技术网

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);