Не работает input type = submit при повторном нажатии
После попытки отправить некорректно заполненную форму, во время попытки повторно отправить ее данные (не важно, корректные, или нет -- результат один и тот же) при нажатии на кнопку 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;
}
}
Источник: Stack Overflow на русском