2017-08-29 43 views
0

我試圖執行驗證公司電子郵件的代碼。當用戶進入公司工作時,他們都應該彼此兼容。例如,如果在QUT工作的用戶在作爲QUT進入公司時向系統註冊,那麼電子郵件域必須是@ qut.edu.au。下面的代碼顯示了我已經實現的方法。但由於某種原因,代碼中存在一個邏輯錯誤,它給出了「您必須輸入有效的電子郵件」(假設公司名稱未包含在域中時觸發),但每次運行時都會彈出。任何幫助將不勝感激。謝謝!檢查是否與公司名稱兼容的電子郵件域名

<?php 
require_once $_SERVER['DOCUMENT_ROOT'].'/abp/core/init.php'; 
include 'includes/head.php'; 
include 'includes/navigation.php'; 
$email = ((isset($_POST['email']))?sanitize($_POST['email']):''); 
$email = trim($email); 
$password = ((isset($_POST['password']))?sanitize($_POST['password']):''); 
$password = trim($password); 
$company_name = ((isset($_POST['company_name']))?sanitize($_POST['company_name']):''); 
$company_name = trim($company_name); 
$errors = array(); 
**$domain = array_pop(explode('@', $email));** 


if($_POST){ 
     // form validation 
     if(empty($_POST['email']) || empty($_POST['password'])){ 
      $errors[] = 'You must provide email and password.'; 
     }else { 
      //validlate email 

      **if (strpos($domain, $company_name) !== true) {** 
      $errors[] = 'You must enter a valid email.'; 


      }else{ 
      // check if email exist in the databse 
      $query = "SELECT * FROM users WHERE email=?"; 
      $stmt = $db->prepare($query); 
      $stmt->bind_param("s", $email); 
      $stmt->execute(); 
      $stmt->store_result(); 
+0

也許你需要'stripos函數',http://php.net/manual/en/function.stripos.php除非你正在尋找其他方法,否則JavaScript和正則表達式標籤在這裏似乎毫不相關?但是,如果公司域名不符合該名稱呢? – chris85

+0

當你使用strpos不是它!==你應該使用false嗎? 「真」在這裏按預期工作嗎? – Andreas

+3

我也很好奇你爲什麼要強制這封電子郵件和公司的事情。我在一家名爲X的公司工作,但由於公司歷史,我的電子郵件名稱更常見。我實際上並不認爲任何人在我的工作或公司內部的任何地方(包括非常大的公司)都有X的電子郵件 – Andreas

回答

1

你的代碼讀取

if(strpos(something, something) !== true) { 
    error message 
} 

strpos可以永遠返回true只是一個int或FALSE,因此你總是得到一個錯誤消息。它也在docs

正確的版本是:

if(strpos($haystack, $needle) === false) { 
    //errormessage 
} 

(另外一個電子郵件地址匹配到一個公司名稱的概念並不像在評論中大量提到一個好主意)

+0

你可以使用true,但正如你所說的strpos返回一個位置並且因此對於這個問題有一個內置的錯誤。 https://3v4l.org/h6IY9在這裏它返回「是」,如同真的。但是,如果搜索「hello」,那麼位置將爲0,即使條件爲真,if()中的0也將爲false。你可以做些什麼來解決這個問題,就是在字符串strpos(「」。$ str,....)中添加一個空格作爲第一個字符;'這確保0不能被返回,即使它是真的 – Andreas

+0

但是你是正確的,因爲即使考慮這種代碼也是一個壞主意。這隻會造成問題。如果我作爲客戶無法創建帳戶,因爲我的電子郵件與我的公司不匹配,我會點擊「返回」按鈕並返回到我的Google搜索。 – Andreas

+1

@Andreas我沒有提供解決方案,我只是說,strpos永遠不會返回true,並且由於'==='(或'!==')包含類型比較,所以始終輸出錯誤消息。實際的答案是「'=== false」「,因爲它確實在這裏有必要,因爲'0!== false'。 – Jakumi

相關問題