用php更改页面

时间:2013-11-06 21:29:59

标签: php html

我正在尝试在用户点击登录按钮时更改页面。当当前点击登录按钮时,刚刷新的页面不会将用户重定向到新页面。我在页面的任何代码之前创建了会话。我想知道它是否与我的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>

3 个答案:

答案 0 :(得分:1)

您无法修改已输出HTML的标题信息。在PHP标头调用下移动HTML。

documentation说:

  必须在发送任何实际输出之前调用

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">