2015-11-20 186 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