0

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

3 回答 3

1

这段代码有几个合成器和技术问题。除了AlexP 所说的之外,您必须注意,当您已经发送了一些输出时,您无法发送标头。标头必须在任何输出之前发送,这与您必须将其放在session_start()开头的原因相同。

话虽如此,您还应该在您所在的 HTML 部分之前制作登录脚本session_start(),这样您的重定向标头也Reading.php可以工作。或者,您可以通过ob_start()在页面开头放置 a 来解决此问题,它将缓冲输出,防止在脚本结束之前发送它,这样您就可以在header()任何您喜欢的地方调用 a。

谈到标题,功能是header(),不是Header()Header()PHP中没有命名本机函数。函数名称区分大小写。

此外,你不应该action=""在你的<form>. 只需抑制此属性以使其发布到同一页面,它将使您的代码工作,无论您的 php 文件名是什么。如果您使用action=""它将发布到index.php而不是login.php.

我还注意到您正在使用Reading.php(大写字母)和login.php. 我建议您将所有文件名规范化为小写,因为如果不是这样,您在将此代码移植到其他系统时可能会遇到问题。对于 Windows,Reading、Reading、READING 和 ReAdInG 是一回事,对于 Linux 则不是。

于 2013-11-06T22:04:10.437 回答
1

您不能修改已经输出 HTML 的标题信​​息。将您的 HTML 移动到 PHP 标头调用下方。

文档说:

header() 必须在发送任何实际输出之前调用,无论是通过普通 HTML 标记、文件中的空行还是从 PHP

此外,您在使用时分配字符串值$NameTextBox = "Phydeaux",而不是有条件地检查它。

您应该改用==双等号

if(isset($_POST["Login"])){
  $NameTextBox = $_POST['NameTextBox']; // $NameTextBox is now the posted value

  if($NameTextBox == "Phydeaux"){ // double equals checks the value of the variable
于 2013-11-06T21:38:20.723 回答
0
<form action="" method="post">

你的帖子会去哪里?

我会给你这个:

1- 将您的 PHP 代码写入另一个页面并命名为“login.php”

2- 写下你的表单动作:<form action="login.php" method="post">

于 2013-11-06T21:38:11.580 回答