@Night386

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

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

<form class="subscribe" id="subscribe" method="POST" action="subscribe.php"> 
                            <p>Подписка на информационную рассылку</p>
							<div class="inputs">
                            <div class="d-flex">
                                <input class="form-control" type="email" name="email" id="email" required placeholder="Email">
                                <button class="btn" type="submit" name="submit_form" value="submit">
                                    <img src="/newdev/images/arrow-submit.svg" alt="">
                                </button>
                            </div>
							</div>
										 <div class="success" style="display: none;">Вы успешно подписаны</div>
                        </form>


if(isset($_POST['email'])) 
{
		 $email = $_POST["email"];
		 $query_result = db::i()->query("INSERT INTO s_mailer_list (added,email,cats) VALUES (NOW(),'$email',',С сайта,')");
		

}

вот сообщение выводится для успешной подписки так
$('#subscribe').on("submit", function (e) {
                e.preventDefault();

                var $target = $(e.currentTarget);
                var $inputs = $($target.find('.inputs'));
                var $success = $($target.find('.success'));

                $.post(e.currentTarget.action, $target.serialize(), function (data, status) {
                    if (status === 'success') {
                        $inputs.hide();
                        $success.show();
                    }
                })
            });


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

колонка email unique

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

array(3) {
  ["message"]=>
  string(94) "SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry 'p@p.ru' for key 'email'"
  ["function"]=>
  string(5) "query"
  ["sql"]=>
  string(86) "INSERT INTO s_mailer_list (added,email,cats) VALUES (NOW(),'p@p.ru',',С сайта,')"
}
  • Вопрос задан
  • 320 просмотров
Пригласить эксперта
Ответы на вопрос 1
malfixfx
@malfixfx
Программист. :)
ChatGPT на что?

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

Пример с использованием INSERT IGNORE:
if (isset($_POST['email'])) {
    $email = $_POST["email"];
    $query_result = db::i()->query("INSERT IGNORE INTO s_mailer_list (added, email, cats) VALUES (NOW(), '$email', ',С сайта,')");
    if ($query_result) {
        // Пользователь успешно добавлен
        echo "success";
    } else {
        // Пользователь с таким емейлом уже существует
        echo "duplicate";
    }
}


или просто try...catch:
if (isset($_POST['email'])) {
    $email = $_POST["email"];

    try {
        $query_result = db::i()->query("INSERT INTO s_mailer_list (added, email, cats) VALUES (NOW(), '$email', ',С сайта,')");
        // The query was successful, so the user is subscribed.
        echo "success";
    } catch (Exception $e) {
        // Check if the exception is related to a duplicate entry for the 'email' column.
        if ($e->getCode() === 23000) {
            // This code represents a MySQL duplicate key error (Integrity constraint violation).
            // Handle the case when the email is already in the database.
            echo "duplicate";
        } else {
            // Handle other exceptions if needed.
            echo "error";
        }
    }
}


Дальше JS сам, думаю, допишешь.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы