Php 使POST值在循环中动态存储为数组?

Php 使POST值在循环中动态存储为数组?,php,post,foreach,multidimensional-array,addslashes,Php,Post,Foreach,Multidimensional Array,Addslashes,我一直在努力编写一个函数,该函数将获取任何给定表单提交的POST值,将它们弹出到一个数组中,使用trim、addslashes等在数组中循环,然后将该值传递回一个变量,然后将其传递到数据库 现在我遇到的障碍是在提交表单时将所有输入、文本区域、选择元素数据放入数组。我的代码如下 $fields = array($_POST['1'], $_POST['2']); $i = 0; foreach ($fields as $field) { $i++;

我一直在努力编写一个函数,该函数将获取任何给定表单提交的POST值,将它们弹出到一个数组中,使用trim、addslashes等在数组中循环,然后将该值传递回一个变量,然后将其传递到数据库

现在我遇到的障碍是在提交表单时将所有输入、文本区域、选择元素数据放入数组。我的代码如下

$fields = array($_POST['1'], $_POST['2']);

    $i = 0;
    foreach ($fields as $field) {
        $i++;
        ${'field'.$i } = trim(addslashes(strip_tags($field)));
        echo "POST field info #". $i ."&nbsp;-&nbsp;". ${'field'.$i }."<br />";
    }
正如您在这里看到的,尽管POST值名称仍然是静态的,但一切都很好,我需要的是一种方法,将POST数据送入一个循环,该循环使用增量变量动态调用POST名称,然后将所有数据放入同一数组中。我试过的代码如下

for ($ii=0;$ii++;) {
    foreach($_POST['$ii'] as $field) {
        $fields = array($field);
    }
}

    $i = 0;
    foreach ($fields as $field) {
        $i++;
        ${'field'.$i } = trim(addslashes(strip_tags($field)));
        echo "POST field info #". $i ."&nbsp;-&nbsp;". ${'field'.$i }."<br />";
    }
现在我知道这是行不通的,但我能感觉到我离得比较近,所以我想知道是否有聪明的人能帮我把最后一部分整理出来?很遗憾,我现在要睡觉了,至少要9个小时才能看到这篇文章,抱歉

提前谢谢

或者,如果您真的非常想使用循环:

foreach ($arrayOfPostValues as &$value) {
   $value = trim(striptags($value));
}
我绝对不建议使用addslashes,它没有什么用处。使用或代替


我还建议不要将数组中的值分解成单独的变量,这只会导致问题。如果你真的想这么做,这里有一个函数,它正是这样做的。但是,再一次,不要这样做。数组是处理此类数据的最佳方式。

首先,您需要为$\u POST[1]和$\u POST[2]赋值。我已经为您完成了这项工作,但通常情况下,它们会从我假设的表单填充

我不确定您为什么要做这种事情:${'field'.$key},但我认为您一定有原因,所以我保留了这一部分

无论如何,我已经修改了你的代码一点,见下文

$_POST['1'] = '<h1>variable 1</h1>';
$_POST['2'] = '<h2>variable 2</h2>';

foreach($_POST as $key => $value){
    ${'field'.$key} = trim(addslashes(strip_tags($value)));
    echo "POST field info #". $key ." = ". ${'field'.$key}."<br />";
}
上述代码输出: POST字段信息1=变量1 POST字段信息2=变量2

另一方面,使用诸如“1”和“2”之类的字段名不是很好。尝试使用更具描述性的方法,但正如我上面所说,我认为你这样做是有原因的

更新: 即使您正在为表单元素使用特定的名称,您仍然可以使其适用于任何表单。我在下面添加了几行作为示例

$_POST['email'] = 'example@example.com';
$_POST['password'] = 'hgbks78db';
$_POST['name'] = '';

foreach($_POST as $key => $value){
    if($value==''){
        echo 'POST field "'.$key . '" is empty<br />';
        /* I added the name of the field that is empty to an error array 
        so you have a way of storing all blank fields */
        $a_error[] = $key;
    }
    else{
        echo 'POST field "'.$key . '" is not empty<br />';
    }
}

感谢deceze的回复,我今晚会尝试一下,看看结果如何,别担心我会正常使用mysql\u real\u escape\u字符串,但是为了测试,我没有连接到db atm,所以使用它只会抛出一个错误。谢谢Drew的回复,我今晚下班后会尝试一下。您的更正表单元素按照惯例在表单中命名,现在我选择通用元素名称的原因是,表单验证功能将在任何情况下适用于站点上的任何表单。我有一个网站计划,其中将有15个表单的人口和验证他们都与具体的元素名称,即电子邮件或密码亲自将需要大量的代码行。我的任务是优化这一点:嗨,Drew,你的代码在你发布的内容中运行得很好,我唯一关心的是,一般使用$\u POST意味着提交元素值也作为$\u POST循环的一部分发布,你知道我如何绕过$\u POST数组索引该值吗?忽略这一点,我找到了答案,我只是取消了$\u POST的设置循环之前的['form']。
$_POST['email'] = 'example@example.com';
$_POST['password'] = 'hgbks78db';
$_POST['name'] = '';

foreach($_POST as $key => $value){
    if($value==''){
        echo 'POST field "'.$key . '" is empty<br />';
        /* I added the name of the field that is empty to an error array 
        so you have a way of storing all blank fields */
        $a_error[] = $key;
    }
    else{
        echo 'POST field "'.$key . '" is not empty<br />';
    }
}