我在下面有这个代码,其中应该发生的是,如果$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>
答案 0 :(得分:0)
这可能是一些事情:
检查你的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