Предотвратить повторную отправку формы

160
30 октября 2018, 15:30

КАК предотвратить повторную отправку формы.

<?php
require 'resource/libs/db/db.php';
$data = $_POST;
if(isset($data['do-signup']))
{
    $errors = array();
    if(trim($data['login']) == '')
    {
        $errors[]='Введите логин';
    }
    if(trim($data['email']) == '')
    {
        $errors[]='Введите email';
    }
    if($data['password'] == '')
    {
        $errors[]='Введите pasw';
    }
    if(R::count('users',"login = ?", array($data['login'])) > 0 )
    {
            $errors[] = 'login уже есть';
    }
    if(R::count('users',"email = ?", array($data['email'])) > 0 )
    {
            $errors[] = 'email уже есть';
    }
    if(empty($errors))
    {
            $user = R::dispense('users');
            $user->login = $data['login'];
            $user->email = $data['email'];
            $user->password = password_hash($data['password'],PASSWORD_DEFAULT);
            R::store($user);
    }else
    {
        echo '<div>'.array_shift($errors).'</div><hr>';
    }
}?>
<form action="signup.php" method="POST">
            <ul>
            <li><input type="text" name="login" placeholder="Логин"></li>
            <li><input type="email" name="email" placeholder="Email"></li>
            <li><input type="text" name="password" placeholder="Пароль"></li>
            <li><input type="submit" name="do-signup" value="Вход"></li>
        </ul>
        </form>
Answer 1

Вас спасет самый древний костыль на эту тему, дедовский способ:

В форме вставляем:

<input type="hidden" name="token" value="<?php echo(rand(1,999999));?>" />

Тогда проверка выглядит так:

session_start();
if (isset($_POST['token'])) {
    if ($_POST['token'] == $_SESSION['formToken']) {
        // ошибка: повторная отправка формы
    } else {
        $_SESSION['formToken'] = $_POST['token'];
        // обрабатываем форму
    }
}

Редирект (но тогда от выводов в PHP придется отказаться)

header("Location:".$_SERVER['PHP_SELF']);
READ ALSO
Как поменять содержимое ComboBox в Битрикс?

Как поменять содержимое ComboBox в Битрикс?

Имеется раздел CRM, в нём КомпанииПри добавлении новой компании предлагается выбрать из выпадающего списка Тип

153
Не отрабатывает comment-reply.js wordpress

Не отрабатывает comment-reply.js wordpress

Создан вывод комментариев при помощи дефолтной функции wp_list_comments()

165
Помощь по коду для WordPress

Помощь по коду для WordPress

Такая ситуация:

161
php использование переменных внутри class

php использование переменных внутри class

Как использовать переменные внутри класса? ВОт пример кода, который нужно заставить работать:

126