2015-12-05 101 views
0

我想用下面的代碼來創建一個登錄表單。問題是在我嘗試登錄時註冊後,即使電子郵件&密碼正確,也會收到錯誤消息「用戶名或密碼不匹配」。我嘗試了「$ num < = 1」,並允許我登錄,但顯然它並未驗證登錄信息。任何幫助將不勝感激。最重要的是,這段代碼在像XAMPP這樣的本地服務器上工作正常,但是在使用像hostgator這樣的主機服務器時出現問題(與服務器連接時沒有問題)。用PHP登錄表單問題

<?php 
     session_start(); // Starting Session 

     #Database connection 
     include('../config/connection.php'); 


     $error=''; // Variable To Store Error Message 
     if (isset($_POST['submit'])) 
     { 
     if (empty($_POST['email']) || empty($_POST['password'])) { 
     $error = '<p class="alert alert-danger">One or either field is missing</p>'; 
     } 
     else 
     { 
     // Define $username and $password 
     $email=$_POST['email']; 
     $password = $_POST['password']; 


     // To protect MySQL injection for Security purpose 
     $email = stripslashes($email); 

     $email = mysql_real_escape_string($email); 


     // SQL query to fetch information of registerd users and finds user match. 
      $q = "SELECT * FROM users WHERE email = '$email' AND password = md5(SHA1('$password'))"; 
      $r = mysqli_query($dbc, $q)or die(mysqli_error()); 

      $num = mysqli_num_rows($r); 

      if($num ==1){ 

       $_SESSION['username'] = $email; 
       header('Location:Index.php'); 

      } else { 

     $error = '<p class="alert alert-danger">Username or Password don\'t match</p>'; 
     } 
     mysqli_close($dbc); // Closing Connection 
     } 
     } 
     ?> 
+0

'MD5(SHA1( '$密碼'))'這不看的權利。你不能像這樣在字符串中使用函數。首先將它分配給一個變量。 - 你也容易受到SQL注入攻擊,請看[如何防止PHP中的SQL注入?](http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection -in-PHP)。 - 'mysql_real_escape_string'將不起作用(因爲您正在使用'mysqli_'),並且不足以過濾用戶數據。 – Qirel

+0

調出一個MySQL控制檯,看看'SELECT md5(SHA1('Your Password'))'是否與數據庫中的內容匹配。此外,您的密碼中的報價可能會破壞您的查詢 –

+0

由於Qirel會記住這一點。 –

回答

0
查詢中的 $password不應該是 quotes之間

,引起那麼將尋求爲string,而不是variable的價值。

$q = "SELECT * FROM users WHERE email = '$email' AND password = 'md5(SHA1($password))'"; 

確保您密碼數據庫中的散列

+0

不,它不會 - 整個事物被雙引號包圍,並且移動SQL函數名稱的單引號不會導致它們被使用。 –