2015-11-05 73 views
-2
<?php 
require 'core.inc.php'; 
require 'connect.inc.php'; 
//print($current_file); 
if(isset($_POST['username']) && isset($_POST['password'])){ 
    $username = $_POST['username']; 
    $password = $_POST['password']; 
    $password_hash = md5($password); 

    if(!empty($username) && !empty($password)){ 

     $query = "SELECT `id` FROM `users` WHERE `username`='$username' AND `password`='$password_hash'"; 

     if($query_run = mysqli_query($conn,$query)){ 
      $query_num_rows = mysqli_num_rows($query_run); 

      if($query_num_rows == 0){ 
       print("Invalid username or password"); 
      } 
      else if($query_num_rows == 1){ 
       print("Found!"); 
      } 
     } 
    } 
    else{ 
     print("Enter username/password"); 
    } 
} 

?>无法检索行

<!DOCTYPE html> 
<html> 
<head> 
    <title></title> 
</head> 
<body> 
    <form action="<?php $current_file ?>" method="POST"> 
     Username 
     <input type="text" name="username"> 
     Password 
     <input type="text" name="password"> 
     <input type="submit" value="Log in"> 
    </form> 
</body> 
</html> 

你好,我想问一下这一点,因为我是新来的PHP。由于我在字段中输入了正确的用户名和密码,似乎我无法获得期望和期望的“找到IT”输出。此外,即使我输入正确,它给我“无效的uesrname和密码。”输出。谢谢!

+0

'$ current_file'是?这里的unknows太多了。 –

+0

没有办法知道该散列是否被正确存储,并且该列足够长以容纳该散列,您不应该使用我可能会添加的散列。 –

+0

请不要指望出现一个神奇的答案。阅读已发布的评论。无论如何,你已经得到答案;把它和他们联系起来。我在这里完成。 –

回答

0

也许你的问题是你的数据库中的密码字段不是散列。尝试在查询中发送$ password变量而不是$ password_hash,如果有效的话,那就是问题所在。

+0

[获得足够的代表发表评论并不难。](http://meta.stackexchange.com/questions/214173/why-do-i-need-50-reputation-to-comment-what-c​​an-i -DO-代替) –

0

最简单的调试方法是打印出sql查询。

$query = "SELECT `id` FROM `users` WHERE `username`='$username' AND `password`='$password_hash'"; 
var_dump($query); 

然后你可以看看你正在生成的SQL,甚至可以自己在数据库上运行它。可能是用户不存在或用户数据不同。

在您进一步研究之前,请先了解一下准备好的陈述。你不应该直接把用户输入到mysql查询中。

下面是一些关于sql注入的轻量级阅读。 http://php.net/manual/en/security.database.sql-injection.php