PHP会话未按预期工作

时间:2015-11-20 21:46:23

标签: php session session-variables

所以我正在创建一个应用程序(对会话来说是新的 - 并且一直在尝试使用会话创建一个简单的错误处理语句。

为简化起见,让我来介绍一下基础知识。

  • 用户在第1页上输入查询
  • 用户按提交
  • 加载第2页以检查查询的值
  • 如果设置了查询,则会运行该查询并在第3页上显示结果
  • 如果它为空,则会捕获,设置错误并将用户重定向回第1页

我关心的是最后一步,因为某些原因我无法让它发挥作用。

以下是与错误有关的代码:

相关代码:

<?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页的查询框中捕获的值,并通过post方法发送到第2页,您可能会自然而然地假设。

但是当我在查询框中输入任何内容然后发送查询时,页面刷新(当第2页意识到查询为空并且标题位置重新加载页面时应该如此)但是没有显示错误,它应该考虑到我在第2页检查它是否已设置。

有什么想法吗?

干杯, - SD

2 个答案:

答案 0 :(得分:1)

您在Push中输入的拼写错误应该是if(trim($getQuery == "")) { ... },因为您只想修剪if(trim($getQuery) == "") { ... }变量,而不是整个条件。如果你改变它,那么它将起作用。

这是最低限度的工作示例

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

答案 1 :(得分:0)

有时浏览器重定向(您的标题(&#34;位置&#34;))可能比服务器更快。

在重定向之前,你应该放

// A high precedence, right associative backward pipe, more info here:
// http://tryfs.net/snippets/snippet-4o
let inline (^<|) f a = f a

/// <summary>Advanced operations on options.</summary>
type Microsoft.FSharp.Core.Option<'T> with
    // Attempts to return Some either from the original value or by calling lambda.
    // Lambda is required to return a monadic value (Option<'T>)
    static member Or f (x:Option<'T>) =
        match x with
        | None      -> f()
        | x         -> x

    // Same as above, but for lambdas returning plain types (e.g., `T)
    static member OrDefault f (x:Option<'T>) =
        match x with
        | None      -> f() |> Some
        | x         -> x

只是为了确保会话是为下次编写的。