2017-02-24 54 views
0

我的php代码有问题。我想使登录系统从数据库中获取用户名和密码。我几乎使一切工作。但是有一个问题。当你输入名字和密码/不重要什么时,甚至随机/它登录我并将我重定向到我想要的地方。如何解决这个问题,并使其只使用正确的用户名和密码从数据库?我将在这里导入我的登录代码文件。在此先感谢,对不起我的英文。每个输入的用户名和密码都以PHP登录方式工作

<?php 

include 'dbh.php'; 

$uid = $_POST['uid']; 
$pwd = $_POST['uid']; 

$query = "SELECT * FROM user WHERE uid='$uid' AND pwd='$pwd'"; 
$result = mysqli_query($conn, $query); 

if ($result = mysqli_query($conn, $query)) 
{ 
    while ($row = mysqli_fetch_assoc($result)) 
    { 
      printf("Login success\n"); 
    } 

    // If the while loop fails, password/username combo was incorrect 
    printf("Login failed - Invalid username or password."); 
} else { 
    printf("Login failed, could not query the database.\n"); 
} 


header("Location: panel.php"); 

?>  
+0

'$ pwd'are一样的,这可能是不想要的。此外查询被执行两次。 – particleflux

+0

我建议,不要查询用户并通过相同的查询,因为你很脆弱 – Rhopercy

+0

而且你需要研究SQL注入和消毒用户输入。 – fubar

回答

0

使用mysqli_num_rows

$sql="SELECT * FROM user WHERE uid='$uid' AND pwd='$pwd'"; 

if ($result=mysqli_query($con,$sql)) 
    { 
    if (mysqli_num_rows($result)!=0) { 
     printf("Login success\n"); 
    }else{ 
     printf("Login failed - Invalid username or password."); 
    } 
    mysqli_free_result($result); 
    } 
+0

请不要再使用'mysql_ *'方法。它们在当前版本的PHP中被弃用和删除。而应使用'mysqli_ *'或PDO和_prepared语句_。 – MrDarkLynx

+0

@MrDarkLynx更正。 –

+0

它做同样的事情。 – quakeN

0

首先,你是敞开的SQL注入,你将要更新。它覆盖了很多其他地方,查看它。

但是要解决您的问题,无论您的支票如何,您都会重定向。移动这while循环:

while ($row = mysqli_fetch_assoc($result)) 
{ 
     printf("Login success\n"); 
     header("Location: panel.php"); 
} 

有在底部意味着它就会不管解雇。

+0

MYDOMAIN页面无法正常工作 MYDOMAIN目前无法处理此请求。 HTTP错误500 – quakeN

+0

你的错误日志说的是什么问题? – Chausser

0

在一个侧面说明,`$ uid`和尝试这个

<?php 

    function Db(){ 
     $host  = "localhost"; // your db settings 
     $username = "yourusername"; 
     $password = "yourpass"; 
     $db  = "users"; 

     $conn = new mysqli($host, $username, $password, $db); 
     // use mysqli instead mysql_connect, it is outdated I guess 

     if(!$conn){ 
      die("Could not connect"); 
     } 
    } 

    if(isset($_POST['login'])){ 

     $uid = trim($_POST['username']); 
     $pwd = trim($_POST['password']); 

     if($uid == ""){ 
      $err[] = "Username is missing."; 
     }elseif($pwd == ""){ 
      $err[] = "Password is missing."; 
     }else{ // When validation succeed then make query. 
      $db = Db(); 
      $uid = $db->real_escape_string($uid); // escape strings from mysql injection 
      $pwd = $db->real_escape_string($pwd); 
      $sql = "SELECT * FROM users 
        WHERE username = '$uid' 
        AND password = '$pwd'"; 
      $result = $db->query($sql); 

      if($result->num_rows == 1){ 
       header("location:panel.php"); // login succeed 
      }else{ 
       $err[] = "Username or password are incorrect"; 
       header("location:login.php"); // login failed 
      } 
     } 

    } 
    ?> 

    <?php 
     if(isset($err)): 
      foreach($err as $loginErr): 
       echo $loginErr; // Print login errors. 
      endforeach; 
     endif; 
    ?> 


    <!-- HTML login form goes here --> 
+0

当我输入名称和密码时,它会将我发送到空白login.php页面 – quakeN

相关问题