Почему данные автоматически отправляются в базу данных
при перезагрузке страницы данные автоматически отправляются в базу данных(если поля пустые, то отправляются пустые строки)
register.php:
$email = $_POST['email'];
$login = $_POST['login'];
$password = $_POST['password'];
if(isset($_POST['button']))
{
if(isset($email) && isset($login) && isset($password))
{
$STH = $DBH->query("INSERT INTO data(email,login,password) VALUES('$email','$login','$password')");
}
}
connection.php:
<?
$host = "localhost";
$dbname = "data";
$user = "root";
$pass = "root";
$options = array(
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
);
try {
$DBH = new PDO("mysql:host=$host;dbname=$dbname", $user, $pass, $options);
$DBH->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
}
catch(PDOException $e) {
echo $e->getMessage();
file_put_contents('PDOErrors.txt', $e->getMessage(), FILE_APPEND);
}
форма:
<form action="index.php" method="POST">
<input type="email" name="email" placeholder="email">
<input type="text" name="login" placeholder="login">
<input type="password" name="password" placeholder="password">
<input type="submit" name="button">
</form>
как это исправить?
Ответы (3 шт):
Обновление страницы повторяет последний запрос, т.е. если последним была отпрака формы(POST), то браузер честно отправит запрос ещё раз.
Можно отдавать редирект на ту же страницу, т.к. при редиректе будет уже GET запрос. Так же, можно отправить форму на js.
isset($email) /* AND ... */?
Поля, если не были заполнены, но указаны в форме, содержат пустую строку. Т.к isset($var) это аналог $var !== null, то ваша проверка будет пропускаться т.к. идёт сравнение "" !== null.
Можно проверять просто как if($email){}, т.к. "" == false и null == false(внмание на количество =). Но лучше явно проверить на длину и содержание
Сделайте редирект после обработки формы.
if (
!empty($_POST['email'])
&& !empty($_POST['login'])
&& !empty($_POST['password'])
) {
// Делаем какие-то действия с данными из формы
// Далее, переадресуем пользователя на другую страницу
header('Location: /otherPage.php');
} else {
throw new Exception('Ой, ошибочка вышла!');
}
Потому что кнопка обновить в браузере, повторяет последнее выполненное действие, в вашем случае это отправка формы, вот она и отправляет пустые данные, вам правильно советуют с редиректом, либо сделайте в register.php проверку что бы данные были не пустые