При обновлении страницы данные отправляются бесконечно раз в бд?

Здравствуйте! У меня появилась проблема, есть форма в админке, для обновления данных на сайте, все работает только вот если записать в форму данные и обновлять страницу, то сколько раз ты обновишь - столько раз она выведет на страницу одну и ту-же информацию

<?php
$host = "localhost";
$user = "root";
$password = "1234";
$database = "BorkiFestival_site";

if (isset($_POST['date']) && isset($_POST['day']) && isset($_POST['time']) && isset($_POST['place']) && isset($_POST['description'])){
    $day = strip_tags(trim($_POST['day']));
    if($day == '1'){
        $dbtable = "program_day_1";
    }elseif($day == '2'){
        $dbtable = "program_day_2";
    }
//переменные с формы
$date = strip_tags(trim($_POST['date']));
$time = strip_tags(trim($_POST['time']));
$description = strip_tags(trim($_POST['description']));
$place = strip_tags(trim($_POST['place']));

$link = mysqli_connect($host, $user, $password, $database);

    
$sql = "INSERT INTO ".$dbtable." (time, description, date, place) VALUES ('$time', '$description',  '$date', '$place')";

//внесём данные с формы в БД
$res = mysqli_query($link, $sql);

mysqli_close($link);
}
?>


<div class="program__date__date-1">
                        <?php
                            $db = new PDO(dsn:"mysql:host=localhost;dbname=BorkiFestival_site", username:"root", password: "1234");
                            $info = [];
                            $info_date = [];
                            if($query = $db->query("SELECT * FROM `program_day_1`")){
                                $info = $query->fetchAll(fetch_style: PDO::FETCH_ASSOC);
                            }else{
                                print_r($db->ErrorInfo());
                            }
                            if($query = $db->query("SELECT `date` FROM `program_day_1` ORDER BY id DESC LIMIT 1")){
                                $info_date = $query->fetchAll(fetch_style: PDO::FETCH_ASSOC);
                            }else{
                                print_r($db->ErrorInfo());
                            }
                            foreach($info_date as $data):?>
                            <div class="program__date__number-div margin-bottom-50px">
                            <p class="program__date_number"><?php echo $data['date']?></p>
                            </div>
                        <?php endforeach;
                            foreach($info as $data):?>
                                <div id=<?php echo $data['id']?> class="program__item-row">
                                        <div class="program__item-time"><?php echo $data['time']?></div>
                                        <div class="program__item-desc"><?php echo $data['description']?>
                                            <br><em><?php echo $data['place']?></em>
                                        </div>
                                    </div>
                            <?php endforeach; ?>
                    </div>
                    <div class="program__date__date-2 display-none">
                        <?php
                            $db = new PDO(dsn:"mysql:host=localhost;dbname=BorkiFestival_site", username:"root", password: "1234");
                            $info = [];
                            $info_date = [];
                            if($query = $db->query("SELECT * FROM `program_day_2`")){
                                $info = $query->fetchAll(fetch_style: PDO::FETCH_ASSOC);
                            }else{
                                print_r($db->ErrorInfo());
                            } if($query = $db->query("SELECT `date` FROM `program_day_2` ORDER BY id DESC LIMIT 1")){
                                $info_date  = $query->fetchAll(fetch_style: PDO::FETCH_ASSOC);
                            }else{
                                print_r($db->ErrorInfo());
                            }
                            foreach($info_date as $data):?>
                                <div class="program__date__number-div margin-bottom-50px">
                                <p class="program__date_number"><?php echo $data['date']?></p>
                                </div>
                            <?php endforeach;
                            foreach($info as $data):?>
                                <div id=<?php echo $data['id']?> class="program__item-row">
                                        <div class="program__item-time"><?php echo $data['time']?></div>
                                        <div class="program__item-desc"><?php echo $data['description']?>
                                            <br><em><?php echo $data['place']?></em>
                                        </div>
                                    </div>
                            <?php endforeach; ?>
                    </div>
  • Вопрос задан
  • 121 просмотр
Решения вопроса 2
alexey-m-ukolov
@alexey-m-ukolov Куратор тега PHP
Чтобы этого не происходило, нужно после успешного добавления куда-то редиректить пользователя (это может быть даже та же страница). Тогда браузер «забудет» введённые данные и можно будет обновлять страницу без вреда.
Ответ написан
Комментировать
@AUser0
Чем больше знаю, тем лучше понимаю, как мало знаю.
Есть вариант, надёжный: при генерации формы вставлять в неё одноразовый ключ, и запоминать ключ на сервере. При обновлении, если ключ на сервере есть - штатно обновлять информацию, и сразу стирать ключ. Всё, больше с таким ключём обновить не получится, нужно опять загружать форму, с новым ключём и уже новыми данными... Можно пойти дальше - при обновлении стирать все ключи, связанные с этой страницей/данными. Тогда другие вкладки/браузеры вынуждены будут обновить форму, в которой окажутся уже новые данные.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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