Задать вопрос

Как запретить срабатывание POST метода?

Есть форма, которая обрабатывается PHP скриптом, по методу POST. Проблема в том, что эта обработка срабатывает не только при нажатии на "submit", но и просто при обновлении страницы. И с каждым обновлением данные формы обрабатываются без необходимости. Как мне запретить обработку метода POST при загрузке страницы?

//переход на скрипт upload.php, сделано для того, чтобы скрипт выполнялся на текущ. странице
                    <?php       
                        if($_SERVER['REQUEST_METHOD']=='POST')
                            include 'upload.php';
                    ?>
                    <form method="post" action="" enctype="multipart/form-data" >
                        <input class="file-input" type="file" name="file">
                        <input class="file-name" type="text" name="text">
                        <div class="form-footer">
                            <input type="submit" name="submit" value="Upload">
                        </div>
                    </form>


Код самого скрипта, на всякий случай:

if(isset($_POST['submit']) and $_FILES['file'] and $_POST['text']) {
    $checkString = (string)$_FILES['file']['name'];
    $checkArray = explode(".", $checkString);
    if (end($checkArray) == "mp3") {
        move_uploaded_file($_FILES['file']['tmp_name'], "uploades/".$_FILES['file']['name']);

        $text = $_POST['text'];
        $duration = 130;
        $path = "uploades/". "{$_FILES['file']['name']}";
        
        $sql_connect = mysqli_connect("localhost", "root", "root", "testtrack");
        $sql_query = "INSERT INTO `tracklist` (`name`, `duration`, `path`) VALUES ('$text', $duration, '$path');";
        $res = mysqli_query($sql_connect, $sql_query);
    }
}
  • Вопрос задан
  • 251 просмотр
Подписаться 1 Простой Комментировать
Решения вопроса 2
@MikUrrey
В upload.php в самом конце сделайте редирект на эту же страницу:
//определяем протокол - HTTP/HTTPS
$proto = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] != 'off')? 'https': 'http';
//шлем заголовок для "обновления" страницы без пересылки формы.
//все последующие "ручные" обновления страницы будут происходить без отправки формы
header('Location: ' . $proto . '://' . $_SERVER['HTTP_HOST'] . '/' . $_SERVER['REQUEST_URI']);
exit;

Вообще, это "best practice", перебрасывать редиректом после обработки формы, если не было ошибок при сохранении формы.
Exit в конце прерывает выполнение остального кода.
Ответ написан
sHinE
@sHinE
веб-разработчик, php/js/mysql и сопутствующее
В сессию какой-нибудь флажок добавляйте, что данные уже обработаны. А вообще, после обработки данных делайте редирект на тот же самый скрипт с каким-нибудь случайным параметром. Тогда при обновлении страницы не будет POST-запроса, будет GET
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы