Не работает input type = submit при повторном нажатии

Рейтинг: 0Ответов: 1Опубликовано: 14.04.2023

После попытки отправить некорректно заполненную форму, во время попытки повторно отправить ее данные (не важно, корректные, или нет -- результат один и тот же) при нажатии на кнопку Add ничего не происходит -- во вкладке Network в инструментах разработчика не отображаются новые запросы (должен быть POST запрос с кодом 302 и GET запрос с кодом 200), не обновляется страница -- делаю вывод, что по какой-то причине браузер перестаёт обрабатывать нажатие кнопки и делать соответствующий запрос. Почему это может быть?

Код веб-страницы (add.php)

<?php
session_start();

require_once('PDO_connect.php');
require_once('model.php');
require_once('controller.php');

check_permission();
$err_msg = print_err();
data_insert($pdo);
?>

<!DOCTYPE html>
<html>
    <head>
        <title>Viacheslav Kasimov</title>
    </head>

<body>
    <h1>Tracking auto for <?= $_SESSION['name'] ?></h1>
    <?= $err_msg ?>
    <form method="post">
        <div>
            <span>Make</span>
            <input type="text" name="make" size="40">
        </div>
        <div>
            <span>Model</span>
            <input type="text" name="model" size="40">
        </div>
        <div>
            <span>Year</span>
            <input type="text" name="year" size="40">
        </div>
        <div>
            <span>Mileage</span>
            <input type="text" name="mileage" size="40">
        </div>
        <div>
            <input type="submit" name="dopost" value="Add">
            <input type="button" name="cancel" onclick="location.href='/index.php'; return false;" value="cancel">
        </div>
    </form>
</body>

Задействованные функции из внешних ресурсов:

function check_permission(){
    // проверка на логин
    if (! isset($_SESSION['name'])) {
        die('Not logged in');
    }
}

function print_err(){
    $result = '';
    if (isset($_SESSION['error'])){
        $result.='<div style="color:red;">'.$_SESSION['error'].'</div';
        unset($_SESSION['error']);
    }
    if (isset($_SESSION['success'])){
        $result.='<div style="color:green;">'.$_SESSION['success'].'</div';
        unset($_SESSION['success']);
    }
    return $result;
}

function data_insert($pdo){
    if (isset($_POST['dopost'])){
        if (error_handler_insert_add()){
            header('Location: '.$_SERVER['PHP_SELF']);
            return;
        }
        else{
            $stmt = $pdo->prepare('INSERT INTO autos (make, year, mileage, model) VALUES ( :mk, :yr, :mi, :md)');
            $stmt->execute(array(
                ':mk' => htmlentities($_POST['make']),
                ':yr' => $_POST['year'],
                ':mi' => $_POST['mileage'],
                ':md' => $_POST['model']
            ));
            header('location: index.php');
            $_SESSION['success'] = 'Record inserted';
            return;
        }
    }
}

function error_handler_insert_add(){
    if (strlen($_POST['model']) < 1 || strlen($_POST['make']) < 1 || strlen($_POST['mileage']) < 1 || strlen($_POST['year']) < 1){
        $_SESSION['error'] ='All fields are required';
        return true;
    }   elseif (!is_numeric(htmlentities($_POST['mileage'])) || !is_numeric(htmlentities($_POST['year'])) ){
        $_SESSION['error'] ='Mileage and year must be numeric';
        return true;
    }   else{
        return false;
    }
}

Ответы

▲ 0

Вопрос решен.

В функции print_err() не закрывались div.

Вот корректный код:

function print_err() {
    $result = '';
    if (isset($_SESSION['error'])){
        $result.='<div style="color:red;">'.$_SESSION['error'].'</div>';
        unset($_SESSION['error']);
    }
    if (isset($_SESSION['success'])){
        $result.='<div style="color:green;">'.$_SESSION['success'].'</div>';
        unset($_SESSION['success']);
    }
    return $result;
}