dououde4065 2013-08-09 17:40
浏览 42
已采纳

数据库中的FILTER_VALIDATE_EMAIL和唯一电子邮件检查无效

I'm fairly new to the php scene, but as I have been searching for hours on what may be wrong with this code I am at a loss. For some reason, the FILTER_VALIDATE_EMAIL and unique email check in db are not working, they are being skipped completely. I know this because when the form is submitted it kicks out an error on the last catch(PDOExceptions $ex) (not shown hear but after the last block of code below), instead of any of the other errors set to show before(shown here). No errors occur (or are shown) until insertion of the form data into the db is attempted. Since the email index is unique, it does not allow duplicate insertion. So the query failes to run and die()'s. I am trying to post the message that the email is not valid or that it is already used on the form itself without die().

First I set conditions for submission of empty inputs, and repeat error handling for all other inputs as shown for 'fname'.

    if (isset($_POST['submit'])) {  

        if(empty($_POST['fname']) ||
          empty($_POST['lname']) ||
          empty($_POST['email']) ||
          empty($_POST['password']))
        {
            if(empty($_POST['fname'])) 
        { 
            $fnamerr = "<font color=\"red\">Please enter your first name</font>";
        }

Then I validate !empty:

    } 
    else if (!empty($_POST['fname']) &&
       !empty($_POST['lname']) &&
       !empty($_POST['email']) &&
       !empty($_POST['password']))  
    { 

        if(!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) 
        { 
            $emailerr = "<font color=\"red\">Please enter a valid email address</font>";
        }       

        $query = " 
            SELECT 
                1 
            FROM users 
            WHERE 
                email = :email 
        "; 

        $query_params = array( 
            ':email' => $_POST['email'] 
        ); 

        try 
        { 
            $stmt = $db->prepare($query); 
            $result = $stmt->execute($query_params); 
        }   
        catch(PDOException $ex) 
        { 
            die ("Failed to run query: " . $ex->getMessage());          
        }

        $row = $stmt->fetch(); 

        if($row) 
        { 
            $emailerr = "<font color=\"red\">This email address is already registered</font>";
        }

What is wrong with this code? Or could be a reason that the FILTER_VALIDATE_EMAIL and unique email check in db are being skipped completely? Thanks in advance.

  • 写回答

2条回答 默认 最新

  • dongpo0409 2013-08-10 06:10
    关注

    I finally figured it out, for anyone who may be looking for the same info.

    if (isset($_POST['submit'])) 
        {   
    
            if(empty($_POST['fname']) ||
               empty($_POST['lname']) ||
               empty($_POST['email']) ||
               empty($_POST['password']))
            { 
                if(empty($_POST['fname'])) 
                { 
                    $fnamerr = "<font color=\"red\">Please enter your first name</font>";
                }
    

    Again, I did the same thing for last name, email and password for if they are empty. Then:

            } else if(!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) 
            { 
                $emailerr = "<font color=\"red\">Please enter a valid email address</font>";
                $submitted_firstname = htmlentities($_POST['fname'], ENT_QUOTES, 'UTF-8');
                $submitted_lastname = htmlentities($_POST['lname'], ENT_QUOTES, 'UTF-8');
                $submitted_email = htmlentities($_POST['email'], ENT_QUOTES, 'UTF-8');
            } else if (!empty($_POST['fname']) &&
                   !empty($_POST['lname']) &&
                   !empty($_POST['email']) &&
                   !empty($_POST['password']))
            {                                       
                $query = " 
                    SELECT 
                        1 
                    FROM users 
                    WHERE 
                        email = :email 
                "; 
    
                $query_params = array( 
                    ':email' => $_POST['email'] 
                ); 
    
                try 
                { 
                    $stmt = $db->prepare($query); 
                    $result = $stmt->execute($query_params); 
                }   
                catch(PDOException $ex) 
                { 
                    die ("Failed to run query: " . $ex->getMessage());
                }
    
                $row = $stmt->fetch(); 
    
                if ($row) 
                { 
                    $emailerr2 = "<font color=\"red\">This email address is already registered</font>";
                    $submitted_firstname = htmlentities($_POST['fname'], ENT_QUOTES, 'UTF-8');
                    $submitted_lastname = htmlentities($_POST['lname'], ENT_QUOTES, 'UTF-8');
                    $submitted_email = htmlentities($_POST['email'], ENT_QUOTES, 'UTF-8');
    
                } else
                {
    

    Then I run the code for inserting the info into the db table. This worked beautifully. Hopefully nothing else comes up. Thanks for the comments and help.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 在不同的执行界面调用同一个页面
  • ¥20 基于51单片机的数字频率计
  • ¥50 M3T长焦相机如何标定以及正射影像拼接问题
  • ¥15 keepalived的虚拟VIP地址 ping -s 发包测试,只能通过1472字节以下的数据包(相关搜索:静态路由)
  • ¥20 关于#stm32#的问题:STM32串口发送问题,偶校验(even),发送5A 41 FB 20.烧录程序后发现串口助手读到的是5A 41 7B A0
  • ¥15 C++map释放不掉
  • ¥15 Mabatis查询数据
  • ¥15 想知道lingo目标函数中求和公式上标是变量情况如何求解
  • ¥15 关于E22-400T22S的LORA模块的通信问题
  • ¥15 求用二阶有源低通滤波将3khz方波转为正弦波的电路