2016-04-06 13 views
0

登録フォームに問題があります。登録フォームにPHPを使用したSQLデータベースからの電子メールの検証

データベースに新しい電子メールを入力するときデータベースから既存の電子メールを送信しても、無効ではないと表示されます。ここで

コードです:

<?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 protected]', 'Failed to save user registration info!', $ex); 

        header('location:error.php'); 
       } 
       ?> 
      </div> 
     </div> 
    </div> 

<?php include('footer.php'); 

このコードは、フォームから来て、それが提出されていますとき、それは、このコードに投稿します。 情報が真の場合、情報をデータベースに指定された列に送信します。

問題点は、フォームに情報を入力して送信すると、電子メールがデータベースから有効かどうかを確認しないということです。

ありがとうございました! :)

+0

'$ sql'ではなく元の変数をフィルタリングします – RiggsFolly

+0

あなたは間違った順序ですべてをやっています。最初のSELECTクエリを実行するまで、データベースに接続しないように見えます。 – RiggsFolly

+0

もう一度やり直してください。コードを開始する前に脳を麻痺させたり、マニュアルを読んでください。 – RiggsFolly

答えて

0

あなたのif (!filter_var($sql, FILTER_VALIDATE_EMAIL) === false) {は正しくないと思われます。 if (!filter_var($email, FILTER_VALIDATE_EMAIL) === false) {です。またはデータベース&から電子メールを取得し、最初のパラメータとして電子メールの値をfilter_var()に渡します。 また、ログインが正しくありません。 あなたの電子メールを最初に確認する必要があります&それからそれがデータベースに存在するかどうかをチェックしてください。

関連する問題