Как правильно написать запрос к БД?

176
02 февраля 2018, 23:05

Есть PHP обработчик для редактирования данных пользователя.

$result = $mysqli->query("SELECT email,phone FROM `bd_users` WHERE NOT EXISTS (SELECT * FROM `bd_users` WHERE `id` = '".$id."')" );
$row = mysqli_fetch_array($result);
if($row['email'] == $email){
    $_SESSION["error_messages"] = "<p class='mesage_error'>Пользователь с таким e-mail уже зарегистрирован</p>";   
        header("Location: ***");
        exit();
} 
if($row['phone'] == $phone){
    $_SESSION["error_messages"] = "<p class='mesage_error'>Пользователь с таким номером телефона уже зарегистрирован</p>";  
        header("Location: ***");
        exit();
}
$result_query_insert = $mysqli->query("UPDATE `bd_users` SET email='".$email."', pass='".$pass."', phone='".$phone."', name='".$name."', fname='".$fname."', otname='".$otname."' WHERE `id` = '".$id."'");
if(!$result_query_insert){    
$_SESSION["error_messages"] = "<p class='mesage_error' >Ошибка запроса на добавления пользователя в БД</p>";
header("Location: ***");
exit();
}else{
$_SESSION["success_messages"] = "<p class='success_message'>Редактирование прошло успешно!!!</p>";
header("Location: ***");
}

Так вот, по идее он должен перезаписывать данные пользователя(что он в принципе и делает, т.е. сам обработчик свое дело делает)

Загвоздка вот в чем - если поменять емайл(телефон) пользователя на тот, что уже есть в БД, то он пишет: "Ошибка запроса на добавление пользователя в БД", а должен писать ту ошибку, где пользователь ввел совпадающие с другими пользователя данные(емайл или телефон).

Поля мыла и телефона уникальны(т.е я понимаю почему мне пишет, что не может быть добавлено это значение в поле таблицы). Но как сделать чтобы мне вывело Erorr именно про то поле, которое пользователь ввел совпадающим не знаю.

Answer 1

попробуйте сделать так

$result = $mysqli->query("SELECT email,phone FROM `bd_users` WHERE NOT EXISTS (SELECT * FROM `bd_users` WHERE `id` = '".$id."')" );
$row = mysqli_fetch_array($result);
if ($row['email'] == $email) {
    $_SESSION["error_messages"] = "<p class='mesage_error'>Пользователь с таким e-mail уже зарегистрирован</p>";   
    header("Location: ***");
    exit();
} 
if ($row['phone'] == $phone) {
    $_SESSION["error_messages"] = "<p class='mesage_error'>Пользователь с таким номером телефона уже зарегистрирован</p>";  
        header("Location: ***");
        exit();
} else {
    $result_query_insert = $mysqli->query("UPDATE `bd_users` SET 
                                    email='".$email."', pass='".$pass."', phone='".$phone."', name='".$name."', fname='".$fname."', otname='".$otname."' WHERE `id` = '".$id."'");
    if (!$result_query_insert) {    
        $_SESSION["error_messages"] = "<p class='mesage_error' >Ошибка 
            запроса на добавления пользователя в БД</p>";
        header("Location: ***");
        exit();
    } else {
        $_SESSION["success_messages"] = "<p 
            class='success_message'>Редактирование прошло успешно!!!</p>";
        header("Location: ***");
   }
}
Answer 2

Всем спасибо нашел решение.

$result = $mysqli->query("SELECT `email` FROM `bd_users`
WHERE `email` IN ('".$email."') AND `email` NOT IN ('".$s_email."')");

Перед этим, на странице аутентификации засунул в сессию значение email. После апдейта БД так же засунул значение email в сессию(чтобы сравнивалось с обновленным значением email). Скорее всего, я как начинающий нубешник принялся изобретать свой велосипед и наверняка есть более лаконичное или правильное решение, но раз и это работает...

READ ALSO
mysql корректировать запроса

mysql корректировать запроса

Здравствуйте, пытаюсь обновить поле, запросом - UPDATE users SET status = {$status} WHERE id = {$id}

137
Кастомизация фильтра в Sonata Admin

Кастомизация фильтра в Sonata Admin

Имеется фильтр в админке сайта, какие атрибуты нужно использовать для изменения лейблов на значения из словаря?

168
Как получить значение поля у которого другие значения равны условию?

Как получить значение поля у которого другие значения равны условию?

Мне нужно получить id папки, у которой все статусы файлов равны 3

149