PHP: $_SESSION register


PHP: $_SESSION register

我对这段代码有问题,我不知道问题在哪里。因此,当我运行这段代码:if $row["count"] > 0, else块运行,$_SESSION["error"]设置。

执行$row["count"] == 0查询,新行插入到数据库中,但$_SESSION["save"]$_SESSION["error"]都设置了!这是否意味着同时运行ifelse语句?这对我来说没有任何意义。

$stmt = $pdo->prepare("SELECT COUNT(*) AS count ... QUERY");
$stmt->execute();
$row = $stmt->fetch(PDO::FETCH_ASSOC);
if( $row["count"] == 0 ){
        $stmt = $pdo->prepare("INSERT...QUERY");
    $stmt->execute();
    $_SESSION["save"] = "Saved";
    header("Location:index.php");
    exit();
}else{
    $_SESSION["error"] = "Error";
    header("Location:index.php");
    exit();
}

我在index.php中使用这个代码

$save = (isset($_SESSION["save"]))? $_SESSION["save"] : false;
$error = (isset($_SESSION["error"]))? $_SESSION["error"] : false;
unset($_SESSION["error"]);
unset($_SESSION["save"]);

正如我所说,当$row["count"] == 0时,我同时设置了$save$error .


解决看来我找到了问题所在。我改变了访问脚本的方式:

<a href='script.php?id=10'><input type="button" value='Go to script' /></a>

:

<a href='script.php?id=10'>Go to script</a>

脚本现在正在工作。在a标签内的输入按钮标签,脚本的行为不可预测的执行ifelse语句在同一时间。我仍然很困惑为什么和如何输入标签导致,但至少脚本现在正在工作…

是否在index.php中读取$_SESSION["error"]$_SESSION["save"]后清除它们?在我看来,这两种情况你都遇到过一次,并且在你的$_SESSION数组中有挥之不去的值。

我建议对这两种情况使用相同的变量名称,例如$_SESSION['save'],并将successerror分配给它。这样,您就不必检查两个变量中的一个是否存在,而只需检查它的内容是什么。

例如,当您尝试这样做时,如果在$row["count"] > 0阶段会话将记录$_SESSION["error"]。如果您不删除它,它将被存储。因此设置了$_SESSION["error"]

也许你已经执行了两次代码,但["error"]仍然是设置的。

根据你的逻辑,这两个条件不可能同时运行。但是,我相信您已经多次运行此脚本。有时用IF,有时用ELSE。它似乎没有清除$_SESSION变量。

解决方案:使用$_SESSION['save']或$_SESSION['error']变量后,立即取消设置。

unset($_SESSION['save']);

unset($_SESSION['error]');