Как вывести сообщение об ошибке?

Добрый день всем, подскажите имеется данный код

вот сообщение выводится для успешной подписки так

как можно вывести сообщение " пользователь с таким емейлом уже есть в базе"

колонка email unique

выдает при дубликате в браузере -

Дополнительно:

как можно сделать обработку на повторяющийся email если таков есть в базе, с выводом ошибки

Надо создать уникальный индекс по этому полю в структуре таблицы. Тогда выполнение INSERT приведёт к ошибке, которая отлавливается на стороне PHP.

  • Akina, да есть такое , ошибка такая

    а как ее можно вывести для людей ? не могу разобраться, это я только в браузере вижу в консоле

  • Night386, а вот это уже за пределами моих знаний - я только по части СУБД. Откорректируй вопрос (или создай новый) - типа "я получаю ошибку от MySQL, как вывести в браузер кастомное сообщение об этом".. и не забудь учесть, что это не единственная ошибка, которую может вернуть выполнение этого INSERT.
  • Ответы:

    ChatGPT на что?

    Необходимо изменить запрос на добавление данных в базу, чтобы он не вызывал ошибку при дубликате, а вместо этого возвращал информацию о том, что пользователь с таким емейлом уже существует. Для этого можно использовать конструкцию INSERT IGNORE или INSERT ... ON DUPLICATE KEY UPDATE.

    Пример с использованием INSERT IGNORE:

    или просто try...catch:

    Дальше JS сам, думаю, допишешь.

    • Доброй ночи! спасибо! а почему может быть такое когда вписываю email любой который есть в бд или нет , выдает success? попробовал оба метода
    • Night386, потому что перед добавлением лучше проверять существование такой записи. И выводить ошибку, если запись уже существует. А INSERT IGNORE - плохая практика, положительный результат при отсутствии результата. Тем более INSERT ... ON DUPLICATE KEY UPDATE - черезвычайно плохая практика, можно поменять/поломать подписки всем пользователям, почтовые ящики которых известны.

      P.S. А полное отсутствие защиты от SQL Injections - за такое розгами надо пороть. Прилюдно.

    • AUser0, я понял, только как это все сделать ?)
    • AUser0, попробовал вот так опять пишет запись существует и не добавляет другие записи теперь

    • Night386, а вы проверяли, чему равно $check при наличии/отсутствии записи в БД? Там точно null либо не null?

      Не добавляет другие записи? Вам нужно добавит несколько записей?

    • AUser0, вот так я еще раз попробовал , если запись имеется то check выдает true , если нет записи то пишется в базу, но уведомления и что есть запись что нет - success

    • Night386, поздравляю, у вас нет проверки на наличие записи. Вне зависимости от результата SELECT у вас выполняется код в try{}, и если там произошла ошибка и db::i()-&query() выкинуло Exception - выполнится catch{}. $check ни где не проверяется, можете удалить SELECT - ничего не поменяется, гы-гы-гы!
    • AUser0, а как можно сделать такую проверку? не подскажете? уже столько вариантов перепробовал(
    • Night386, так напрягитесь и узнайте точное содержимое $check при наличии и отсутствии записи в Базе Данных. От этого и пляшите.
    • AUser0, понял , пока не получилось конечно, может не те условия пишу как то
    • Night386, как-то напрягитесь и узнайте точное содержимое $check при наличии и отсутствии записи в Базе Данных. Это не просто, но это надо сделать, как-то собраться и как-то напрячься.
    • AUser0, когда запись есть $check выдает true , когда нету тоже самое тру
    • Night386, ну вот, уже конкретный результат. Теперь смотрите другие запросы, из которых нормально вытаскиваются данные - и повторяйте весь алгоритм здесь, проверяйте возвращаемое значение email на не пустоту, и т.д.
    • AUser0, спасибо! буду пробовать

     

    Для решения данной проблемы вы можете воспользоваться услугами фрилансеров. Мы выполним необходимую работу быстро и качественно.

     

      • Как вывести сообщение об ошибке?Есть ответ
      • 07.04.2024
      Ответить

      Для вывода сообщения об ошибке в PHP можно использовать функцию echo или print, а также функцию die() или exit(). Например, если у вас есть переменная, содержащая текст ошибки, вы можете вывести ее на экран следующим образом:

      Если вы хотите завершить выполнение скрипта после вывода сообщения об ошибке, то можно использовать функцию die() или exit(). Например:

      Это простой способ вывести сообщение об ошибке на экран и остановить выполнение скрипта. Однако, для более сложных сценариев работы с ошибками рекомендуется использовать конструкцию try...catch для обработки исключений. Вот пример использования:

      Этот код позволяет перехватить и обработать исключение, выведя сообщение об ошибке на экран. Такой подход более гибкий и позволяет более детально управлять ошибками в вашем коде.

    Оставить комментарий