php - 使用 PHP 在注册表单上从 SQL 数据库进行电子邮件验证

标签 php mysql forms email

我在填写注册表时遇到了一些问题。

当我在数据库中输入新电子邮件时,即使我从数据库中输入现有电子邮件,它也不会无效。

这是代码:

<?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/

相关文章:

mysql - 使用嵌套表和分组按最低等级获取记录 - MYSQL

mySQL 查询 : for a given typeId, 获取所有条目及其answerCount

html - 无法将提交按钮放在底部。它在旁边,通过评论框而不是下面的评论框

javascript - 提交按钮在表单和 PHP 中不起作用

php - 同时修改mysql数据库中的多行

javascript - 如何从表单字段获取值

php - 用于 PHP 图书搜索的数据库,如何根据图书存储多个不同数量的作者

php - 我应该将哪个 session 库与 CodeIgniter 一起使用?

PHP 错误的日期/时间

php - 在 mysqli 中多次使用相同的 Binder