由于某种原因,我一直试图登录并继续收到我的错误,用户名和密码无效。我已经尝试在编码中设置密码而不是使用post方法。有人有任何想法吗?
另外,我知道md5不再是好的了,但是现在就说明了这个问题,一旦我的所有功能完成,我将切换到SHA-2,并且我将在稍后加盐并哈希。
<?php
include_once"dbconnection.php";
session_start();
$mysqli = new mysqli($host, $username, $password, $database);
if(isset($_POST['login'])){
if ($stmt = $mysqli->prepare("SELECT email, password FROM users WHERE email=? AND password=? LIMIT 1"))
{
$email = $_POST['email'];
$password = md5($_POST['password']);
$stmt->bind_param('ss', $email, $password);
$stmt->execute();
$stmt->bind_result($email, $password);
$stmt->fetch();
if($stmt->fetch() == true)
{
$_SESSION['Logged'] = 1;
$_SESSION['Email'] = $email;
header('Location: blogzone.php');
exit();
} else {
echo "Wrong Username or Password!";
}
$stmt->close();
}
else
{
}
}
$mysqli->close();
?>
我的HTML
<form action="login.php" method="post" name="login">
<input type="text" name="email" /><br />
<input type="password" name="password" id="password"/><br />
<input type="submit" value="Login" name="login" />
</form>
答案 0 :(得分:1)
您已经在 mysqli语句对象上调用fetch()
一次,然后在if
条件下再次调用它。
$stmt->fetch(); // <---- Notice you already fetched the result
if($stmt->fetch() == true) // <---- This is your problem right here
{
/* ... */
} else {
echo "Wrong Username or Password!";
}
请注意,一旦您获取结果,就不会有更多行要提取,然后mysqli_stmt::fetch
将返回NULL
。如果您想要在if
条件中检查结果,或者在mysqli_stmt::fetch
中将调用结果存储在变量中,请不要第一次获取它,而是检查一下。
答案 1 :(得分:1)
我认为问题是没有获取所需的参数。 试试这段代码(未经测试)
<?php
include_once"dbconnection.php";
session_start();
$mysqli = new mysqli($host, $username, $password, $database);
if(isset($_POST['login'])){
$stmt = $mysqli->prepare("SELECT email, password FROM users WHERE email=? AND password=? LIMIT 1");
$email = $_POST['email'];
$password = md5($_POST['password']);
$stmt->bind_param('ss', $email, $password);
$stmt->execute();
$stmt->bind_result($email, $password);
$stmt->store_result();
if($stmt->num_rows == 1) //To check if the row exists
{
while($stmt->fetch()) //fetching the contents of the row
{$_SESSION['Logged'] = 1;
$_SESSION['Email'] = $email;
header('Location: blogzone.php');
exit();
}
}
else {
echo "Wrong Username or Password!";
}
$stmt->close();
$stmt->free_result();
}
else
{
}
$mysqli->close();
?>
答案 2 :(得分:0)
我不知道你是否得到了答案,但试试这个:
打印出他们在登录表单中插入的用户密码的哈希版本(不是从数据库中),看看它们是否匹配。
echo md5($_POST['password']);
这可能有助于确定。假设数据库中的那个匹配但最后缺少字符串,您就会知道您没有将varchar设置为足够大以适应数据库中的行。