2017-08-29 39 views
-1

我正在尝试使用php创建登录系统。我想创建的是有一个页面,要求用户名,密码,电子邮件。然后,当用户填写字段以进入下一页,在该页面中将要求用户输入他的用户名和密码以便登录到系统。此外,我创造了一些东西,但工作不正常。表单被正确提交,并且我将数据接收到我的数据库中,但是当用户尝试登录到系统时,它只会允许已注册的LAST用户使用他的凭证登录系统。对于已注册的所有其他用户,登录不起作用。请有人可以帮助解决这个问题?PHP用户登录系统问题 - 只有最后一位用户才能登录

谢谢。

我的HTML和PHP代码:

<div class="container"> 
    <div class="row"> 
     <div class="col-xs-12"> 
      <h2>Please sign in with your username<br> 
      and password to complete the form... Thanks!!!</h2> 
      <form method="post" action="success.php"> 

       <?php 
        if(isset($_POST['login'])) { 

         $username = $_POST['user_username']; 
         $password = $_POST['user_password']; 


         $query = "SELECT * FROM users_info"; 

         $result = mysqli_query($connection, $query); 

         while($row = mysqli_fetch_assoc($result)) { 
          $db_username = $row['user_username']; 
          $db_password = $row['user_password']; 
         } 

         if($username !== $db_username) { 
          echo "Username does not exist"; 
         }else if ($password !== $db_password) { 
          echo "Password does not exist"; 
         }else { 
          header("Location: form.php"); 
         } 

        } 
       ?> 

       <div class="form-group"> 
        <label for="user_username">Enter Username</label> 
        <input type="text" name="user_username" class="form-control" required> 
       </div> 
       <div class="form-group"> 
        <label for="user_username">Enter Password</label> 
        <input type="password" name="user_password" class="form-control" required> 
       </div> 
       <div class="form-group"> 
        <input type="submit" name="login" value="Log In" class="btn btn-success"> 
       </div> 
      </form> 

     </div> 
    </div> 
</div> 
+0

“不工作”是什么意思? –

+2

您正在从数据库中选择***全部***用户,然后将它们全部分配给'$ db_username'(因此循环后只剩下最后一个)......这真是疯了。使用'WHERE user_username = ...'从数据库中只选择你实际感兴趣的一个用户! – deceze

+0

因为你查询所有的用户'SELECT * FROM users_info'并循环它们,所以只有最后一个被保存在你的变量'$ db_username'和'$ db_password'中。 – xander

回答

0

您需要限制查询拉只试图登录附注的用户信息,这并不能掩盖有关SQL安全或外来的留言。错误报告。我强烈建议你进行错误检查以查看提取的结果是否为空,然后向前移动。

<div class="container"> 
    <div class="row"> 
     <div class="col-xs-12"> 
      <h2>Please sign in with your username<br> 
      and password to complete the form... Thanks!!!</h2> 
      <form method="post" action="success.php"> 

       <?php 
        if(isset($_POST['login'])) { 

         $username = $_POST['user_username']; 
         $password = $_POST['user_password']; 


         //Fetch matching user data 
         $query = "SELECT * FROM users_info WHERE user_username = '$username' AND user_password = '$password'"; 

         $result = mysqli_query($connection, $query); 

         while($row = mysqli_fetch_assoc($result)) { 
          $db_username = $row['user_username']; 
          $db_password = $row['user_password']; 
         } 

         if($username !== $db_username) { 
          echo "Username does not exist"; 
         }else if ($password !== $db_password) { 
          echo "Password does not exist"; 
         }else { 
          header("Location: form.php"); 
         } 

        } 
       ?> 

       <div class="form-group"> 
        <label for="user_username">Enter Username</label> 
        <input type="text" name="user_username" class="form-control" required> 
       </div> 
       <div class="form-group"> 
        <label for="user_username">Enter Password</label> 
        <input type="password" name="user_password" class="form-control" required> 
       </div> 
       <div class="form-group"> 
        <input type="submit" name="login" value="Log In" class="btn btn-success"> 
       </div> 
      </form> 

     </div> 
    </div> 
</div> 
+0

您应该至少提供一种不是SQL注入式的解决方案。 1:D – xander

+0

谢谢你们的帮助。 @亚当你正在寻找我的答案。谢谢。 – pro78

+0

同意@xander,希望OP了解风险并利用它来挖掘更安全的方法。 – Adam

1

您必须在循环中使用条件。因为你在做什么是错的。请联系更多的PHP基础知识和一些基本的登录系统。

你的SQL查询应该是这个样子:

$query = "SELECT * FROM users_info WHERE user_username ='". mysqli_real_escape_string(CONNECTION_VAR, $username). "' AND user_password ='". mysqli_real_escape_string(CONNECTION_VAR, $password). "' LIMIT 1"; 

CONNECTION_VAR - your connection id to the database 

所以你只有一个行,如果匹配(密码和用户名)。您可以轻松地获取这样的:

$row = mysqli_fetch_assoc($result); 

所以,你可以在$row与数据的工作。

但请有注意以下几点:

  1. 取得联系基本的PHP
  2. 与基本的(我的)SQL的东西
  3. 隐窝/加密和散列密码取得联系。千万不要在数据库中使用清除密码

同时学习如何使用mysql类。

简单登录/注册系统:http://codingcyber.com/simple-user-registration-script-in-php-and-mysql-84/ - 但请记住散列或腌制密码。在查询中使用数据之前也要避免使用数据!

+0

好@yfain。感谢您的建议。 – pro78