2010-04-18 4 views
8

В настоящее время, когда я создаю свои формы, мне нравится, чтобы имя кнопки отправки было равно id формы. Затем, в моем php, я просто делаю if(isset($_POST['submitName'])), чтобы проверить, была ли отправлена ​​форма и какая форма была отправлена.Каков наилучший способ определить, какая форма была отправлена?

Во-первых, существуют ли какие-либо проблемы с безопасностью или дефекты дизайна с помощью этого метода?

Одна из проблем, с которыми я столкнулся, - это когда я хочу наложить свои формы на javascript, чтобы обеспечить более быструю проверку пользователя. Например, хотя мне, очевидно, необходимо сохранить проверку на стороне сервера, для пользователя более удобно, если сообщение об ошибке отображается в строке, при размывании ввода. Кроме того, было бы полезно обеспечить полную проверку формы, нажав кнопку отправки.

Поэтому, когда пользователь нажимает кнопку отправки формы, я останавливаю действие по умолчанию, выполняя мою проверку и затем пытаюсь переименовать традиционную функцию отправки, если проверка прошла. Для этого я использую метод form.submit(), но, к сожалению, это не отправляет переменную кнопки отправки (как и должно быть, поскольку form.submit() можно вызвать без нажатия любой кнопки). Это означает, что мой PHP-скрипт не может обнаружить, что форма была отправлена.

Каков правильный способ обойти это? Похоже, стандартное решение заключается в добавлении скрытого поля в форму после прохождения проверки, которая имеет имя идентификатора формы. Затем, когда вызывается form.submit(), это передается вместе с кнопкой отправки. Однако это решение кажется мне очень неудобным, и поэтому мне интересно, следует ли мне:

a) Используйте альтернативный метод для обнаружения того, какая форма была отправлена, которая не полагается полагаться на передачу кнопки отправки. Если да, то какая там альтернатива? Очевидно, что с лишним скрытым полем с самого начала не лучше.

b) Используйте альтернативное решение Javascript, которое позволяет мне сохранить мой дизайн, отличный от Javascript. Например, есть ли альтернатива form.submit(), которая позволяет мне передавать дополнительные данные?

c) Подсоедините его и просто вставьте скрытое поле, используя Javascript.

ОБНОВЛЕНИЕ: Я принял правильный ответ, но я просто хотел прояснить свою ошибку здесь, чтобы он был более полезным для других. Я использую Mootools, и я очень наивно полагал, что когда я использовал addEvent ('submit' ...), мне нужно было немедленно вызвать event.stop(), чтобы предотвратить отправку. На самом деле это не так, и я могу просто вызвать event.stop(), только если проверка не удалась. В противном случае отправитель по умолчанию запускается, как обычно, и использование form.submit() становится совершенно ненужным.

+0

Моя команда в настоящее время делает это таким образом. Мне это не нравится, так как теперь у наших форм есть кнопка отправки. Ребята, которые его реализовали, перешли в другую команду; мне и другому товарищу по команде было трудно понять, почему наши формы не были отправлены, тогда мы поняли, что для подтверждения требуется кнопка отправки. – b01

ответ

6

Вы можете отправить формы различным обработчикам с помощью action=file1.php и action=file2.php.

Обработаны ли они с помощью связки одного и того же кода? Поместите это в отдельные файлы, включите общности и напишите уникальные биты в каждом из файлов обработки. Не взламывайте, не организуйте.

Для проверки Javascript, не остановить действие по умолчанию, то резюме, вместо этого:

if (validation != valid) { 
    return false; 
} 

Таким образом, если JS отключен или сбое проверки, форма действия/события цела и ведет себя так, как ожидалось, иначе это бонки. И, конечно, обязательно сохраните проверку на стороне сервера. Это «настоящая» проверка, клиентская сторона - только для того, чтобы порадовать пользователя и сэкономить время.Никогда не полагайтесь на это ради ВАС.

+0

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

+0

Спасибо! Спасибо! Это потрясающе. Моя ошибка заключалась в том, что для выполнения любого Javascript onsubmit мне пришлось немедленно прекратить действие отправки по умолчанию. Вместо этого я могу просто сделать все, что хочу, и передать форму только после всего этого кода. Поэтому я могу проверить неудачную проверку и в этом случае предотвратить по умолчанию. Это значит, что я не нуждаюсь в form.submit(). Очень хорошо! –

+0

Отлично, рад, что это полезно! Пока вы не видите, трудно иногда думать о «другом» способе. –

3

Вы можете настроить действие формы, чтобы добавить ключ/значение get; таких как action="formhandle.php?formid=10"

+0

У Alex Mcp есть лучший рецепт. Но я согласен, что это хороший быстрый способ позаботиться о вещах. Когда у меня была такая ситуация, я попытался использовать GET, как это; в конце концов, я решил, что чище держать все на POST. – Smandoli

+0

Интересно, что я только что рассмотрел концепции RESTful и узнал, что в принципе GET предназначен для «обзора», а POST - для интерактивной или «редактируемой» работы. Я не знаю, сколько людей подписывается на это или соглашается с ним. (Извините, на данный момент этого не могу связать.) – Smandoli

+0

Мне нравится это лучше, потому что с решением Alex Mcp вы все еще меняете действие, но перемещаете свой код. Почему бы просто не оставить код одинаковым и просто изменить действие. +1 если GET для обзора. Плюс это более просто и прямо. – b01

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