Передаёт пустые значение в БД, как это решить?

Здравствуйте.

Столкнулся с такой проблемой. При загрузке страницы передаёт пустые значения в БД, после чего выдаёт ошибку.
$link = mysqli_connect($host, $user, $password, $database) or die("Ошибка " . mysqli_error($link));

    // выполняем операции с базой данных
    $name = $_POST['name'];
    $lastname = $_POST['lastname'];
    $email = $_POST['email'];
    $pass = $_POST['pass'];

    $sql = "INSERT INTO `users` (`name`, `lastname`, `email`, `password`) VALUES ('$name', '$lastname', '$email', '$pass')";

    if (mysqli_query($link, $sql)) {
        echo "New record created successfully";
    } else {
        echo "Error: " . $sql . "<br>" . mysqli_error($link);
    }

    // закрываем подключение
        mysqli_close($link);


Выдаёт такую ошибку
Notice: Undefined index: email in D:\XAMPP\htdocs\PB\registration.php on line 24
на сколько я понимаю. Он не видит значений этих переменных. Но они даже не заполнены, он почему-то сразу отправляет пустышки в БД. Там они записываются, и после перезагрузки страницы даёт ошибку
Warning: mysqli_error() expects parameter 1 to be mysqli, null given


Если подключаю проверку отправки, по типу
if (isset($_POST[]))
то ничего не меняется. Предупреждения остаются.
  • Вопрос задан
  • 893 просмотра
Решения вопроса 3
DmitriyEntelis
@DmitriyEntelis
Думаю за деньги
...
Ну все написано же.
Вы открыли страницу.
Выполняется
$name = $_POST['name'];
Т.к нет никакого пост запроса, то $_POST['name'] не существует, в переменную $name записывается null и об этом кидается нотис.

Нотис не останавливает скрипт и все выполняется дальше.
В базу входит вставка null что абсолютно валидно.

if (isset($_POST[]))должно вообще вызывать ошибку синтаксиса, т.к это бесмысленная запись.
Если проверять - то проверять конкретные значения
if (isset($_POST['name']) && isset($_POST['lastname']) && ... и тд) {
Ответ написан
@quiplunar
Ну для начала вам нужно начать использовать php pdo, уже 2020 год на дворе.

А вот рабочий код:

$db = new PDO('mysql:host=...;dbname=...', $user, $pass);

if ( !isset($_POST['name']) || !isset($_POST['lastname']) || !isset($_POST['email']) || !isset($_POST['pass']) ) {
     echo 'Не все данные заполнены!!!';
     die;
}

$name = $_POST['name'];
$lastname = $_POST['lastname'];
$email = $_POST['email'];
$pass = $_POST['pass'];

$stmt = $dbh->prepare("INSERT INTO REGISTRY (name, lastname, email, password) VALUES (:name, :lastname, :email, :password)");
$stmt->bindParam(':name', $name);
$stmt->bindParam(':lastname', $lastname);
$stmt->bindParam(':email', $email);
$stmt->bindParam(':password', $password);
$falg = $stmt->execute();

if ($flag) {
     echo 'Успешно';
     die;
} else {
     echo 'Ошибка';
     die;
}
Ответ написан
PQR
@PQR
Если это одна и даже страница, что отображает форму и позже принимает данные - сначала надо проверить, а в какой стадии мы сейчас находимся, мы?

Предлагаю обернуть весь код отвечающий за вставку записи завернуть в
if (!empty($_POST)) {
   // здесь код из ответа товарища quiplunar
   
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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