


Php обработка формы обновления данных в базе
php mysqli
всем привет, есть страница с формой на которой можно ввести данные пользователя для их обновления в базе, код работает но есть баг небольшой, вот сам код:
<?php
if(isset($_POST['submit'])){ // если нажата клавиша в форме то
if (empty($_POST['name'])){ // если поле пустое то
}
else {
$name = $_POST['name']; // если поле пустое то
}
if (empty($_POST['surname'])){
}
else {
$surname = $_POST['surname'];
}
// if (empty($_POST['email'])){
//}
// else {
// $email = $_POST['email'];
// }
// if (empty($_POST['number'])){
//}
// else {
// $number = $_POST['number'];
// }
if (empty($_POST['date_of_birth'])){
}
else {
$date_of_birth = $_POST['date_of_birth'];
}
if (empty($_POST['city'])){
}
else {
$city = $_POST['city'];
}
$id = $_SESSION['id']; // присвоить переменной id значение в сессии id
$sql = "UPDATE users SET surname = '$surname', name = '$name', date_of_birth = '$date_of_birth', city = '$city' WHERE id = '$id'"; //обновление строки в таблице если id = id сессии
if (mysqli_query($connection, $sql)) {
echo "Данные обновлены";
}
else {
echo "Ошибка обновления данных";
}
}
так код обновляет данные кроме емаил и номера тел, т. к. я их закоментировал, если их раскоментировать то код тоже будет работать но странно) т. е. если все поля формы заполнить то данные обновляются, если вписать только поле номер тел, то данные емаил сотруться) если вписать только данные емаил, то сотруться данные тел, хотя другие поля с именем фамилией останутся) если вписать только имя то тел и емаил остануться не стертыми, если вписать город, то так же все поля будут сохранены. т. е. проблемма в емаил и номере тел, в чем понять не могу)
Боюсь что так это не работает, ведь в запросе ты отправляешь все данные, вот они и перезатирают, например пробел попал в 'email' и все установился новый 'email' - пустой) Вообще по уму - нужно получить сначала запись из базы данных, те свойства, которые изменились перезалить и валидации не мешало бы добавить (Sql-инъекция пройдет спокойно, подменить данные в форме используя данные тоже особого труда не доставит). Я например получил бы объект используя PDO, сделал бы функцию load() для подгрузки данных, где получил бы свойства используя filter_input(). напрямую из $_POST брать не безопасно, сделал бы функцию validate() где проверил данные и потом бы уже делал update()...типа своей мини-реализации ActiveRecord сделал... Классы и функции не просто так же придумали) А тут не знаю что посоветовать, очевидно что если написал set = и переменную, то перезатрет) надо сохранять только измененые свойства, либо получать все и пересохранять)