为什么这个表单将我导航到错误页面?

问题描述:

我有下面这段代码,如果$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

它指引你到哪个页面?如果这些变量不相等,预期的行为是什么? – Noah 2012-03-29 22:42:18

+0

检查窗体标签 – 2012-03-29 22:42:18

+0

当你说错误页面 - 什么样的?它是一个错误500,还是什么? – Pete 2012-03-29 22:42:25

有几件事情,这可能是:

  1. 检查php_error.log文件以了解更多调试信息,它通常会有一些关于导致错误的信息。

  2. 它看起来像你的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);" > 
    
  3. 如果您分配了$action变量,考虑包装的括号中的表达式,如:

    $action = (($sessionMinus == $_SESSION['initial_count']) ? "create_session2.php" : $_SERVER['PHP_SELF']); 
    

,也改变PHP_SELFREQUEST_URI(如PHP_SELF给出相对于文档根目录的文件路径,而不是包含文档根目录的完整路径),并将完整路径添加到create_session2.php文件中:

$action = (($sessionMinus == $_SESSION['initial_count']) ? $_SERVER['SERVER_NAME'] . "/create_session2.php" : $_SERVER['REQUEST_URI']); 

您不应该添加SERVER_NAME位,但我总是更喜欢我的链接中的绝对路径。

如果你可以提供更多的源代码,这将是非常有益的。

-T

+0

嗨,我只是复制和岗位代码,我会更新的代码,但?>标签和等在适当的地方,你之前提到他们 – user1292857 2012-03-29 22:57:20

+0

嗨,试图括号理论上讲,你已经表示,但仍然没有运气,我必须使用REQUEST_URI ? – user1292857 2012-03-29 23:08:54

+0

不,你不应**有使用它。你可以检查生成页面的源代码,看看表单的动作是什么? – 2012-03-29 23:25:45