Автоматизировать обработку данных формы - PullRequest
2 голосов
/ 13 мая 2011

Есть ли способ автоматизировать (или хотя бы автоматизировать некоторые процессы) извлечения данных из форм, хранящихся в суперглобалах $_POST или $_GET?

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

РЕДАКТИРОВАТЬ: Вот пример, который я могу вспомнить.Скажем, у меня есть целая куча опубликованных данных и я хочу вставить их в базу данных.Насколько я вижу, сделать что-то подобное невозможно, так как мне нужно было бы вставлять значение в разные столбцы в каждом цикле:

foreach($array as $key => $value) {
mysql_query(INSERT INTO table (somecolumn) VALUES($value);
}

Кроме того, я бы очень хотелкак сделать, это взять все значения из опубликованных данных и как-то назначить каждое из них переменной;вроде как то, что делает extract(), но без перезаписи других переменных.Единственное, о чем я могу подумать, это как-то поместить данные в массив, но я не уверен, что это намного эффективнее:

$data = array();
foreach($array as $key => $value) {
$data[$key] = $value;
}

Последний случай, о котором я могу подумать, этокогда я должен использовать эти данные вне цикла foreach.Если я изменю свой код, чтобы он выполнялся так, чтобы все выполнялось внутри цикла foreach, я ограничиваюсь сохранением всего, что связано с данными формы, внутри цикла.Если переменные и / или константы определены внутри цикла, они не могут быть доступны вне его, правильно?В последнее время я много работал с Java и привык к более строгой области видимости и строгому способу обработки переменных :)

Я немного читал о методе extract(), но он выглядит какчто-то опасное в использовании (перезапись переменных, дыр в безопасности и т. д.).

Для тех, кто обрабатывает большие объемы данных (скажем, более 25 полей формы), как вы это делаете?Я устал от назначения переменных типа $data = $_POST['somedata'] снова и снова, чтобы использовать их в других местах ...

Спасибо!

Ответы [ 2 ]

2 голосов
/ 13 мая 2011

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

У вас есть пример таких случаев?

Я читал о методе extract () aнемного, но это выглядит как опасная вещь для использования (перезапись переменных, дыр в безопасности и т. д.).

Да, не используйте это.На самом деле это довольно часто использовалось в предыдущих версиях PHP и вызывало множество проблем с безопасностью.

Для тех, кто обрабатывает большие объемы данных (скажем, более 25 полей формы), как это сделать?ты делаешь это?Я устал от назначения переменных типа $ data = $ _POST ['somedata'] снова и снова, чтобы использовать их в других местах ...

Обычно я разделяю множество полей формы на похожие функциональные группы (имена, числа, даты и т. д.) и так с ними справляться.Если честно, у меня больше проблем с непроверенными данными, поступающими в мою базу данных, чем с проверкой большого количества полей формы.

0 голосов
/ 13 мая 2011

Получите вещи все в порядке.В вашей html-форме и вашей базе данных, если у вас есть элемент 'email', убедитесь, что он совпадает с вашей таблицей, то есть не используйте таблицу db с именем 'user_email'.

Изолируйте те элементы, которые вы простоДОЛЖНЫ проверять, проверять их, добавлять их обратно в массив $ _POST - или терпеть неудачу или прервать соответственно.

$_POST['web'] = {do your cleansing here, add any missing http:// kinda thing}

Удалите все ненужные кнопки отправки, которые могли попасть в ваш массив $ _POST.

unset($_POST['submitMe']);

Затем выполните эквивалент:

$db->saveNew($_POST);

Где $ db - это небольшой слой, лежащий над PDO, который автоматически и без сбоев использует подготовленные операторы для экранирования и защиты вашей базы данных.

Ваш класс $ db может подобрать INI-файл, который определяет, какую переменную ожидает каждая из ваших таблиц, если вы хотите.

...