繁体   English   中英

登录不起作用

[英]Login does not work

我一直在试图解决这个问题。 这很容易,但是我找不到错误。 看起来错误在于foreach,因为上方的所有内容都有效。 当我填写输入并单击“登录”按钮时,脚本将无法工作。

if (isset($_POST['submit']) AND (!empty($_POST['username']) AND (!empty($_POST['password'])))) {
    $username = $_POST['username'];
    $password = $_POST['password'];
    $pass = hash('sha256',$password);

    $select = $db->prepare("SELECT * FROM users WHERE username= :username AND password= :password");
    $select->bindParam(':username', $username);
    $select->bindParam(':password', $pass);
    $select->execute();

    foreach ($select as $data) {
        if ($data['username'] == $username AND $data['password'] == $pass) {
            $_SESSION['username'] = $username;
            $_SESSION['id'] = $data['id'];
            ?>
            <div class="echos">
                    <?php
                    echo "Login completed" . "<br>";
                    echo "<a href='http://jezecek.nostools.cz/'>Homepage</a>";
        }
        else {
            echo "Wrong username or password!" . "<br>";
            echo "<a href='http://jezecek.nostools.cz/include/registration.php'>Try again</a>";
        }       
    }   
}
else {
    echo "Fill all fields!" . "<br>";
    echo "<a href='http://jezecek.nostools.cz/include/login.php'>Try again</a>";
}
?>
</div>

即使我像这样使用fetchAll(),它仍然无法正常工作

$select = $db->prepare("SELECT * FROM users WHERE username= :username AND password= :password");
    $select->bindParam(':username', $username);
    $select->bindParam(':password', $pass);
    $select->execute();
    $result = $select->fetchAll();

    foreach ($result as $data) {
        if ($data['username'] == $username AND $data['password'] == $pass) {
            $_SESSION['username'] = $username;
            $_SESSION['id'] = $data['id'];
            ?>
            <div class="echos">
                    <?php
                    echo "Login completed" . "<br>";
                    echo "<a href='http://jezecek.nostools.cz/'>Homepage</a>";
        }

提取结果集中的所有行:-

$result = $select->fetchAll();

该错误发生在foreach中,因为您没有从查询中获取任何数据。 您可能想获取数据并遍历

$select->execute();
$data = $select->fetchAll();

foreach($data as $val) {
    //.....

请先获取数据再循环

$select->execute();
$data=$select->fetchAll();

您也不需要循环,只需尝试以下操作:

$data  = $select -> fetch();
if($data)
{
    // do login
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM