我正在为登录页面创建有效的凭据功能 如果我在函数外部使用以下代码使用该函数:
if(isset($_POST['email'])){
$email = $_POST['email'];
$password = $_POST['password'];
$q = "SELECT * FROM user WHERE email = :email";
$query = $db->prepare($q);
$query->execute(array(":email" => $email));
$results = $query->fetchAll();
if($results !=FALSE && $query->rowCount() > 0) {
if($results[0]['password'] == $password){
$_SESSION['email'] = $email;
}
但是如果我从外部函数调用该函数,则没有任何事情发生,就好像登录凭据有问题一样。
功能:
function valid_credientials($email,$password){
global $db;
$email = $_POST['email'];
$password = $_POST['password'];
$q = "SELECT * FROM user WHERE email = :email";
$query = $db->prepare($q);
$query->execute(array(":email" => $email));
$results = $query->fetchAll();
if($results !=FALSE && $query->rowCount() > 0) {
if($results[0]['password'] == $password){
$_SESSION['email'] = $email;
}}
}
和isset
帖子:
if (isset($_POST['email'], $_POST['password'])){
if (valid_credientials($_POST['email'], $_POST['password']) == false ){
$errors[] = 'No matching email found.';
}
if (empty($errors)){
$_SESSION['email'] = htmlentities($_POST['email']);
header("Location: profile.php");
die();
}
}
我在考虑连接问题,但如果我使用此功能则返回电子邮件。
function valid_credientials($email,$password){
$test = $db->query("SELECT `email` FROM `user`");
while($row = $test->fetch(PDO::FETCH_ASSOC)){
echo $row['email'], '<br>';
}
}
答案 0 :(得分:1)
看看你的代码,
function valid_credientials($email,$password){
global $db;
$email = $_POST['email'];
$password = $_POST['password'];
$q = "SELECT * FROM user WHERE email = :email";
$query = $db->prepare($q);
$query->execute(array(":email" => $email));
$results = $query->fetchAll();
if($results !=FALSE && $query->rowCount() > 0) {
if($results[0]['password'] == $password){
$_SESSION['email'] = $email;
}
}
您从$ _POST获取值,因为您在函数参数中有电子邮件和密码,所以根本不需要这两行。
$email = $_POST['email'];
$password = $_POST['password'];
还要检查函数的返回值,但函数没有返回任何内容。通过下面的代码,它会根据条件返回true或false。
function valid_credientials($email,$password){
global $db;
$email = $_POST['email'];
$password = $_POST['password'];
$q = "SELECT * FROM user WHERE email = :email";
$query = $db->prepare($q);
$query->execute(array(":email" => $email));
$results = $query->fetchAll();
if($results !=FALSE && $query->rowCount() > 0) {
if($results[0]['password'] == $password){
$_SESSION['email'] = $email;
return true;
}
return false;
}
答案 1 :(得分:0)
您的valid_credentials
函数未返回值。
下面的if语句将返回NULL(对此不正,只是猜测),这不等于false,因此在下一个if语句期间,errors数组仍为空
if (valid_credientials($_POST['email'], $_POST['password']) == false ){
$errors[] = 'No matching email found.';
}
if (empty($errors)){
}