У меня огромная форма со входами типа (текст, флажки, скрытые и т. Д.). Содержимое входных данных формы берется из базы данных. Пользователь должен внести некоторые изменения и сохранить данные обратно в db.
В данный момент я использую функцию, которая имеет цикл foreach($_POST as $key=>$value)
. Как вы знаете, есть проблемы с почтовым методом:
Я хотел бы использовать метод $_GET
, но длина моих переменных и значений больше 2000 символов.
У вас есть какие-то советы для меня, что я могу сделать? Может быть, есть некоторые трюки в использовании $_GET
. Может, я не понял, как правильно это использовать?
В самом POST нет ничего плохого. Вы просто должны использовать его правильно
В стандарте HTTP говорится, что вы должны сделать перенаправление GET после получения запроса POST.
Итак, как легкий код, как этот
header("Location: ".$_SERVER['PHP_SELF']); exit;
после обработки ваша форма решит все ваши «проблемы»,
в случае, если вы хотите обрабатывать сообщения об ошибках, вы можете использовать шаблон POST / Redirect / GET. Однако он не перенаправляет на ошибку, проблемы, о которых вы упомянули, становятся незначительными.
вот краткий пример:
<? if ($_SERVER['REQUEST_METHOD']=='POST') { //processing the form $err = array(); //performing all validations and raising corresponding errors if (empty($_POST['name']) $err[] = "Username field is required"; if (empty($_POST['text']) $err[] = "Comments field is required"; if (!$err) { //if no errors - saving data and redirect header("Location: ".$_SERVER['PHP_SELF']); exit; } else { // all field values should be escaped according to HTML standard foreach ($_POST as $key => $val) { $form[$key] = htmlspecialchars($val); } } else { $form['name'] = $form['comments'] = ''; } include 'form.tpl.php'; ?>
по ошибке он отобразит форму обратно. но после успешной отправки формы он также перенаправится.
Используйте шаблон Post / Redirect / Get .
Что касается обработки цикла, контур foreach loop в PHP создает копию массива, над которым вы работаете. Если вы хотите обрабатывать $ _POST с помощью другой конструкции цикла (для / while) и использовать такие функции, как count (), current (), reset (), next (), prev (), end (), each () или key (), есть у него.
Программирование PHP: глава 5, стр. 128-129