我正在创建一个登录脚本,每次输入正确的凭据时它都会失败。我首先认为这与已经深入解释的密码函数有关,并且已经做了进一步的研究以找到一个好的方法。
无论如何,我已经在登录和注册中删除了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标记,我的语句仍然是假的?
非常欢迎和赞赏任何意见和建议。
以下是我的代码,如果还有其他需要,请询问:
的index.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
答案 0 :(得分:1)
变化:
$username = isset($_POST['username']);
到:
$username = ($_POST['username']);
isset
函数返回一个布尔值(true,false),因此你的$username
将是布尔值(true或1
)而不是字符串!
答案 1 :(得分:1)
$username = isset($_POST['username']);
只是检查变量是否已设置。摆脱isset并将其简单地改为
$username = $_POST['username'];
如果不起作用,请执行此操作
$username = settype($username, "string");
答案 2 :(得分:1)
使用构造:
if (isset($_POST['username'])) $username = $_POST['username'];
如果您要删除“isset”检查,如果POST中不存在密钥“username”,您将收到警告。
改进您的代码:
$username = (isset($_POST['username'])) ? $_POST['username'] : '';
这是ternary operator,它适用于您的情况。如果POST中存在键'username',则$ username将等于$ _POST ['username'],否则$ username将为空。享受:)