Изменение страницы с помощью php

0

Я пытаюсь изменить страницу, когда пользователь нажимает кнопку входа в систему. Когда в настоящее время нажата кнопка входа в систему, страница только что обновилась, пользователь не перенаправляется на новую страницу. Я создал сеанс перед любым кодом для страницы. Мне интересно, связано ли это с расположением моей команды заголовка.

    <?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 ответа

1
Лучший ответ

С этим кодом существует несколько синтаксовых и технических проблем. В дополнение к тому, что сказал AlexP, вы должны заметить, что вы не можете отправлять заголовки, когда вы уже отправили некоторый вывод. Заголовки должны быть отправлены до выхода, по той же причине, что и в начале session_start().

При этом вы также должны сделать скрипт входа в систему перед частью HTML, где находится session_start(), поэтому ваш заголовок перенаправления в Reading.php может работать. Или вы можете решить, что, поместив ob_start() в начало страницы, он будет буферизовать вывод, чтобы он не отправлялся до завершения скрипта, таким образом вы можете вызвать header() где хотите.

И говоря о заголовке, функция header(), а не Header(). В PHP нет встроенной функции с именем Header(). Названия функций чувствительны к регистру.

Кроме того, вы не должны использовать action="" в своей <form>. Просто подавите этот атрибут, чтобы он опубликовал его на одной странице, это заставит ваш код работать независимо от имени вашего php файла. Если вы используете action="" он будет отправлять сообщение index.php вместо login.php.

Я также заметил, что вы используете Reading.php (с заглавной буквы) и login.php. Я предлагаю вам нормализовать все имена файлов в нижнем регистре, потому что, если нет, у вас могут возникнуть проблемы при переносе этого кода на другие системы. Для Windows чтение, чтение, чтение и повторное включение - одно и то же, к Linux это не так.

1

Вы не можете изменить информацию заголовка, уже выведя свой HTML. Переместите HTML под заголовком заголовка PHP.

В документации говорится:

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
  • 0
    JS запускается, если вы раскомментируете первые три строки, я изменил код на этот и все еще ничего: function PassLogin () {// print '<script type = "text / javascript">'; // print 'alert ("Running PassLogin Function")'; // напечатать '</ script>'; $ _SESSION ["ReadingGrade"] = "Fail"; $ _SESSION ["WritingGrade"] = "Fail"; $ _SESSION ["MathGrade"] = "Fail"; $ _SESSION ["Grade"] = htmlentities ($ _ POST ['GradeTextBox']); $ _SESSION ["Name"] = htmlentities ($ _ POST ['GradeTextBox']); Заголовок ('Location: Reading.php'); }
0
<form action="" method="post">

Куда пойдет ваше сообщение?

Я предлагаю вам следующее:

1- Напишите свои PHP-коды на другой странице и назвали "login.php"

2- Напишите действие формы: <form action="login.php" method="post">

Ещё вопросы

Сообщество Overcoder
Наверх
Меню