2016-08-10 25 views
-1

所以我不能解決這個問題。它一直說密碼或電子郵件/用戶名是錯誤的,我不知道下一步該怎麼做。似乎一切都很好。登錄代碼不起作用

如果有人能幫助我,這將是很好的。

代碼:

<?php 
    include 'config.php'; 
    include 'crypt.php'; 

    $username = $_POST['loginName']; 
    $email = $_POST['loginName']; 
    $password = crypt($_POST['loginPassword'], $salt); 

    $stmt = $conn->prepare('SELECT * FROM users WHERE (username = ? or email = ?) AND password = ?'); 
    $stmt->bind_param('sss' , $username, $email, $password); 
    $stmt->execute(); 

    $result = $stmt->get_result(); 
    $row = $result->fetch_assoc(); 
    $count = mysqli_num_rows($result); 

?> 

<html> 
     <head> 
      <title>Market</title> 
      <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> 
      <link rel="stylesheet" href="css/style.css" type="text/css" /> 
     </head> 
    <body> 
     <div id="content"> 
      <?php 
      if ($count > 0) { 
       session_start(); 
       $_SESSION['logged'] = true; 
       $_SESSION['username'] = $row['username']; 
       header("Refresh: 2.5; URL= index.php"); 
       ?> 
       <h1 align="center">Nice to see you again <?php echo $_SESSION['username'] ?>! </h1> 
       <?php 
      } 
      else { 
       ?> 
       <h1 align="center"> Password or email/username is wrong! </h1> 
      <?php 
       header("Refresh: 2.5; URL= logreg.php"); 
      } 
      ?> 
     </div> 
    </body> 
</html> 
+0

你不能使用' header()'生成輸出後。 – Ben

+0

你應該檢查是否已經發出了請求,並確保'$ password'等於表中的密碼。另外,'crypt()'可以在不同的平臺上以不同的方式返回。更不用說你的數據庫具有區分大小寫的排序規則了。 – frz3993

+0

...除非啓用輸出緩衝,但通常不會發生這種情況 –

回答

0

添加此代碼,並嘗試看看密碼哈希後

$password = crypt($_POST['loginPassword'], $salt); 
echo '<pre>'. $password;die; 

搜索用戶表,如果密碼哈希和用戶名存在

+0

我該如何犯這個錯誤!似乎我的密碼字段長度爲30.這當然遠不夠。 – Wolfdave

+0

@Wolfdave接受答案。再見 – synan54

1

您可以使用num_rows

$q = $stmt->execute(); 

if($q->num_rows > 0)