2015-11-20 231 views
2

所以,我正在創建一個應用程序(新會話),並試圖使用會話創建一個簡單的錯誤處理語句。PHP會話不能按預期工作

爲了簡化事情,讓我描述基礎知識。

  • 用戶輸入查詢頁面上的1
  • 用戶按下提交
  • 頁2被裝載如果查詢被設置爲檢查查詢
  • 的值,它被運行,並且被顯示在結果第3頁
  • 如果爲空但是,錯誤被捕獲,並設置用戶被重定向回第1頁

我關心的是最後一步,我不能讓它工作出於某種原因。

下面是代碼與錯誤:

頁1S相關代碼:

<?php 
session_start(); 

$ERROR = $_SESSION['error']; 

if($ERROR) { 
    echo $ERROR; 
} 

?> 

而且第2頁:

<? 

session_start(); 

---------------- And as we go down the file a bit ---------------- 

if(trim($getQuery == "")){ 
    $ERROR = "no search criteria entered"; 

    $_SESSION['error'] = $ERROR; 

    if(!isset($_SESSION['error'])) { 
     die("the session error was not set for some reason"); 
    } 

    $url = "localhost:8000/mysite"; //index.php is page 1 in this case so I just redirect to the parent directory as index is loaded by default obviously in that case 

    header("Location:" . $url); 
} 
?> 

$ getQuery是在查詢中捕捉到的值如第1頁的方框中所示,並通過後期方法發送到第2頁,這可以自然地假設。

但是,當我在查詢框中輸入任何內容,然後發送查詢,頁面刷新(因爲它應該在2頁意識到查詢是空的,頭的位置重新加載頁面),但沒有顯示任何錯誤,它應該考慮我在第2頁檢查它是否已設置。

任何想法?

乾杯, - SD

+0

你有PHPSESSID的Cookie在你的瀏覽器設置? –

+3

它看起來像你有一個'''在錯誤的地方。你有'if(trim($ getQuery ==「」))',但我認爲你想'if(trim($ getQuery)==「」) – Sean

+0

@Sean爲什麼你更喜歡使用這種方法而不是OP目前使用? –

回答

2

你有一個錯字if(trim($getQuery == "")) { ... }它應該是if(trim($getQuery) == "") { ... },因爲你只想修整$getQuery變量,而不是整個條件。如果你改變這個,那麼它會工作。

這裏有一個最低工作示例

<?php // 1.php 
session_start(); 
$ERROR = $_SESSION['error']; 
if($ERROR) { 
    echo $ERROR; 
} 
?> 

<?php // 2.php 
$getQuery = ""; // This is empty so it will redirect to 1 and show error message 
session_start(); 
if(trim($getQuery) == ""){ 
    $ERROR = "no search criteria entered"; 

    $_SESSION['error'] = $ERROR; 

    if(!isset($_SESSION['error'])) { 
     die("the session error was not set for some reason"); 
    } 
    $url = "1.php"; //index.php is page 1 in this case so I just redirect to the parent directory as index is loaded by default obviously in that case 
    header("Location:" . $url); 
} 
?> 
0

有時瀏覽器重定向(您的標題( 「位置」))可以比服務器更快。

就重定向之前,你應該把

session_write_close() 

只是爲了確保會議是爲下一次寫入。

+0

不是'header(「Location」)'服務器(即.php)重定向,而不是瀏覽器重定向? – Sean

+0

在瀏覽器不接受重定向的情況下,在重定向之後粘貼「退出」 – Terminus

+0

標題(「位置」)僅向瀏覽器發送標題,告訴其重定向。是的,按照Terminus關於重定向後退出的建議 - 但不是出於同樣的原因。它確保您的腳本終止,它不會真正影響瀏覽器是否接受重定向。 – Chris