Запись в бд через 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>
Вот типа таким должен быть код, вот советы:
- Выведи соединение с бд в отдельный файл и лучше используй PDO (там подстановка параметров и т.д, коротко некая защита)
- Валидируй данные, тут ты не валидировал данные, потому что ты в html указал в input атрибут required, проблема в том что это можно легко обойти просто убрав это из тега, поэтому нужно валидировать данные
- Если есть ошибки после валидации выводи ошибки на странице
- И еще когда сохраняешь пароль, сначала нужно его шфировать, чтобы если кто-то получить твою бд, чтобы он не смог узнать пароли пользователей (и еще прочитай про password_verify потом)