我正在尝试在用户点击登录按钮时更改页面。当当前点击登录按钮时,刚刷新的页面不会将用户重定向到新页面。我在页面的任何代码之前创建了会话。我想知道它是否与我的header命令的位置有关。
<?php
session_start();
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Login</title>
</head>
<body>
<form action="" method="post">
<br>Name: <input type="text" name="NameTextBox"><br>
<br>What grade are you currently in?: <input type="number" name="GradeTextBox"><br>
<br><button name="Login" type="submit">Login</button></br>
</form>
<?php
if (isset($_POST["Login"])) {
$_SESSION["start"] = $_SERVER['REQUEST_TIME'];
//echo "This session is beginning at ".$_SESSION["start"]."<br /><br />";
}
if(isset($_POST["Login"])){
if($NameTextBox = "Phydeaux"){
//echo"Good Name!";
PassLogin();
}
elseif($NameTextBox = "Rover"){
//echo"Good Name!";
PassLogin();
}
elseif($NameTextBox = "Spot"){
//echo"Good Name!";
PassLogin();
}
else{
echo"You cannot login!";
}
}
function PassLogin()
{
//print '<script type="text/javascript">';
//print 'alert("Running PassLogin Function")';
//print '</script>';
$_SESSION["ReadingGrade"] = "Fail";
$_SESSION["WritingGrade"] = "Fail";
$_SESSION["MathGrade"] = "Fail";
$_SESSION["Grade"] = $GradeTextBox;
$_SESSION["Name"] = $NameTextBox;
Header('Location: Reading.php');
}
if (isset($_POST["Login"])){
//echo "Login has been pressed";
}
?>
</body>
</html>
答案 0 :(得分:1)
您无法修改已输出HTML的标题信息。在PHP标头调用下移动HTML。
必须在发送任何实际输出之前调用header(),无论是普通HTML标记,文件中的空行还是PHP
此外,当您使用$NameTextBox = "Phydeaux"
时,您指定字符串值,而非有条件地检查它。
您应该使用==
double equals代替
if(isset($_POST["Login"])){
$NameTextBox = $_POST['NameTextBox']; // $NameTextBox is now the posted value
if($NameTextBox == "Phydeaux"){ // double equals checks the value of the variable
答案 1 :(得分:1)
此代码存在一些synthax和技术问题。除了what AlexP said之外,您必须注意到在已经发送了一些输出时无法发送标题。标题必须在任何输出之前发送,这与您将session_start()
放在开头的原因相同。
话虽这么说,您还应该在HTML session_start()
所在的HTML部分之前创建登录脚本,这样您的Reading.php
重定向标题也可以正常工作。或者您可以通过在页面的开头放置ob_start()
来解决这个问题,它会缓冲输出,防止在脚本结束之前发送它,这样您就可以在任何地方调用header()
。
在讨论标题时,函数是header()
,而不是Header()
。 PHP中没有名为Header()
的本机函数。函数名称区分大小写。
此外,您不应在action=""
中使用<form>
。只需禁止此属性使其发布到同一页面,它将使您的代码工作与您的php文件名无关。如果您使用action=""
,则会发布到index.php
而不是login.php
。
我还注意到您使用的是Reading.php
(带大写字母)和login.php
。我建议您将所有文件名规范化为小写,因为如果不是,则在将此代码移植到其他系统时可能会出现问题。对于Windows,阅读,阅读,阅读和ReAdInG是相同的事情,对于Linux它不是。
答案 2 :(得分:0)
<form action="" method="post">
你的帖子会去哪里?
我会给你这个:
1-将您的PHP代码写入另一页并命名为“login.php”
2-撰写您的表单操作:<form action="login.php" method="post">