2016-05-30 119 views
0
<?php 
$cname=$_POST['cname']; 
$cpass=$_POST['cpass']; 

$stmt = $con->prepare("SELECT * FROM employer WHERE email = ? AND password = ? AND action = 'confirmed' "); 
$stmt->bind_param('ss', $_POST['cname'], $_POST['cpass']); 
$stmt->execute(); 
$result = $stmt->get_result(); 
    if ($result->num_rows > "0") 
    { 
     $member = $result->fetch_assoc(); 
     $_SESSION['SESS_MEMBER_ID'] = $member['id']; 
     $_SESSION['SESS_EMAIL'] = $member['email']; 
     session_write_close(); 
     header("location:emp_home.php"); 
    } 
    else 
    { 
     $errmsg_arr[] = 'Wrong Username or Password'; 
     $errflag = true; 
     if($errflag) 
     { 
      $_SESSION['ERRMSG_ARR'] = $errmsg_arr; 
      session_write_close(); 
      header("location:employer.php"); 
     } 
    } 
    $stmt->close(); 

這是我的登錄代碼,但由於我在SQL語句中添加了「操作」,操作僅由管理員確認。所以我想問如何回覆這樣的信息您還沒有得到管理員的確認,請嘗試在某段時間後登錄當有人已經註冊但尚未確認。在管理員確認後登錄

聲明是這樣:

$stmt = $con->prepare("SELECT * FROM employer WHERE email = ? AND password = ? AND action = '' "); 
+0

你可以這樣做,因爲你正在處理錯誤信息。將成功消息保存在'$ _SESSION'變量中,並在處理錯誤消息時在HTML中處理。 –

+0

對不起,我不太瞭解你。您希望在用戶註冊表示需要等待確認時輸出消息? – developius

+0

@developius當他/她註冊她/他的狀態將被等待,一旦它將由管理員確認,然後他/她將能夠登錄。這就是她想要的,我猜 –

回答

2

不要手動action添加到查詢,但檢查它在PHP:

if ($result->num_rows > "0") { 
    $member = $result->fetch_assoc(); 
    if ($member['action'] != 'confirmed') { 
     $errmsg_arr[] = 'You have not been confirmed by the admin yet, Try login after some time'; 
     $errflag = true; 
     if ($errflag) { 
      $_SESSION['ERRMSG_ARR'] = $errmsg_arr; 
      session_write_close(); 
      header("location:employer.php"); 
     } 
    } else { 
     $_SESSION['SESS_MEMBER_ID'] = $member['id']; 
     $_SESSION['SESS_EMAIL'] = $member['email']; 
     session_write_close(); 
     header("location:emp_home.php"); 
    } 
} else { 
    $errmsg_arr[] = 'Wrong Username or Password'; 
    $errflag = true; 
    if ($errflag) { 
     $_SESSION['ERRMSG_ARR'] = $errmsg_arr; 
     session_write_close(); 
     header("location:employer.php"); 
    } 
} 

,並儘量避免多次複製粘貼+線,我建議你這樣做:

$errflag = false; 
if ($result->num_rows > "0") { 
    $member = $result->fetch_assoc(); 
    if ($member['action'] != 'confirmed') { 
     $errmsg_arr[] = 'You have not been confirmed by the admin yet, Try login after some time'; 
     $errflag = true; 
    } 
} else { 
    $errmsg_arr[] = 'Wrong Username or Password'; 
    $errflag = true; 
} 

if ($errflag === true) { 
    $_SESSION['ERRMSG_ARR'] = $errmsg_arr; 
    $location = 'employer.php'; 
} else { 
    $_SESSION['SESS_MEMBER_ID'] = $member['id']; 
    $_SESSION['SESS_EMAIL'] = $member['email']; 
    $location = 'emp_home.php'; 
} 

session_write_close(); 
header("location:" . $location); 
die; // <-- NOTICE THIS 
+0

大鼠,你擊敗我:) – developius

+0

它以我提到的第一種方式工作..謝謝:) :) – Pooojaaaa

+2

請注意頭後的'死':http://stackoverflow.com/questions/8665985/php-utilizing-exit -or-模後headerlocation – Peon

0


在此if ($result->num_rows > "0")部分添加一個條件。因爲$result->num_rows > "0"並不意味着$errmsg_arr[] = 'Wrong Username or Password';。還有一件事你需要檢查。
我會建議你關閉這個if,然後用這個$stmt = $con->prepare("SELECT * FROM employer WHERE email = ? AND password = ? AND action = '' "); SQL添加另一個。在其他部分,你可以添加錯誤的用戶名和密碼。
希望這可以解決你的問題。