header()没有重定向到PHP中的页面

时间:2013-06-17 16:27:52

标签: php html

我有以下PHP printExam.php 页面:

    <?php   
    $logins = array(
        'user' => 'pass',
        'user1' => 'pass1',
        'user2' => 'pass2',
        'user3' => 'pass3',
        'user4' => 'pass4'
    );

    // Clean up the input values 
    foreach($_POST as $key => $value) {  
        $_POST[$key] = stripslashes($_POST[$key]); 

        $_POST[$key] = htmlspecialchars(strip_tags($_POST[$key])); 
    }

    /******************************************************************************/
       if (isset($_POST['submit'])){

          $user = isset($_POST['user']) ? strtolower($_POST['user']) : '';
          $pass = isset($_POST['pass']) ? $_POST['pass'] : '';
          $report = $_POST['typereport'];

          if ((!array_key_exists($user, $logins))||($logins[$user] != $pass)) {
             showForm("Wrong Username/Password");
             exit();     
          }
          else {
    if ($report == "Clinical") {    
?>
<html>
<head>
</head>

<body>
CLINICAL PAGE
</body>
</html>
<?php
    }
    elseif ($report == "Annual Education") {
?>
<html>
<head>
</head>

<body>
ANNUAL EDUCATION PAGE
</body>
</html>
<?php
    }
          }
       } else {
          showForm();
          exit();
       }

    function showForm($error=""){
    ?>
    <!DOCTYPE html>
    <html><head>
    <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
    <title>Certificate Printing :: Login</title>
    <script src="http://code.jquery.com/jquery-1.7.1.min.js" type="text/javascript"></script>
    <Script>
    $(function() {
      $("#user").focus();
    });
    </Script>
    </head>

    <body>

    <form id="login" action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" name="pwd">
        <h1>Log In</h1>
        <fieldset id="inputs">
            <input id="user" name="user" placeholder="Username" autofocus="" required="" type="text">   
            <input id="pass" name="pass" placeholder="Password" required="" type="password">
        </fieldset>
        <fieldset id="actions">
            <input type="radio" name="typereport" id="cbox" value="Clinical" checked="yes" /> Clinical 
            <input type="radio" name="typereport" id="cbox" value="Annual Education" /> Annual Education
        </fieldset>
        <fieldset id="actions">
            <input id="submit" name="submit" value="Log in" type="submit">
        </fieldset>
        <div class="caption"><?php echo $error; ?></div>
    </form>
    </body>
    </html>
    <?php   
    }
    ?>

对于 printCert.php printCertHR.php ,第一行是:

<?php require_once('printExam.php'); ?>

每次用户访问任一页面时,它所要做的就是调用printExam.php页面。如果用户名和密码匹配并且取决于选择,无论是临床教育还是年度教育,都应该将用户带到正确的页面。我知道表单工作正常,因为如果我输入错误的用户名/密码,它会显示错误,但一旦正确,它不会重定向。知道怎么解决吗?

请注意:仅为示例简化了用户名/密码!

5 个答案:

答案 0 :(得分:3)

PHP中的'Location' header 命令后面应该跟exit;

否则执行以下代码,即将任何输出发送到浏览器。

请参阅PHP标题页中的examples

<?php
header("Location: http://www.example.com/"); /* Redirect browser */

/* Make sure that code below does not get executed when we redirect. */
exit;

答案 1 :(得分:2)

位置(或任何其他header)需要是您的脚本回应的第一件事。删除脚本中的空白行。

答案 2 :(得分:2)

您在调用标题之前显示内容(对于您对Rob W的评论)。解决问题的方法是,将ob_start();放在php代码的顶部,将ob_end_flush();放在代码的末尾,这样就可以在代码之间的任何地方调用标题。

答案 3 :(得分:1)

elseif ($report == "Annual Education") {阻止之后,尝试print_r($report) - 确保它符合您的预期......

if ($report == "Clinical") {
    header ("Location: printCert.php");
}
elseif ($report == "Annual Education") {
    header ("Location: printCertHR.php");
}
print_r($report);

此外,尝试监控FireBug的NET选项卡(或CHROME的)

答案 4 :(得分:1)

您是否有可能需要使用PHP的输出缓冲区来解决这个问题?解析脚本时,在函数中输出表单可能会将其抛弃,因为在运行其余脚本之前将解析该函数​​。

此外,您应该使用strcmp来比较字符串,而不是==符号。 strcmp vs ==

尝试使用输出缓冲区功能,看看是否修复了它。它会看起来像这样:

function showForm($error=""){
ob_start(); ?>
<!DOCTYPE html>
<html><head>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
<title>Certificate Printing :: Login</title>
<script src="http://code.jquery.com/jquery-1.7.1.min.js" type="text/javascript"></script>
<Script>
$(function() {
  $("#user").focus();
});
</Script>
</head>

<body>

<form id="login" action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" name="pwd">
    <h1>Log In</h1>
    <fieldset id="inputs">
        <input id="user" name="user" placeholder="Username" autofocus="" required="" type="text">   
        <input id="pass" name="pass" placeholder="Password" required="" type="password">
    </fieldset>
    <fieldset id="actions">
        <input type="radio" name="typereport" id="cbox" value="Clinical" checked="yes" /> Clinical 
        <input type="radio" name="typereport" id="cbox" value="Annual Education" /> Annual Education
    </fieldset>
    <fieldset id="actions">
        <input id="submit" name="submit" value="Log in" type="submit">
    </fieldset>
    <div class="caption"><?php echo $error; ?></div>
</form>
</body>
</html>
<?php   
return ob_get_flush();
}

Output Buffers(php.net)