I-AM-OBODO Posted February 21, 2015 Share Posted February 21, 2015 Hi all.I'm trying to get user login into two different areas on one login form based on a criteria. The problem I'm having is that if the correct passwords are provided, everything works fine but when a wrong password is provided, nothing happens, it doesn't even echo the password error alert! What could be wrong and is my code okay?Thanks if(isset($_POST['login'])){ $username=$_POST['username']; $password=$_POST['password']; $username = stripslashes($username); $password = stripslashes($password); $username = $username; $password = $password; //$pass = md5($password); $stmt = $pdo->prepare("SELECT password FROM table WHERE username=:username"); $stmt->bindValue(':username', $username, PDO::PARAM_STR); $stmt->execute(); if($stmt->rowCount()<1){ echo '<div class="signals"><p class="bg-warning text-center warning"><button type="button" class="close" aria-label="Close"><span aria-hidden="true">×</span></button>INVALID USERNAME OR PASSWORD</div></p>'; }else{ $password = $_POST['password']; list($hash) = $stmt->fetch(PDO::FETCH_NUM); if (password_verify($password, $hash)) { $_SESSION['username'] = $username; $status1 = "COMPLETED"; $status2 = "UNCOMPLETED"; $stmt = $pdo->query("SELECT status FROM table WHERE username ='$_SESSION[username]'"); $check = $stmt->fetch(PDO::FETCH_ASSOC); $status = $check['status']; if(strcmp($status, $status1) == 0){ header("location: completed/index.php"); exit(); }elseif(strcmp($status, $status2) == 0){ header("location: uncompleted/index.php"); exit(); }else{ echo '<div class="signals"><p class="bg-warning text-center warning"><button type="button" class="close" aria-label="Close"><span aria-hidden="true">×</span></button>INVALID USERNAME OR PASSWORD again</div></p>'; } } } } Quote Link to comment https://forums.phpfreaks.com/topic/294763-login-into-two-different-areas-on-one-login-form/ Share on other sites More sharing options...
Solution Ch0cu3r Posted February 21, 2015 Solution Share Posted February 21, 2015 (edited) It doesn't even echo the password error alert! This is because this else is in the wrong place. else{ echo '<div class="signals"><p class="bg-warning text-center warning"><button type="button" class="close" aria-label="Close"><span aria-hidden="true">×</span></button>INVALID USERNAME OR PASSWORD again</div></p>'; } You have have after the if/elseif strcmp statements. It should be after the if (password_verify($password, $hash)) block. if(isset($_POST['login'])) { $username = stripslashes($_POST['username']); $password = stripslashes($_POST['password']); $stmt = $pdo->prepare("SELECT password FROM table WHERE username=:username"); $stmt->bindValue(':username', $username, PDO::PARAM_STR); $stmt->execute(); if($stmt->rowCount()<1) { echo '<div class="signals"><p class="bg-warning text-center warning"><button type="button" class="close" aria-label="Close"><span aria-hidden="true">×</span></button>INVALID USERNAME OR PASSWORD</div></p>'; } else { $password = $_POST['password']; list($hash) = $stmt->fetch(PDO::FETCH_NUM); if (password_verify($password, $hash)) { $_SESSION['username'] = $username; $status1 = "COMPLETED"; $status2 = "UNCOMPLETED"; $stmt = $pdo->query("SELECT status FROM table WHERE username ='$_SESSION[username]'"); $check = $stmt->fetch(PDO::FETCH_ASSOC); $status = $check['status']; if(strcmp($status, $status1) == 0) { header("location: completed/index.php"); exit(); } elseif(strcmp($status, $status2) == 0) { header("location: uncompleted/index.php"); exit(); } } else { echo '<div class="signals"><p class="bg-warning text-center warning"><button type="button" class="close" aria-label="Close"><span aria-hidden="true">×</span></button>INVALID USERNAME OR PASSWORD again</div></p>'; } } } Edited February 21, 2015 by Ch0cu3r Quote Link to comment https://forums.phpfreaks.com/topic/294763-login-into-two-different-areas-on-one-login-form/#findComment-1506317 Share on other sites More sharing options...
I-AM-OBODO Posted February 21, 2015 Author Share Posted February 21, 2015 This is because this else is in the wrong place. else{ echo '<div class="signals"><p class="bg-warning text-center warning"><button type="button" class="close" aria-label="Close"><span aria-hidden="true">×</span></button>INVALID USERNAME OR PASSWORD again</div></p>';}You have have after the if/elseif strcmp statements. It should be after the if (password_verify($password, $hash)) block.if(isset($_POST['login'])){ $username = stripslashes($_POST['username']); $password = stripslashes($_POST['password']); $stmt = $pdo->prepare("SELECT password FROM table WHERE username=:username"); $stmt->bindValue(':username', $username, PDO::PARAM_STR); $stmt->execute(); if($stmt->rowCount()<1) { echo '<div class="signals"><p class="bg-warning text-center warning"><button type="button" class="close" aria-label="Close"><span aria-hidden="true">×</span></button>INVALID USERNAME OR PASSWORD</div></p>'; } else { $password = $_POST['password']; list($hash) = $stmt->fetch(PDO::FETCH_NUM); if (password_verify($password, $hash)) { $_SESSION['username'] = $username; $status1 = "COMPLETED"; $status2 = "UNCOMPLETED"; $stmt = $pdo->query("SELECT status FROM table WHERE username ='$_SESSION[username]'"); $check = $stmt->fetch(PDO::FETCH_ASSOC); $status = $check['status']; if(strcmp($status, $status1) == 0) { header("location: completed/index.php"); exit(); } elseif(strcmp($status, $status2) == 0) { header("location: uncompleted/index.php"); exit(); } } else { echo '<div class="signals"><p class="bg-warning text-center warning"><button type="button" class="close" aria-label="Close"><span aria-hidden="true">×</span></button>INVALID USERNAME OR PASSWORD again</div></p>'; } }} Thanks Quote Link to comment https://forums.phpfreaks.com/topic/294763-login-into-two-different-areas-on-one-login-form/#findComment-1506356 Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.