twofolls95
@twofolls95

Как убрать повторное добавление записи в БД при обновлении страницы?

Доброго времени суток :)
В общем, мне нужно реализовать добавление комментария к статье в БД.
Что имеется:
Таблица comments:
5d567daec7d44257165657.png
HTML-код формы:
<div class="card my-4">
          <h5 class="card-header">Оставить комментарий:</h5>
          <div class="card-body">
            <form method="post">
              <div class="form-group">
                <input type="text" class="form-control" placeholder="Ваше Имя:" name="name"><br>
                <textarea class="form-control" rows="3" name="text"></textarea>
              </div>
              <button type="submit" class="btn btn-primary">Отправить</button>
            </form>
          </div>
        </div>

PHP-код:
function add_comment ($connect) {
 $name = $_POST['name'];
 $text = $_POST['text'];
 $sql = "INSERT INTO comments (`name`, `text`) VALUES ('$name', '$text')";
 $result = mysqli_query($connect, $sql);
 return $result;
}

В целом как бы работает, но с косяками, при добавлении идёт пустая запись, а потом только запись с данными, и ещё, при обновлении страницы всплывает форма подтверждения повторной отправки, а также осуществляется повторная запись в БД.
5d567fba799d8612839885.png
Как это исправить? Заранее спасибо)
  • Вопрос задан
  • 351 просмотр
Решения вопроса 1
glaphire
@glaphire Куратор тега PHP
PHP developer
1. После отправки формы делайте редирект на другую страницу ("thank you page")
2. У Вас всегда insert, чтобы проверять на дубликаты - нужно делать сначала select с такими данными или проверку на существование (EXISTS в мускуле), а потом по логике или update, или другая работа с этими данными
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@user49981
function add_comment ($connect) {
    if(formSubmit('form_commentaries') 
         && formValid(['name', 'text'], [VALIDATE_NAME, VALIDATE_TEXT])) {
        $name = $_POST['name'];
        $text = $_POST['text'];
        $sql = "INSERT INTO comments (`name`, `text`) VALUES ('$name', '$text')";
        $result = mysqli_query($connect, $sql);
        return $result;
    }
}

function formSubmit(string $formName)
{
    if (array_key_exists($formName, $_POST)) {
        return true;
    }
    return false;
}

// define('VALIDATE_NAME', '/^(\w{3,12})$/');
// define('VALIDATE_TEXT', ?);
function formValid(array $fields, array $filters)
{
    for ($i = 0; $i < count($filters); $i++) {
        if(!preg_match($filters[$i], filter_input_array(INPUT_POST)[$fields[$i]])) {
            return false;
        };
    }
    return true;
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы