2014-09-05 158 views
0

即时通讯在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.'"'; 
+0

尝试在密码上使用'md5()',然后在'mysqli_real_escape_string'上输入它,旁注:use ['password_hash()'](http://php.net/manual/en/ref.password .php)而不是 – Ghost 2014-09-05 03:23:18

+0

@Ghost首先不提示'md5()'! – 2014-09-05 03:24:46

+0

@Ghost它不起作用。 – Holyfuture 2014-09-05 03:27:14

回答

0

嗯......还是不能发表评论。新来的。

您试图将明文密码与md5散列密码相匹配,因此永远不会匹配。在查询中使用密码之前,尝试重新调整密码。你总是可以在某处回显结果,以确保你输入的内容与保存在数据库中的内容相匹配。

+0

是的,你不能评论,因为你还没有足够的代表,当你发布这样的东西备份一些代码,并完全回答它 – Ghost 2014-09-05 03:37:02

+0

嘿,第一个问题已修复!我在'$ password = md5($ _ POST ['password']);'$ rows set'之前有了这个脚本。 – Holyfuture 2014-09-05 03:38:22

+1

@Ghost - 谢谢你的提升,我还是习惯了这个。肯定会听取建议。 Holyfuture - 真棒,很高兴它解决了。 – 2014-09-05 03:40:35

0

我有另一个问题。

我的登录方式可行!现在我在我家。但是,只要我在调用字符串$ 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.'"'; 
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); 

} 

LINK

+0

我粘贴了脚本时间。如果我Reloaded用户名无处不在传递我的网站。哪里有问题? – Holyfuture 2014-09-05 16:09:16

0

你们都从表中选择,以便改变这样的:

echo 'hi "'.$username.'"'; 

喜欢的东西:

echo 'hi "'.$username->fieldname.'"'; 

其中字段名称是包含用户名的字段的名称

编辑,因为我看到他使用的对象不是数组。

相关问题