2013-09-16 78 views
2

當我在我的本地主機SQL,它的工作原理。但是現在,當我將它上傳到我的客戶端SQL時,它確實沒有。當我登錄時,它應該重定向到edit.php,它已經從數據庫檢查名稱和密碼是否正確,但它保持空白。我不知道該怎麼做,因爲它在我的本地主機sql上工作。PHP錯誤重定向

我在哪裏登錄,登錄表單,(login.php中)

<?php 

include_once("logikinnitus.php"); 

session_start(); 
if(isset($_SESSION['logged'])) 
{ 

    header('Refresh: 2; URL=http://www.heakohv.ee/fava/admin/edit.php'); 
    echo "olete juba sisse logitud!"; 

    }else { 

    if (isset($_POST["submit"])){ 

    $name = $_POST["user"]; 
    $pass = $_POST["pass"]; 

    $object = new User(); 
    $object -> login($name, $pass); 
} 

?> 

<html> 
<head></head> 
<body> 

<form method="post" action="login.php"> 
    Username: <input type="text" name="user"/> 
    Password: <input type="password" name="pass"/> 
    <input type="submit" name="submit" value="login"> 
</form> 

<?php 

} 

    ?> 

</body> 
</html> 

我在哪裏檢查密碼和用戶是正確的(logikinnitus.php)

<?php 

include_once("connection.php"); 


Class User { 

    private $db; 

    public function __construct(){ 

     $this->db = new Connection(); 
     $this->db = $this->db->dbConnect(); 
    } 

    public function login($name, $pass){ 

     if(!empty($name) && !empty($pass)){ 

      $st = $this -> db -> prepare("select * from users where name=? and pass=?"); 
      $st -> bindParam(1, $name); 
      $st -> bindParam(2, $pass); 
      $st -> execute(); 

      if($st -> rowCount() == 1){ 

       session_start(); 
       $_SESSION['logged'] = true; 
       echo "Olete edukalt sisse logitud"; 
       header('URL=http://www.heakohv.ee/fava/admin/edit.php'); 
       exit(); 

      } 
      else{ 

       echo "Parool või kasutajanimi on vale"; 

      } 

     } 
     else{ 

      echo "Palun täida kõik väljad!"; 

     } 

    } 

} 

?> 

PHP連接(連接.php)

<?php 

class Connection{ 

    public function dbConnect(){ 
     return new PDO("mysql:host=host; dbname=name", "pass", ""); 
    } 
} 

?> 

警告我在打開錯誤報告時得到。

警告:在session_start()[function.session啓動]:打開(/家/ LA02/16840949/tmp目錄/ sess_46e83b3c6e65b60a68dd14f525bd92a5,O_RDWR)失敗:沒有這樣的文件或目錄(2)在/ home/LA02/16840949 /在線管理/ login.php中6

警告:在session_start()[function.session啓動]:不能發送會話cookie - 頭已經發出(輸出開始/home/la02/16840949/admin/connection.php 3)在上線/home/la02/16840949/admin/login.php 6

警告:在session_start()[function.session啓動]:無法發送會話緩存限制器 - 已經發送了頭(輸出開始/ home/la02/16840949/admin/connection.php:3)在/ home/la02/16840949/admin/logi n.php第6行

警告:未知:開(/家/ LA02/16840949/tmp目錄/ sess_46e83b3c6e65b60a68dd14f525bd92a5,O_RDWR)失敗:沒有這樣的文件或目錄(2)在未知在線0

警告:未知:無法寫入會話數據(文件)。請確認session.save_path的當前設置在第0行的Unknown中是正確的(/ home/la02/16840949/tmp)。

如果我添加session.save_path「文件夾」,它不會使我的登錄表單再次出現。 ..我從頭看只有空白頁,即使沒有錯誤 -

有任何問題,隨時問。

+0

難道是因爲你在重定向到edit.php之前'回聲'? – jonhopkins

+0

你可以打開php錯誤報告來幫助調試 - '<?php error_reporting(E_ALL);函數ini_set( '的display_errors',1); ...' – Sean

+0

第一和最後2警告是要看的。檢查以確保您的tmp文件夾「/ home/la02/16840949/tmp」存在並且具有寫入權限。如果這不是正確的位置,你應該更新你的php.ini文件中的tmp文件夾位置'session.save_path' – Sean

回答

3

沒有標題URL。使用Location: http://domain.com進行重定向。

此外,在發送標題之前,您不能輸出任何內容,因此請先刪除所有echo

在您的第一個代碼中,您必須在發送標題後添加die。沒有它,腳本將被執行到最後(這裏可能不是問題,但是您應該在重定向時始終停止腳本)。

+0

他沒有使用'URL'標題,他正在使用'Refresh'標題,該標題使用了'URL'選項,雖然技術上貶值,但它是有效的 –

+1

@PatrickEvans看看第二塊代碼在'login()'函數中 - 'header('URL = http:// www ...)' – Sean

+0

@Elon這當然是代碼的另一個問題,但不是所有初始警告。但是,一旦他處理了警告,他也必須處理這個問題。 – gview

0

警告告訴你什麼是問題---會話文件無法讀取或寫入,因爲它們似乎是將它們寫入* nix用戶主目錄。

警告:在session_start()[function.session啓動]:打開(/家/ LA02/16840949/tmp目錄/ sess_46e83b3c6e65b60a68dd14f525bd92a5, O_RDWR)失敗:(2)在 /家庭沒有這樣的文件或目錄/ LA02/16840949 /管理/登錄。php on line 6

你的代碼是否在調用session_save_path?如果不是,則需要檢查適用的php.ini文件中的session.save_path變量的值。你可以在你的文檔根目錄創建一個簡單的腳本:

<?php phpinfo(); 

如果您對這些設置的運行值的任何問題。

這也可能是一個權限問題,這取決於您的php/web服務器的配置方式。通常會話文件將寫入/ tmp目錄,但在你的情況下它們不是。如果你實際上打算把會話文件寫到它正在寫的地方,如果該目錄不存在,並且/或者運行php進程的用戶沒有讀/寫這些文件的權限,重新得到你得到的錯誤。

+0

另外,請參閱Elon指出的問題......您的標題有錯,正如他所示。你想使它保持一致 - 在兩個地方都使用位置標題,或者更好的方法是將它移到一個方法來使代碼變幹。 – gview

+0

如果我添加session.save_path「文件夾」它甚至不會使我的登錄表單再次出現......我從頭看到只有空白頁,即使沒有錯誤 –