Делать значения POST динамическими в цикле для хранения в виде массива? - PullRequest
0 голосов
/ 11 ноября 2010

Я работал над попыткой написать функцию, которая будет захватывать значения POST любой заданной отправки формы, вставлять их в массив, циклически проходить по массиву с помощью trim, addlashes и так далее передавать это значение в переменную, где оно затем может быть передан в базу данных.

Теперь препятствие, которое у меня есть, это получение всех входных данных, 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 часов, извинения.

Заранее спасибо.

Dan.

Ответы [ 2 ]

2 голосов
/ 11 ноября 2010
$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_string или подготовленные операторы .

Я бы также советовал не разбивать значения массива на отдельные переменные, это может вызвать только проблемы.Если вы действительно хотите это сделать, есть функция extract, которая делает именно это.Но, опять же, не делай этого.Массивы являются идеальным способом обработки данных такого типа.

0 голосов
/ 11 ноября 2010

Для начала вам нужно присвоить значения $ _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', не очень хорошо. Попробуйте использовать что-то более описательное, но, как я уже сказал выше, я полагаю, у вас есть причина для этого.


UPDATE: Вы все еще можете заставить это работать для любой формы, даже если вы используете определенные имена для элементов формы. Я добавил несколько строк ниже в качестве примера для вас.

$_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 />';
    }
}
...