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

时间:2010-11-11 00:18:11

标签: php post foreach multidimensional-array addslashes

我一直在努力尝试编写一个函数来获取任何给定表单提交的POST值,将它们弹出到数组中,使用trim循环遍历数组,addslashes等将该值传递回变量所在的位置然后可以传递到数据库。

现在我遇到的障碍是在表单提交时将所有输入,textarea,选择元素数据放入数组中。代码我已经跟随

$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个小时,道歉。

提前致谢。

2 个答案:

答案 0 :(得分:2)

$arrayOfPostValues = $_POST;  // it already is an array
$arrayOfPostValues = array_map('strip_tags', $arrayOfPostValues);
$arrayOfPostValues = array_map('trim', $arrayOfPostValues);

或者,如果你真的,真的想要使用循环:

foreach ($arrayOfPostValues as &$value) {
   $value = trim(striptags($value));
}

我绝对建议不要使用addslashes,它的用途很少。请改用mysql_real_escape_stringprepared statements

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

答案 1 :(得分:0)

你需要为$ _POST [1]和$ _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 />';
    }
}