2009-07-26 2 views
2

Я ищу чистый способ обработки форм с PHP, который выполняет валидацию и кеширование данных, но не требует смешивания PHP с формой HTML. В принципе, я хочу, чтобы иметь возможность писать форму в чистом HTML и перехватывать эту форму на пути ее к месту назначения, обрабатывать ее и либо передавать данные по-своему, либо возвращаться к форме отправки ошибок проверки и кэшированных результатов назад с этим.Обнаружение того, была ли форма отправлена ​​с PHP

Эта часть небольшой рамки, которую я разрабатываю как помощь в обучении. Мой первоначальный план состоял в том, чтобы использовать объект Routing для извлечения данных GET и POST, но эти данные не всегда указывают на наличие формы.

Я просматривал this list of HTTP Headers, но я не вижу ничего, что могло бы помочь. Хотя я никогда не беспокоился о просмотре заголовков HTTP, поэтому я мог легко что-то упустить.

Или есть ли другой надежный способ обнаружения форм?

+0

Как этот подход счета для возврата ошибки проверки и заселив форму? – Rafe

+0

Два способа. Во-первых, существует класс журнала, каждый из которых содержит экземпляр. Первое, что делает каждый просмотр, - это отображение любой обратной связи с пользователем. Во-вторых, есть некоторые функции js ядра, которые каждый макет загружает автоматически. Одна из этих функций восстановит кешированные значения, а также добавит классы ошибок в ошибочные поля. – gargantuan

ответ

4

Не существует общего способа различения представлений форм и простых ссылок, когда дело доходит до запросов GET.

С помощью простого HTML только формы могут генерировать POST-запросы, поэтому фильтрация по REQUEST_METHOD может быть жизнеспособным решением. (Тем не менее, это, очевидно, не поймаешь GET запросы и AJAX также может генерировать POST запросы, так что ...)

Если вы контролируете форму, я предложил бы добавить что-то вроде

<input type="hidden" name="this_is_a_form" /> 

к каждая форма. (Для бонусных точек вы можете перехватить форму HTML и добавить эту строку на лету.)

+0

hmmm, что я могу сделать, когда я возвращаю HTML для включения в представление. Интересно, какие накладные расходы будут. – gargantuan

0

Вы очень много есть два варианта:

  1. Использование Ajax.
  2. Отправьте запрос middleman.php и перейдите к шагу 2 процесса или вернитесь к форме.

Я бы порекомендовал ajax, чтобы избежать ненужных загрузок страниц. Вы могли бы сделать что-то вроде:

(предполагающей использование JQuery здесь, потому что это то, что я знаю)

$.post("middleman.php", {option1: options}, function(data){ 
    if (data == 1) window.location = 'step2.html'; 
    else $("#notificationArea").text("sorry, form incorrect")}, "html"); 

Тогда ваш middleman.php бы повторить либо 1 для правильной представленной формы, или что-нибудь еще некорректного ,

Кроме того, этот javascript уведомляет пользователя о некорректности. Вы также можете эхо-сообщения о конкретных ошибках для определенных частей формы, которые являются неправильными. (это также предполагает, что у вас есть div «notificiationArea», который может содержать нотификацию)

+0

Я стремлюсь к чему-то, что работает без Javascript из коробки (хотя я буду использовать jQuery в обратном пути для некоторого дополнительного bling, но он будет работать без него). Кроме того, решение Ajax не сделает данные безопасными для вставки базы данных. Во-вторых, мне бы очень хотелось сохранить чистоту формы, указав ее атрибут действия, указывающий на то, куда он должен идти. – gargantuan

0

Я бы посоветовал вам взглянуть на то, как существующие фреймворки выполняют проверку данных. Я использую QCubed, они делают именно то, что вы описали (перехватывая ввод пользователя и проверяя его перед обработкой) очень хорошо. Вот учебник, в котором описывается процесс обработки их форм: http://examples.qcu.be/assets/_core/php/examples/basic_qform/process_flow.php. Form_Validate - это именно тот этап, который вы описали.

Сторона примечания: важно выполнить проверку данных на стороне сервера по соображениям безопасности/целостности данных. Если вы хотите, вы можете использовать ADD на стороне клиента (javascript), чтобы улучшить работу пользователя. Но у вас также есть проверки на стороне сервера.

0

вы можете проверить:

if(!empty($_POST) && isset($_POST['submit'])) 

где «отправить» это имя вашей кнопки отправки ...

Смежные вопросы