В настоящее время, когда я создаю свои формы, мне нравится сохранять имя кнопки отправки равным id формы. Затем, в моем php, я просто делаю if(isset($_POST['submitName']))
, чтобы проверить, была ли отправлена форма и какая форма была отправлена.
Во-первых, есть ли какие-либо проблемы с безопасностью или недостатки дизайна с помощью этого метода?
Одна из проблем, с которыми я столкнулся, – это когда я хочу наложить свои формы на javascript, чтобы обеспечить более быструю проверку пользователя. Например, хотя мне, очевидно, необходимо сохранить проверку на стороне сервера, для пользователя более удобно, если сообщение об ошибке отображается в строке, при размывании ввода. Кроме того, было бы полезно обеспечить полную проверку формы, нажав кнопку отправки.
Поэтому, когда пользователь нажимает кнопку отправки формы, я останавливаю действие по умолчанию, выполняя мою проверку и затем пытаюсь переименовать традиционную функцию отправки, если проверка прошла. Для этого я использую метод form.submit()
но, к сожалению, это не отправляет переменную кнопки отправки (как и должно быть, поскольку form.submit () может быть вызван без нажатия любой кнопки). Это означает, что мой PHP-скрипт не может обнаружить, что форма была отправлена.
Каков правильный способ обойти это? Похоже, стандартное решение заключается в добавлении скрытого поля в форму после прохождения проверки, которая имеет имя идентификатора формы. Затем, когда вызывается form.submit (), это передается вместе с кнопкой отправки. Однако это решение кажется мне очень неудобным, и поэтому мне интересно, должен ли я:
a) Используйте альтернативный метод для определения того, какая форма была отправлена, которая не полагается на передачу кнопки отправки. Если да, то какая там альтернатива? Очевидно, что с лишним скрытым полем с самого начала не лучше.
б) Используйте альтернативное решение Javascript, которое позволяет мне сохранить мой дизайн, отличный от Javascript. Например, есть ли альтернатива form.submit (), которая позволяет мне передавать дополнительные данные?
c) Подсоедините его и просто вставьте скрытое поле, используя Javascript.
ОБНОВЛЕНИЕ: Я принял правильный ответ, но я просто хотел уточнить свою ошибку здесь, чтобы это было более полезно для других. Я использую Mootools, и я очень наивно полагал, что когда я использовал addEvent ('submit' …), мне нужно было немедленно вызвать event.stop (), чтобы предотвратить отправку. На самом деле это не так, и я могу просто вызвать event.stop (), только если проверка не удалась. В противном случае отправитель по умолчанию запускается, как обычно, и использование form.submit () становится совершенно ненужным.
Вы можете отправить формы различным обработчикам с помощью action=file1.php
и action=file2.php
.
Обработаны ли они с помощью одного и того же кода? Поместите это в отдельные файлы, включите общности и напишите уникальные биты в каждом из файлов обработки. Не взламывайте, не организуйте.
Для проверки Javascript не останавливайте действие по умолчанию, а затем возобновляйте его, вместо этого выполните следующее:
if (validation != valid) { return false; }
Таким образом, если JS выключен или проверка не выполняется, действие / событие формы не повреждено, и оно ведет себя так, как ожидалось, в противном случае это происходит. И, конечно, обязательно сохраните проверку на стороне сервера. Это «настоящая» проверка, клиентская сторона – только для того, чтобы порадовать пользователя и сэкономить время. Никогда не полагайтесь на это ради ВАС.
Вы можете настроить действие формы, чтобы добавить ключ / значение get; таких как action="formhandle.php?formid=10"