通过函数运行“isset”时,会话不会启动

时间:2013-04-13 05:24:47

标签: php mysql pdo

我正在为登录页面创建有效的凭据功能 如果我在函数外部使用以下代码使用该函数:

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>';
    } 
}

2 个答案:

答案 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)){

}