0

我有以下 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.phpprintCertHR.php,第一行是:

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

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

请注意:用户名/密码仅用于示例!

4

5 回答 5

3

PHP 中的 'Location'标头命令后应跟exit;

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

请参阅 PHP 标头页面中的示例

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

/* Make sure that code below does not get executed when we redirect. */
exit;
于 2013-06-17T16:41:09.080 回答
2

位置(或任何其他标头)必须是脚本响应的第一件事。删除脚本中的空行。

于 2013-06-17T16:30:59.217 回答
2

在调用标题之前,您已经显示了内容(至于您对 Rob W 的评论)。绕过它的方法是,将它放在ob_start();php 代码的顶部和代码ob_end_flush();的末尾,以便可以在代码之间的任何位置调用标头。

于 2013-06-17T16:42:33.490 回答
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)

于 2013-06-17T16:36:29.993 回答
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();
}

输出缓冲区(php.net)

于 2013-06-17T16:42:36.347 回答