登录脚本 - 尽管输入正确,用户名和密码总是为false
即时通讯在PHP和MySQL中是新的。我有一个登录脚本与PHP和MySQL。在用户tabell是我的用户名和密码在md5。但如果我在输入字段中输入正确的用户名和密码,则脚本始终显示“密码错误”。你能纠正我的代码吗?登录脚本 - 尽管输入正确,用户名和密码总是为false
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.'"';
嗯......还是不能发表评论。新来的。
您试图将明文密码与md5散列密码相匹配,因此永远不会匹配。在查询中使用密码之前,尝试重新调整密码。你总是可以在某处回显结果,以确保你输入的内容与保存在数据库中的内容相匹配。
是的,你不能评论,因为你还没有足够的代表,当你发布这样的东西备份一些代码,并完全回答它 – Ghost 2014-09-05 03:37:02
嘿,第一个问题已修复!我在'$ password = md5($ _ POST ['password']);'$ rows set'之前有了这个脚本。 – Holyfuture 2014-09-05 03:38:22
@Ghost - 谢谢你的提升,我还是习惯了这个。肯定会听取建议。 Holyfuture - 真棒,很高兴它解决了。 – 2014-09-05 03:40:35
我有另一个问题。
我的登录方式可行!现在我在我家。但是,只要我在调用字符串$ 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.'"';
你的第二个问题是因为:
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);
}
我粘贴了脚本时间。如果我Reloaded用户名无处不在传递我的网站。哪里有问题? – Holyfuture 2014-09-05 16:09:16
你们都从表中选择,以便改变这样的:
echo 'hi "'.$username.'"';
喜欢的东西:
echo 'hi "'.$username->fieldname.'"';
其中字段名称是包含用户名的字段的名称
编辑,因为我看到他使用的对象不是数组。
尝试在密码上使用'md5()',然后在'mysqli_real_escape_string'上输入它,旁注:use ['password_hash()'](http://php.net/manual/en/ref.password .php)而不是 – Ghost 2014-09-05 03:23:18
@Ghost首先不提示'md5()'! – 2014-09-05 03:24:46
@Ghost它不起作用。 – Holyfuture 2014-09-05 03:27:14