Я очень новичок в 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 как уникальный ключ в таблице БД.
Затем проверьте свое 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 {
}
}
Спасибо за предложение. Я изменил базу данных для электронной почты, чтобы она была уникальной, что означает, что она не пройдет. Я обнаружил, что он просто перезагружает страницу, но я бы хотел, чтобы она просто отображала ошибку «дубликат электронной почты». Я думаю, что лучшим методом было бы сначала проверить БД, прежде чем она попытается перейти в БД. Имеет ли это смысл?
чтобы выполнить проверку без перезагрузки страницы, вам нужно будет использовать функцию ajax (или fetch)
Спасибо за всю помощь в этом. Я начинаю получать удовольствие от PHP, хотя я очень ранний и простой. Я буду искать функцию выборки, так как я бы предпочел предотвратить перезагрузку, поскольку это не очень хороший UX. Еще раз спасибо
Удачи бро :-)
установить столбец
emailв качестве уникального ключа в таблице БД?