0

我正在创建一个登录脚本,即使我输入了正确的凭据,它每次都会失败。我首先认为这与已深入解释的 crypt 函数有关,并对其进行了进一步的研究以找到一个好的方法。

无论如何,我已经删除了登录和注册中的 crypt 函数来测试登录脚本。删除此内容后,我仍然收到错误消息Invalid username or password

我想看看我的POST变量中实际传递了什么,所以我回应了这些变量的定义,例如

$username = isset($_POST['username']);

echo $username;

输出:1

然而

echo $_POST['username'];

输出admin(这是我一直使用的用户名)

如果我从这个 POST 变量中删除 isset,那么我会返回 true 值,但这仍然会使我的登录脚本失败。

我不明白出了什么问题,因为我在不同的函数中使用了相同的语句来测试它并且它有效,而不是使用 POST 变量我已经设置了用户名和密码,然后包装在一个 foreach 语句中,这有效.

这一定与我的 POST 变量以及我处理它的方式有关,但我没有解决问题的经验/知识。我不明白为什么我的 POST 数据以整数形式返回,但即使我删除了 isset 标签,我的陈述仍然是错误的?

非常欢迎和赞赏任何输入和帮助。

下面是我的代码,如果还有什么需要请追问:

索引.php

<form id="loginForm" method="POST" action="classes/class.Login.php">
<input type="text" id="username" name="username" placeholder="Username"/>
<input type="password" id="password" name="password" placeholder="Password" class="showpassword"/> 
<input type="submit" name="submit" value="Log in"/>

类/class.Login.php

public function loginuser() {

        $username = isset($_POST['username']);
        $password = isset($_POST['password']);

        //$salt = "boo";
        //$pw = crypt($password, $salt);

        $stmt = $this->pdo->prepare("SELECT * FROM users WHERE username = :username AND password = :password LIMIT 1");
        $stmt->bindValue(":username", $_POST['username'], PDO::PARAM_STR);
        $stmt->bindValue(":password", $_POST['password'], PDO::PARAM_STR);

            if ($stmt->fetch(PDO::FETCH_ASSOC))
                {
                    $_SESSION['authorized'] = true;
                $_SESSION['username'] = $username;
                    header('Location: testloginrequired.php');
                } else {
                    echo "Invaild username or password. Try again";                             
                }
    }// end loginuser
4

3 回答 3

1

改变:

 $username = isset($_POST['username']);

至 :

    $username =  ($_POST['username']);

isset函数返回一个布尔值 (true,false) ,因此您$username将是布尔值 (true or 1) 而不是字符串!

于 2013-09-24T11:11:23.390 回答
1
$username = isset($_POST['username']);

只是检查是否设置了变量。摆脱 isset 并将其简单地更改为

$username = $_POST['username'];

如果这不起作用,请执行此操作

$username = settype($username, "string");
于 2013-09-24T11:13:24.203 回答
1

使用构造:

if (isset($_POST['username'])) $username = $_POST['username'];

如果您将删除“isset”检查,您将收到警告,如果 POST 中不存在密钥“用户名”。

改进您的代码:

$username = (isset($_POST['username'])) ? $_POST['username'] : '';

这是三元运算符,适合您的情况。如果 POST 中存在键 'username',则 $username 将等于 $_POST['username'],否则 $username 将为空。享受 :)

于 2013-09-24T11:19:42.807 回答