2013-12-24 3 views
1

Я хотел бы избежать двойного представления формы или нежелательной отправки при первом нажатии ссылки на форму, которая выводит пустые данные.php двойная форма отправить предупреждение

Код, который мне удалось найти there, по-видимому, предотвращает двойную или одну пустую форму или предыдущую форму, но также препятствует отправке формы при ожидании.

Основные части кода, как показано ниже, все части в одном файле php.

<?php 
session_start(); 
$_SESSION['token'] = md5(session_id() . time()); 
?> 

<!DOCTYPE HTML> 
... 

<form method="post" action="<?php echo $_SERVER['PHP_SELF'] ?>" name="form_submitted"> 

<input type="hidden" name="token" value="<?php echo $_SESSION['token'] ?>" > 

<input type="checkbox" name="catexp[]" value="1">Input1 
<input type="checkbox" name="catexp[]" value="2">Input2 
<input type="checkbox" name="catexp[]" value="3">Input3 

<input type="Submit" name="Submit" > 

</form> 

<?php 

if (isset($_SESSION['token'])) 
{ 
    if (isset($_POST['token'])) 
    { 
     if ($_POST['token'] != $_SESSION['token']) 
     { 
      // double submit 
     } 
     else 
     { 

      // FORM PROCESSING HERE 


     }// else ($_POST['token'] == $_SESSION['token']) 

    } // if (isset($_POST['token'])) 

} // if (isset($_SESSION['token'])) 

?> 

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

Tkanks Паскаль

+0

Одна идея заключается в хэш-ключ $ _POST, значения и хранить хэш в сеансе, используйте этот хэш-значение, чтобы проверить, если его тот же самый старый значение, которого следует избегать. Вы либо создаете свой собственный хеш-метод, либо ищете его. – MTahir

ответ

0
  1. сеанса настройки ID с пользователем
  2. Проверьте идентификатор сеанса уже в базе
  3. формы Insert, если сессия является уникальной базой данных

Я бы рекомендовал используя проверку на стороне клиента, чтобы уменьшить работу, требуемую сервером. Для этого используйте JavaScript.

0

Когда первая форма времени представляется просто очистить $_SESSION['token']

if (isset($_SESSION['token'])) 
    { 
     if (isset($_POST['token'])) 
     { 
      if ($_POST['token'] == $_SESSION['token']) 
      { 
       unset($_SESSION['token']); 
       // do form processing 

      } 
      else 
      { 
       // double submit 
Смежные вопросы