2013-07-09 55 views
0

所以我想在這裏做的是讓我的用戶登錄。 這是我用來做到這一點的腳本。MySQLi/PHP:沒有重定向到錯誤頁面?

我剛剛使用了在這裏找到的轉換器:https://wikis.oracle.com/display/mysql/Converting+to+MySQLi將我的Mysql轉換爲mysqli,因爲我是初學者,不知道該怎麼做。

現在,當用戶輸入正確的密碼和用戶名。 它完全符合我的要求,並且用戶被重定向到'dashboard.php' 但是,當用戶輸入不正確的數據時,用戶將以黑色'login.php'結尾(這是我在此處顯示的代碼)而不是'loginerror.php',這是我想要的。

我希望這裏有人能幫助我,因爲我很迷茫。

PS:是的我知道密碼現在是純文本,但不要擔心,因爲我會在稍後解決。

<?php 

    session_start(); 

    if(!$_SERVER['REQUEST_METHOD'] == 'POST') { 
     echo "Please leave.<br /><br />"; 
     echo "<a href='index'>Click to go back</a>"; 
     exit();  
    } 


    if(($GLOBALS["___mysqli_ston"] = mysqli_connect('localhost', 'root', ''))) { 
     if(((bool)mysqli_query($GLOBALS["___mysqli_ston"], "USE users"))) { 
      $username = $_POST['username']; 
      $password = $_POST['password']; 

      $query = "SELECT * FROM users WHERE username = '$username' AND password = '$password'"; 
      $zoekresultaat = mysqli_query($GLOBALS["___mysqli_ston"], $query); 

      if($zoekresultaat = mysqli_affected_rows($GLOBALS["___mysqli_ston"]) > 0) { 
       $record = mysqli_fetch_assoc($zoekresultaat); 

       $zoekresultaat = mysqli_query($GLOBALS["___mysqli_ston"], $query); 

       if($zoekresultaat = mysqli_affected_rows($GLOBALS["___mysqli_ston"]) > 0) { 
        $record = mysqli_fetch_assoc($zoekresultaat); 

        $_SESSION['login'] = true; 
        $_SESSION['username'] = $record['username']; 

        header('location: dashboard.php'); 
       } else { 
        header('location: loginerror.php'); 
       } 

       exit(); 
      } else { 
       echo "<br /><br />Could not find Database"; 
      } 
     } else { 
      echo "<br /><br />Could not connect to Database"; 
     } 
    } 
?> 
+1

DEBUG&檢查它是否實際上是在其他條件。 – Rikesh

+0

在您編寫更多SQL代碼之前,您必須**閱讀[正確的SQL轉義](http://bobby-tables.com/php)以避免[SQL注入漏洞](http:// bobby- tables.com/)。使用'mysqli',你需要使用['bind_param'](http://php.net/manual/en/mysqli-stmt.bind-param.php)方法提供你的查詢所使用的值,永遠不要用戶提供的數據從'$ _POST'直接進入您的查詢。 – tadman

回答

0

在輸出任何內容後,您無法使用頭方法重定向。在這種情況下,你在頭重定向之前使用Echo,所以它不起作用。

請參閱本主題以供參考:How to fix "Headers already sent" error in PHP

你應該做你的應用程序輸出任何東西之前定義重定向,如果它似乎很難,你的應用程序可能需要進行重組。

這裏有一些選擇,如果你不想這樣做,但他們是不好的做法:

HTML

<meta http-equiv="Location" content="http://example.com/"> 

的Javascript

<script> location.replace("target.html"); </script> 

另外,作爲通常,針對MySQL注入辯護:How can I prevent SQL injection in PHP?

+0

這很奇怪,因爲它在mysqli轉換之前工作得很好,我現在要測試它,以及'header('location:dashboard.php')是怎麼來的。 '有效,但另一個不行? –

+0

其他東西必須改變。如果在使用header()之前輸出了任何東西,即使它是PHP文件中的尾部空格,它也不起作用。 –