我有一个用户输入数据和提交的表单。当用户提交并使用Ajax将信息中继到PHP时,此表单不会刷新。提交后,用户转到新页面(实际上它是同一页面,但用户将其视为另一页面)。如果需要,用户可以返回上一页以更改某些信息。当用户首次提交页面时,我对它没有任何问题。当用户返回并决定再次更改时,我遇到了麻烦。使用我当前的代码,我在刷新时启动一个空的SESSION [" prevUrl"]。之后,当用户提交表单时,会为SESSION [" prevUrl"]分配新的POST数据。让我们说用户决定再次提交,我有的if / else语句应该转到else语句,因为SESSION变量不为空,而是决定调用if块。我已经为if和else块使用了INSERT语句来查看正在调用的语句,并且两次都调用了if语句。这是我的代码:
session_start();
ob_start();
$_SESSION["prevUrl"] = "";
if (isset($_POST["articleType"], $_POST["articleTitle"], $_POST["articleUrl"], $_POST["numberOfPages"], $_POST["typeOfArticle"]))
{
$_SESSION["articleType"] = $_POST["articleType"];
$_SESSION["articleTitle"] = filter_data($_POST["articleTitle"]);
$_SESSION["articleUrl"] = friendlyUrl(filter_data($_POST["articleUrl"]));
if (empty($_SESSION["prevUrl"]))
{
$db->query("INSERT INTO Stories (`url`) VALUES ('hi')");
$_SESSION["prevUrl"] = friendlyUrl(filter_data($_POST["articleUrl"]));
}
else
{
$db->query("INSERT INTO Stories (`url`) VALUES ('bye')");
$db->query("UPDATE Stories SET url = '{$_POST['articleUrl']}' WHERE url = '{$_SESSION['prevUrl']}'");
$_SESSION["prevUrl"] = friendlyUrl(filter_data($_POST["articleUrl"]));
}
$_SESSION["numberOfPages"] = $_POST["numberOfPages"];
$_SESSION["typeOfArticle"] = $_POST["typeOfArticle"];
}
如何修复它以便第二次调用else块?为什么第二次,我的会话[" prevUrl"]被认为是空的?
答案 0 :(得分:1)
我会做以下事情:
$_POST
变量的所有内容,因为这意味着该页面是新加载的prevUrl
将这些步骤放在一起:
session_start();
ob_start();
//reset all session vars when page is freshly loaded
if(empty($_POST)) session_unset();
//clear prevURL only on first submission after a page load
if(empty($_SESSION['inserted']) $_SESSION["prevUrl"] = "";
...
if (empty($_SESSION["prevUrl"]))
{
$result = $db->query("INSERT INTO Stories (`url`) VALUES ('hi')");
if(!$result) die($db->error);
$_SESSION['inserted'] = true;
$_SESSION["prevUrl"] = friendlyUrl(filter_data($_POST["articleUrl"]));
}
else...
答案 1 :(得分:0)
因为在代码的开头你编写了$_SESSION["prevUrl"] = "";
(第3行),因此,每次页面执行时,SESSION ['prevUrl']都会为空。要解决这个问题,请将其命名为:
if(!isset($_SESSION['prevUrl'])){
$_SESSION['prevUrl'] = "";
}