我对这段代码有问题,我不知道问题在哪里。因此,当我运行这段代码:if $row["count"] > 0
, else
块运行,$_SESSION["error"]
设置。
执行$row["count"] == 0
查询,新行插入到数据库中,但$_SESSION["save"]
和$_SESSION["error"]
都设置了!这是否意味着同时运行if
和else
语句?这对我来说没有任何意义。
$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标签内的输入按钮标签,脚本的行为不可预测的执行if
和else
语句在同一时间。我仍然很困惑为什么和如何输入标签导致,但至少脚本现在正在工作…
是否在index.php
中读取$_SESSION["error"]
和$_SESSION["save"]
后清除它们?在我看来,这两种情况你都遇到过一次,并且在你的$_SESSION
数组中有挥之不去的值。
我建议对这两种情况使用相同的变量名称,例如$_SESSION['save']
,并将success
或error
分配给它。这样,您就不必检查两个变量中的一个是否存在,而只需检查它的内容是什么。
例如,当您尝试这样做时,如果在$row["count"] > 0
阶段会话将记录$_SESSION["error"]
。如果您不删除它,它将被存储。因此设置了$_SESSION["error"]
。
也许你已经执行了两次代码,但["error"]仍然是设置的。
根据你的逻辑,这两个条件不可能同时运行。但是,我相信您已经多次运行此脚本。有时用IF,有时用ELSE。它似乎没有清除$_SESSION变量。
解决方案:使用$_SESSION['save']或$_SESSION['error']变量后,立即取消设置。
unset($_SESSION['save']);
或
unset($_SESSION['error]');