Делать значения POST динамическими в цикле для хранения в виде массива?
Я работал над попыткой написать функцию, которая будет захватывать значения POST для любой заданной отправки формы, вставлять их в массив, проходить по массиву с помощью функции trim, addlashes и так далее передавать это значение в переменную, где оно затем может быть передано в базу данных.
Теперь препятствие, которое у меня есть atm, это получение всех входных данных, 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 ." - ". ${'field'.$i }."<br />";
}
Как вы можете видеть, все в порядке, за исключением того, что имена значений POST все еще вводятся статически, мне нужен способ получить эти данные POST, переданные в цикл, который динамически вызывает имя POST, используя переменную приращения, а затем выдает pop все эти данные в одном массиве. Код, который я попробовал, следует.
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 ." - ". ${'field'.$i }."<br />";
}
Теперь я знаю, что это не сработает, но я чувствую, что я относительно близок, поэтому мне интересно, может ли какой-нибудь умный человек помочь мне разобраться с последней частью? Я, к сожалению, сейчас иду спать и не буду просматривать этот пост в течение по крайней мере 9 часов, извинения.
Заранее спасибо.
Дан.
2 ответа
Для начала вам нужно присвоить значения $_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 />';
}
}
$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
функция, которая делает именно это. Но, опять же, не делай этого. Массивы являются идеальным способом обработки данных такого рода.