我有以下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页面。如果用户名和密码匹配并且取决于选择,无论是临床教育还是年度教育,都应该将用户带到正确的页面。我知道表单工作正常,因为如果我输入错误的用户名/密码,它会显示错误,但一旦正确,它不会重定向。知道怎么解决吗?
请注意:仅为示例简化了用户名/密码!
答案 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)