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

时间:2012-03-29 22:39:37

标签: php forms

我在下面有这个代码,其中应该发生的是,如果$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>

1 个答案:

答案 0 :(得分:0)

这可能是一些事情:

  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']);
    
  4. 并将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