我在填写注册表时遇到了一些问题。
当我在数据库中输入新电子邮件时,即使我从数据库中输入现有电子邮件,它也不会无效。
这是代码:
<?php
include('../admin/admin_header.php');
?>
<div class="container" id="promptContainer">
<div class="jumbotron">
<div class="span6 center">
<?php
try {
$title = 'Save';
$email = null;
$password = null;
$username = null;
$confirm = null;
//Store Info from "Email" and "Password" form to vars
$email = $_POST['email'];
$password = $_POST['password'];
$username = $_POST['username'];
$confirm = $_POST['confirm'];
$ok = true;
//Validation
//If Email or Password blank, $ok = false, throw echo to user
if (empty($email)) {
echo 'Email is required<br />';
$ok = false;
}
if (empty($password)) {
echo 'Password is required<br />';
$ok = false;
if (empty($username)) {
echo 'Username is required<br />';
$ok = false;
if ($password != $confirm) {
echo 'Password must match<br />';
$ok = false;
}
}
}
$sql = "SELECT email FROM AccountInfo WHERE email = :email";
$cmd = $conn->prepare($sql);
$cmd->bindParam(':email', $email);
if (!filter_var($sql, FILTER_VALIDATE_EMAIL) === false) {
echo("$email is a valid email address");
echo '<meta http-equiv="refresh" content="2;url=http://otherurl.com">';
$ok = true;
} else {
echo("$email is not a valid email address");
echo '<meta http-equiv="refresh" content="2;url=http://url.com">';
$ok = false;
}
//Save
$cmd->execute;
//If true, Save info to vars
if ($ok == true) {
include('dbCredentials.php');
if (empty($user_id))
//Insert info to SQL DB VALUES
$sql = "INSERT INTO AccountInfo (email, password, username) VALUES (:email, :password, :username)";
//SHA512 Hash Encryption
$encryptpw = hash('sha512', $password);
$cmd = $conn->prepare($sql);
$cmd->bindParam(':email', $email, PDO::PARAM_STR, 50);
$cmd->bindParam(':password', $encryptpw, PDO::PARAM_STR, 128);
$cmd->bindParam(':username', $username, PDO::PARAM_STR, 10);
//Save DB
$cmd->execute();
echo 'Registration successful.';
}
} catch (Exception $ex) {
//Email when expection error
mail('email@gmail.com', 'Failed to save user registration info!', $ex);
header('location:error.php');
}
?>
</div>
</div>
</div>
<?php include('footer.php');
此代码来自表单,提交后,它会发布到此代码。 如果信息属实,它会将信息发送到我的数据库的指定列。
问题是,当我在表单中输入信息并发送它时,它不会检查数据库中的电子邮件是否有效。
谢谢你帮助我! :)
最佳答案
在我看来,您的 if (!filter_var($sql, FILTER_VALIDATE_EMAIL) === false) {
不正确。
应该是 if (!filter_var($email, FILTER_VALIDATE_EMAIL) === false) {
;或从数据库获取电子邮件,然后将电子邮件值作为 filter_var()
中的第一个参数传递。
另外您的登录信息也不正确。
您需要先验证您的电子邮件,然后检查数据库中是否存在。
关于php - 使用 PHP 在注册表单上从 SQL 数据库进行电子邮件验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36439712/