2017-08-29 38 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