2016-05-30 140 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添加另一个。在其他部分,你可以添加错误的用户名和密码。
希望这可以解决你的问题。