2011-09-02 70 views
1

當用戶註冊時,在verified列中有一個隨機值md5(mcrypt_create_iv(32, MCRYPT_DEV_URANDOM)),直到他驗證了他的帳戶。發生這種情況時(通過電子郵件),verified變空。我忘記的密碼是否正常工作,或者我錯過了什麼?

當用戶想再次收到他的電子郵件驗證,他的類型中的電子郵件的文本框,並有4種可能情況:

  1. 非有效的郵件 - >請糾正,你的-email.php
  2. 有效的電子郵件 - >此電子郵件 - 是 - 不found.php
  3. 有效電子郵件+在DB +發現驗證 - >是,已經verified.php
  4. 有效電子郵件+ DB中發現+尚未驗證 - > still-not-verified.php

我的問題是,如果我的邏輯和結構是正確的,如果我忘記了什麼。它雖然工作正常。

if ($_POST["email"]) { 

require_once('config.php'); 

    $errflag = false; 

$send2email = mysql_real_escape_string($_POST["email"]); 

    if (!filter_var($send2email, FILTER_VALIDATE_EMAIL)) { 
    $errflag = true; 
    }  

    if($errflag) { 
     header("location: please-correct-your-email.php"); 
     exit(); 
    } 

    $qry = "SELECT verified FROM members WHERE email='$send2email'"; 
    $result = mysql_query($qry); 
    $member = mysql_fetch_assoc($result); 

    if($result) { 
     if (mysql_num_rows($result) == 0) { 
      header("location: this-email-is-not-found.php"); 
      exit(); 
     } 
     elseif ((mysql_num_rows($result) > 0) && ($member['verified'])) { 
      header("location: still-not-verified.php"); 
      exit(); 
     } 
    else { 
      header("location: is-already-verified.php"); 
      exit(); 
    } 
      } 

        } //this is for if post email 
+0

外貌好,有點刺激,但沒有看到任何明顯的錯誤。 – Layke

+0

將'$ member = mysql_fetch_assoc($ result);'放在'if($ result){}內' –

+0

我只是不明白爲什麼人們投票關閉它。 – EnexoOnoma

回答

0

我會改變驗證的布爾字段。這意味着

verified BOOLEAN 
------------------ 
1 
0 

而不是「當他沒有驗證,字段填充,當他驗證,字段是空白的」。這有點混亂。

我希望移居

$member = mysql_fetch_assoc($result); 

if ($result){ 

我想補充確認代碼,因爲它是沒有意義做的電子郵件確認沒有安全碼(驗證碼)

+0

謝謝。 'verified'保存'md5(mcrypt_create_iv(32,MCRYPT_DEV_URANDOM))'並在用戶驗證時變空。它可能不是最好的解決方案,但它的工作到現在... – EnexoOnoma

+0

但驗證僅基於電子郵件 – genesis

+0

@尼古拉,如果您正在使用「已驗證」字段實際檢查您發送給用戶的驗證碼,然後你應該把它稱爲'validationcode',而不是'verified'。無論如何國際海事組織的查詢'選擇計數(*)從成員WHERE電子郵件='$ send2email'AND驗證碼IS NOT NULL',使你的打算更清晰_minor差異我知道._ – Johan

相關問題