为什么这个表单将我导航到错误页面?
我有下面这段代码,如果$sessionMinus
(它是一个数字)与($_SESSION['initial_count'])
不一样,那么表单提交给我自己,我想要发生但是如果$sessionMinus
等于与($_SESSION['initial_count'])
相同的数字,那么我希望表单提交到create_session2.php。为什么这个表单将我导航到错误页面?
但问题是,如果我点击提交按钮,无论发生什么事情,它都会带我到一个错误页面,无论数字是否匹配。这是为什么发生? (如果我同时使用==和===标志,会发生这种情况)。
下面是代码:
<?php
session_start();
if ($sessionMinus == $_SESSION['initial_count']){
$action = ($sessionMinus == $_SESSION['initial_count']) ? "create_session2.php" : $_SERVER['PHP_SELF'];
}
?>
<body>
<form id="QandA" action="<?php echo htmlentities($action); ?>" method="post" onsubmit="return validateForm(this);" >
...
</body>
解决方案如下:
<?php
session_start();
if ($sessionMinus == $_SESSION['initial_count']){
$action = 'create_session2.php';
}else if($sessionMinus != $_SESSION['initial_count']){
$action = $_SERVER['PHP_SELF'];
}
?>
<body>
<form id="QandA" action="<?php echo htmlentities($action); ?>" method="post" onsubmit="return validateForm(this);" >
...
</body>
有几件事情,这可能是:
检查php_error.log文件以了解更多调试信息,它通常会有一些关于导致错误的信息。
-
它看起来像你的PHP语句和你的HTML没有正确分开(假设这些代码行是一个接一个)。在
if
块之后但在<form>
标签之前,您需要一个?>
标签。所以,你的代码将是:<?php /* <- this should be above this line already in your code */ if ($sessionMinus == $_SESSION['initial_count']) { $action = ($sessionMinus == $_SESSION['initial_count']) ? "create_session2.php" : $_SERVER['PHP_SELF']; } /* you need to add the tag below */ ?> <form id="QandA" action="<?php echo htmlentities($action); ?>" method="post" onsubmit="return validateForm(this);" >
-
如果您分配了
$action
变量,考虑包装的括号中的表达式,如:$action = (($sessionMinus == $_SESSION['initial_count']) ? "create_session2.php" : $_SERVER['PHP_SELF']);
,也改变PHP_SELF
到REQUEST_URI
(如PHP_SELF
给出相对于文档根目录的文件路径,而不是包含文档根目录的完整路径),并将完整路径添加到create_session2.php
文件中:
$action = (($sessionMinus == $_SESSION['initial_count']) ? $_SERVER['SERVER_NAME'] . "/create_session2.php" : $_SERVER['REQUEST_URI']);
您不应该添加SERVER_NAME
位,但我总是更喜欢我的链接中的绝对路径。
如果你可以提供更多的源代码,这将是非常有益的。
-T
嗨,我只是复制和岗位代码,我会更新的代码,但?>标签和等在适当的地方,你之前提到他们 – user1292857 2012-03-29 22:57:20
嗨,试图括号理论上讲,你已经表示,但仍然没有运气,我必须使用REQUEST_URI ? – user1292857 2012-03-29 23:08:54
不,你不应**有使用它。你可以检查生成页面的源代码,看看表单的动作是什么? – 2012-03-29 23:25:45
它指引你到哪个页面?如果这些变量不相等,预期的行为是什么? – Noah 2012-03-29 22:42:18
检查窗体标签 – 2012-03-29 22:42:18
当你说错误页面 - 什么样的?它是一个错误500,还是什么? – Pete 2012-03-29 22:42:25