Запись в бд через php(проблемы с INSERT INTO user_info)

Не срабатывает запись в бд.

Бд - pharmacy_site / таблица - user_info / данные для записи login password.
Не могу записать в бд третье значение значение email

"INSERT INTO user_info(login, password, email)"

подсвечивается другим цветом

php (файл upload.php)

<?php 
$login = $_POST['login'];
$password1 = $_POST['password1'];
$password2 = $_POST['password2'];
$email = $_POST['mail'];


$link = new mysqli('localhost','root','','pharmacy_site'); //подключение к бд

mysqli_query($link,"INSERT INTO user_info(login,password) VALUES('$login','$password1'");




if(mysqli_connect_errno()){
   echo 'ошибка в подключении к базе данных ('.mysqli_connect_errno().'):'.mysqli_connect_error(); // вывод ошибки
   exit();
}
?>

html

    <form action="upload.php" method="POST">
        <a href="#log_in" class="log_in" id="log_in">Войти</a>
        <a href="#registration" class="registration">Регистрация</a>
        <section class="section-clip"></section>


        <input class="login_1" placeholder="login" type="text" name="login" required>
        <input class="mail_1" placeholder="@mail" type="email" name="mail" required>
        <input class="password_3" placeholder="password" type="password" name="password1" required>
        <input class="password_4" placeholder="password" type="password" name="password2" required>
        <input type="submit" class="go" value="Отправить">
    </form>

В чем может быть проблема?


Ответы (1 шт):

Автор решения: Rahman

Как я правильно понял, тебе не удается записать Email (mail) в бд?

Проблема в том, что ты вообще неуказываешь что нужно его сохранить (в команде INSERT)

Попробуй вот так:

`<?php 
  // подключение к бд (лучше вынести в отдельный файл, и лучше использовать PDO)
  $link = new mysqli('localhost','root','','pharmacy_site');

  if(mysqli_connect_errno()){
    echo 'ошибка в подключении к базе данных ('.mysqli_connect_errno().'):'.mysqli_connect_error(); // вывод ошибки
    exit();
 }

  if(isset($_POST['go'])) {
    $login = $_POST['login'] ?? false;
    $password1 = $_POST['password1'] ?? false;
    $password2 = $_POST['password2'] ?? false;
    $email = $_POST['mail'] ?? false;

    $errors = [];
 
    if(!$login) {
      $errors[] = 'Ты не заполнил поле login'; 
    }
  

    if(!$email) {
      $errors[] = 'Ты не указал поле email'; 
    }


    if($password1 != $password2) {
      $errors[] = 'Пароли не совпадают'; 
    }

    if (empty($errors)) {
        $password = password_hash($password1, PASSWORD_DEFAULT); // хэшируем пароль
        mysqli_query($link, "INSERT INTO `user_info` (login, password, email) VALUES('{$login}','{$password}', '{$email}'");
    }
 
  }

?>

HTML:

 <form action="upload.php" method="POST">
  
     <?php if(!empty($errors)):?>
       <div>
         <?php foreach($errors as $error):>
            <p><?=$error?></p>
         <?php endforeach;?>
       </div>
     <?endif;?>
    <a href="#log_in" class="log_in" id="log_in">Войти</a>
    <a href="#registration" class="registration">Регистрация</a>
    <section class="section-clip"></section>

    <input class="login_1" placeholder="login" type="text" name="login" required>
    <input class="mail_1" placeholder="@mail" type="email" name="mail" required>
    <input class="password_3" placeholder="password" type="password" name="password1" required>
    <input class="password_4" placeholder="password" type="password" name="password2" required>
    <input type="submit" class="go" name="go "value="Отправить">
</form>

Вот типа таким должен быть код, вот советы:

  1. Выведи соединение с бд в отдельный файл и лучше используй PDO (там подстановка параметров и т.д, коротко некая защита)
  2. Валидируй данные, тут ты не валидировал данные, потому что ты в html указал в input атрибут required, проблема в том что это можно легко обойти просто убрав это из тега, поэтому нужно валидировать данные
  3. Если есть ошибки после валидации выводи ошибки на странице
  4. И еще когда сохраняешь пароль, сначала нужно его шфировать, чтобы если кто-то получить твою бд, чтобы он не смог узнать пароли пользователей (и еще прочитай про password_verify потом)
→ Ссылка