0

Имееться файл form.php следующего содержания:

<meta charset="utf-8">
<?php
if (!empty($_POST)) {
    $id = $_POST['id'];
    $name = $_POST['name'];
$link = mysqli_connect('localhost', 'root', 'root', 'mydb');
mysqli_query($link, &quot;SET NAMES 'utf8'&quot;);

$query = &quot;INSERT INTO users SET id='$id', name='$name'&quot;;
$result = mysqli_query($link, $query) or
    die(mysqli_error($link));

unset($_POST);
header('Location: form.php');

} ?>

<form method="POST"> <input name="id"> <input name="name"> <input type="submit"> </form>

При нажатии кнопки отправки данные введеные в форму улетают в базу данных. Header призванный для исключения дубляжа, вместо возложенных на него обязанностей выводит ошибку следующего вида Warning: Cannot modify header information - headers already sent by (output started at C:\OpenServer\domains\newProject\form.php:1) in C:\OpenServer\domains\newProject\form.php on line 15 на страницу. По итогу имеем переполнение базы дубликатами и захламлённую страницу с формой. Каждое обновление страницы порождает запись той же информации, хотя поля формы пусты - это раз и удалён массив ПОСТ - это два. Это как так понимать? Откуда в таком разе беруться данные и как вообще выполняется запрос находящийся в if'е если после удаления массива способом unset($_POST) условие !empty($_POST) становиться ложным(во всяком случае должно становиться). Действительно ли описаное выше условие станет ложным если Header чудесным образом заработает, что для этого нужно? Что я только не пробовал за эти несколько дней: И записывал некую переменную логическую переменную в куки, a затем до if'а пытался удалить пост. И менял empty() на isset(). И насильно менял значения POST[id] и POST[name] на пустату. И даже сделал отдельный файлик куда также, как в случае с куками, записывал логическое значение, после чего мне даже удалось победить злопоучное дублирование данных в базу без применения headera, но увы лишь частично. Перед тем как открыть шампанское, я повторно обновил страницу и данные которые минуту назад были удалены (как мне казалось) снова откуда невозьмись записались в базу. Данные попрежнему записывались в базу данных с тем лишь отличием от предыдущих способов, что делали это раз в 2 обновления. Вобщем я исчерпал все свои идеи и надеюсь на внятный ответ бывалых знатоков.

  • 4
    читайте как работает header (в документации например) и что до него не должно быть никакого вывода в output...... а у вас уже <meta charset="utf-8"> – Алексей Шиманский Jan 29 '22 at 13:47
  • Действительно, как же всё просто 5 сек. и всё заработало, а я несколько дней маялся не зная что делать. Благодарю тебя добрый человек, удачи и всех благ тебе! – Павел Булин Jan 29 '22 at 17:47

0 Answers0