[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Обработчик и форма на одной странице
Игорь_Vasinsky
Обработчик м форма на одной странице


Идея понятна и реализуема скажете Вы, делов то - написали форму, под/над обработчик и всё работает. Так скажет каждый 2й если не 1й новичёк, и броситься в бой.

Так вот есть пара нюансов в такой схеме:

1. Обработчик всё время будет пытаться что-то обработать и при первой же загрузке страницы вы будите удивлены количесву Notices

2. Обычная ситуация с формой, когда новичёк, допустив оплошность, даёт возможность наглому спамеру лёгким нажатием F5 - спамить и спамить хозяину доски объявлений, например.

Давайте рассмотрим на примере, как можно от этого застраховаться:

1. Естественно нам нужна форма, давайте напримере одной textarea, чтобы не замарачиваться.

<form action="" method="POST">
<textarea
name="message"><textarea>
<br />
<input
type="submit" name="send" value="Отправить"/>
</form>


Вот - форма готова. Обратите внимание что action мы оставили путым, этим самым, громко заявив, что обработчик и есть эта страница.
И второе: мы дали name для кнопки submit, для чего? Смотрите дальше.

2. Обработчик нашей формы:

 <?php
//Вот и name simbit понадобился. Мы проверим, нажата ли кнопка "отправить" или нет...
//Вы скжете что php не может проверять события кнопок, это може JS !
//Дело в том что onclick submit на и не понадобиться, мы просто проверим наличие $_POST данных переданные формой


if(isset($_POST['send'])) //Если присутствует элемент массива POST с именем send (а это и есть наша submit)
{
//Первым делом проверим что нам пришло с текстового поля
//Используем тернарный оператор, если вы с ним не знакомы - статья по нему в этом разделе "Полезные приёмы"
//Объявим переменную, в "бою" её вы можете проверять чем вам нужно, как вам нужно, сырую переменную опасно
//отправлять сразу в БД - это выжный момент

$message = !empty($_POST['message']) ? $_POST['message'] : null;

if($message)//Если переменная имеет значение и не пуста
{
//Тут уж вы делаете что вам нужно, пишите в БД, обрабатываете регулярным выражение,
//вообще что вашей душе угодно

//Главное в конце работы очистить $_POST массив, а сделать это легко самому обновив страницу

header("location:" . $_SERVER['PHP_SELF']);
}

}

?>


Результат:

1. Мы тепер знаем как запустить обработчик на одной странице с формой - достаточно проверить нажали ли кнопку submit или нет
2. Маленько попортили жизнь спамеру, теперь у него не получиться нажатием F5 повторить отправку сообщения

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


_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.