Форма подписки PHP с проверкой дубликатов электронной почты

Я очень новичок в PHP и изо всех сил пытаюсь добавить двойную проверку электронной почты с помощью этого кода.

Это работает так, как мне нужно, с точки зрения отправки информации в базу данных mysql, но я хочу, чтобы она не допускала дублирования электронных писем. Я хотел добавить количество результатов, которые соответствуют введенному адресу электронной почты, а затем, если> 1, пометить как дубликат. Я не уверен, куда это должно идти в потоке или как это сделать, если честно. Любая помощь приветствуется.

<?php

//if form has been submitted process it
if (isset($_POST['submit'])){

    //collect form data
    extract($_POST);

    if (!isset($error)){

        try {
            //insert into database
            $stmt = $db->prepare('INSERT INTO email_subs (email) VALUES (:email)') ;
            $stmt->execute(array(
                ':email' => $email
            ));

            //redirect to index page
            header('Location: ./thanks.php?action=added');
            exit;

        } catch(PDOException $e) {
            echo $e->getMessage();
        }

    }

}

//check for any errors
if (isset($error)){
    foreach($error as $error){
        echo '<p class = "error">'.$error.'</p>';
    }
}
?>
<form action='' method='post'>

<input type='email' name='email' required = "required" data-error = "Valid email is required." value='<?php if (isset($error)){ echo $_POST['email'];}?>'></p>
    <div class = "invalid-feedback">
              Please enter your email.
     </div>
    <button type='submit' name='submit' value='Submit' class = "btn-red">Sign-Up</button>
</form>

установить столбец email в качестве уникального ключа в таблице БД?

Professor Abronsius 10.02.2019 11:35
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
2
1
61
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Сначала установите столбец email как уникальный ключ в таблице БД.

Затем проверьте свое PDOException

try {
   $prep->execute($values);
   // do other things if successfully inserted
} catch (PDOException $e) {
   if ($e->errorInfo[1] == 1062) {
      $email_error = "Email already exists in our mailing list"
      // then show this in html
   } else {

   }
}

Спасибо за предложение. Я изменил базу данных для электронной почты, чтобы она была уникальной, что означает, что она не пройдет. Я обнаружил, что он просто перезагружает страницу, но я бы хотел, чтобы она просто отображала ошибку «дубликат электронной почты». Я думаю, что лучшим методом было бы сначала проверить БД, прежде чем она попытается перейти в БД. Имеет ли это смысл?

Liam Hooper 10.02.2019 12:03

чтобы выполнить проверку без перезагрузки страницы, вам нужно будет использовать функцию ajax (или fetch)

Professor Abronsius 10.02.2019 12:07

Спасибо за всю помощь в этом. Я начинаю получать удовольствие от PHP, хотя я очень ранний и простой. Я буду искать функцию выборки, так как я бы предпочел предотвратить перезагрузку, поскольку это не очень хороший UX. Еще раз спасибо

Liam Hooper 10.02.2019 12:10

Удачи бро :-)

Manzurul Hoque Rumi 10.02.2019 12:13

Другие вопросы по теме