2013-04-02 34 views
0

大家好我想問問我的html表單,要求輸入用戶名/電子郵件,你可以把。 然後它通過用戶名或電子郵件進行搜索,如果在數據庫中存在帳戶,如果是進程。 該腳本的作品,但只有電子郵件。如何知道是否是電子郵件或用戶名輸入

我的問題是如何識別輸入字段是用戶寫了一個用戶名還是電子郵件?現在它檢查兩者,但由於某種原因,它不能檢測用戶名只有電子郵件類型。

function getUserEmailExist($input) 
    { 
    global $database; 

     if(preg_match('/^[a-z0-9]+([_\\.-][a-z0-9]+)*@([a-z0-9]+([\.-][a-z0-9]+)*)+\\.[a-z]{2,}$/i', $input)) { 
      $type = 2; 
      $get = $database->checkExistRecovery($input, $type); 
     } 

     if(preg_match('/[^0-9A-Za-z]/', $input)) { 
      $type = 1; 
      $get = $database->checkExistRecovery($input, $type); 
     } 

     if($get) { 
      $this->updateRecover($input, $type); 
     } else {  
      return false; 
     } 
    } 
+0

所以問題是,你的第二個正則表達式不起作用?你想要檢測什麼? – kero

+0

對於您的用戶名檢查,您正在檢查一個否定的「^」字符集。即它不能是'[0-9A-Z-az]'。 – Jon

回答

0

如果以下聲明您需要移動您的電子郵件。

因爲如果輸入是電子郵件,它將會匹配第二個preg匹配。 所以你覆蓋你的$ type變量。

固定。

function getUserEmailExist($input) 
    { 
     global $database; 

     if(preg_match('/[A-Za-z0-9]+/', $input)) { 
      $type = 1; 
      $get = $database->checkExistRecovery($input, $type); 
     } 

if(preg_match('/^[a-z0-9]+([_\\.-][a-z0-9]+)*@([a-z0-9]+([\.-][a-z0-9]+)*)+\\.[a-z]{2,}$/i', $input)) { 
      $type = 2; 
      $get = $database->checkExistRecovery($input, $type); 
     } 

     if($get) { 
      $this->updateRecover($input, $type); 
     } else {  
      return false; 
     } 
    } 
+0

嗯,讓我試試。但我已經試過這種方式,也許這次它會起作用。不,它不工作,還是一樣,也許我做了一些處理它?但我真的不認爲,因爲它的作品可能只適用於類型 – karolis

+0

再次更新它。 – Adrian

+0

是的它的工作原理,不明白爲什麼,因爲你告訴我,我只是一分鐘前做的,是的,我替換了第一個用戶名然後電子郵件,但仍然沒有工作,也許有一些錯誤,當我的代碼複製你的工作,謝謝。 – karolis

0

我想你想你的第二個正則表達式是/[A-Za-z0-9]+/。您目前正在查找任何不包含這些字符的內容。

0

爲什麼你關心所有的驗證邏輯?我看不到你的實際的數據庫查詢,但似乎你可以很容易地做這樣的事情:

SELECT * FROM users 
WHERE email = ? OR username = ? 

在哪裏?將是電子郵件或用戶名值。

+0

可能是密碼恢復,所以他知道哪些記錄要改變等等。雖然我認爲它應該仍然用'username =?完成OR email =?',然後準備兩次該值到該語句的值。 – Jon

+0

是的,我知道我有兩個原因,我不這樣做: 首先 - 編碼的東西需要更多的安全性。 謝勝利 - 如果讓他們單獨由$類型的存在與否,我已經檢查數據庫 例如:如果類型== 1 搜索用戶名 如果類型== 2 搜索電子郵件 – karolis

+0

@喬恩當然,一份準備好的聲明是這裏最好。不過,我認爲查看每個電子郵件/密碼和用戶名/密碼組合是非常重要的。你不能只在'WHERE(email =?OR username =?)AND password =?'。 –

相關問題