我有一個非常簡單的表單,用於獲取電子郵件地址以發送簡報。我想弄清楚如何添加一些服務器端驗證來檢查輸入的電子郵件地址是否已經在我的database
中。然後,如果它已經輸入,它不允許表單提交,並且會拋出用戶可以看到的錯誤。如何爲唯一電子郵件添加服務器端驗證
我該如何去檢查這個和顯示錯誤?
<form action="" method="POST" id="newsletter-form">
<input type="email" id="footer-grid1-newsletter-input" placeholder="Your Email Address" pattern=".{3,}" required>
<input type="submit" id="footer-grid1-newsletter-submit" name="submit" value=' '>
</form>
$("#newsletter-form").on("submit", function (event) {
event.preventDefault();
var newsletter_email = $("#footer-grid1-newsletter-input").val();
var targeted_popup_class = jQuery(this).attr('data-popup-open');
$.ajax({
url: "newsletterSend.php",
type: "POST",
data: {
"newsletter_email": newsletter_email
},
success: function (data) {
// console.log(data); // data object will return the response when status code is 200
if (data == "Error!") {
alert("Unable to insert email!");
alert(data);
} else {
$("#newsletter-form")[0].reset();
$('.newsletter-popup').fadeIn(350).delay(2000).fadeOut();
}
},
error: function (xhr, textStatus, errorThrown) {
alert(textStatus + " | " + errorThrown);
//console.log("error"); //otherwise error if status code is other than 200.
}
});
});
$newsletter_email = $_POST['newsletter_email'];
try {
$con = mysqli_connect("localhost", "", "", "");
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
$stmt = $con->prepare("INSERT INTO newsletter (email, subscribed) VALUES (?, NOW())");
if (false===$stmt) {
die('Newsletter email prepare() failed: ' . htmlspecialchars($con->error));
}
$stmt->bind_param('s', $newsletter_email);
if (false===$stmt) {
die('Newsletter email bind_param() failed: ' . htmlspecialchars($stmt->error));
}
$stmt->execute();
if (false===$stmt) {
die('Newsletter email execute() failed: ' . htmlspecialchars($stmt->error));
}
只需添加返回FALSE;在你的AJAX錯誤查詢,它不會提交 –
@AslanKaya如何檢查電子郵件是否已被輸入,但? – Becky
如果在嘗試插入之前電子郵件已經可用,則需要執行SQL檢查。下面的例子應該有所幫助 –