我是PHP和MySQL的新手。我有一个php和mysql的登录脚本。在用户tabell中是我的用户名和我在md5中的密码。但如果我在输入字段中输入正确的用户名和密码,脚本总是说“密码错误”。你能纠正我的代码吗?
if(isset($_POST['username']) AND isset($_POST['password'])) {
$username = $_POST['username'];
$password = $_POST['password'];
if(empty($_POST['username']) OR empty($_POST['password'])) {
echo "Bitte fuelle alle Felder aus!";
} else {
$rows = mysqli_query($db,"SELECT * FROM users WHERE username = '".mysqli_real_escape_string($db, $username)."' AND password = '".mysqli_real_escape_string($db, $password)."' LIMIT 1") or die(mysqli_error($db));
if(mysqli_num_rows($rows) == 1) {
$_SESSION['username'] = $username;
header("Location: home.php");
echo "Erfolgreich eingeloggt";
} else {
echo "Falscher Benutzername";
}
}
}
新问题!
我的登录工作正常!现在我在家里。但是当我调用字符串$ username时我发出一个回显来自此消息:可捕获致命错误:类stdClass的对象无法在第19行的C:\ xampp \ htdocs \ home.php中转换为字符串
我的剧本:
if(!isset($_SESSION['username'])) { header("Location: index.php"); }
$username = mysqli_fetch_object(mysqli_query($db, "SELECT * FROM users WHERE username = '".$_SESSION['username']."' LIMIT 1")) or die(mysqli_error());
echo 'hi "'.$username.'"';
答案 0 :(得分:1)
你的第二个问题是因为:
mysqli_fetch_object返回结果集的当前行而不是字符串。您可以打印或访问以下值:
while ($username= mysqli_fetch_object(mysqli_query($db, "SELECT * FROM users WHERE username = '".$_SESSION['username']."' LIMIT 1")))
{
printf("%s",$username ->your_column_name);
}
答案 1 :(得分:0)
您尝试将明文密码与md5哈希密码相匹配,因此永远不会匹配。在查询中使用密码之前,请尝试重新密码。您总是可以在某处回显结果,以确保您输入的内容与数据库中保存的内容相匹配。
答案 2 :(得分:0)
您正在从表中选择ALL,因此请更改:
echo 'hi "'.$username.'"';
类似于:
echo 'hi "'.$username->fieldname.'"';
其中字段名称是包含用户名的字段的名称
编辑,因为我看到他使用的对象不是数组。