2016-04-06 10 views
0

Kayıt formuyla ilgili bir sorun yaşıyorum.SQL Veritabanından E-posta Doğrulaması Kayıt formundaki PHP'yi kullanarak

Veritabanına yeni bir e-posta girdiğimde Veritabanından varolan bir e-postayı attığımda bile geçersiz olmadığını söylüyor.

<?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'); 

Bu kod, bir formdan gelir ve gönderilişi zaman, bu koda Gönderiler:

kodudur. Bilgiler doğruysa, veritabanına bilgileri belirtilen sütunlara gönderir.

Sorun şu ki, formlara bilgi girip gönderdiğimde, e-postanın veritabanından geçerli olup olmadığını kontrol etmiyor.

Bana yardım ettiğiniz için teşekkür ederiz!

+0

Özgün değişkene filtre uygulanmaz '$ sql' değil – RiggsFolly

+0

Ve her şeyi yanlış sırada yapıyorsunuz. İlk SELECT sorgusunu çalıştırdıktan sonra veritabanına bağlanmadığınız anlaşılıyor. – RiggsFolly

+0

Tekrar başlayın ve bu sefer beyninizle bağlantı kurun veya herhangi bir kodlamaya başlamadan önce kılavuzu okuyun. – RiggsFolly

cevap

0

Bana öyle geliyor ki, if (!filter_var($sql, FILTER_VALIDATE_EMAIL) === false) { doğru değil. if (!filter_var($email, FILTER_VALIDATE_EMAIL) === false) { olmalıdır; veya e-postayı & veritabanından getirin ve ardından e-posta değerini filter_var()'da 1. parametre olarak iletin. Ayrıca giriş bilgileriniz doğru değil. E-postanızı önce doğrulamanız gerekiyor & sonra var olup olmadığını veritabanında kontrol edin.