2013-11-06 4 views
0

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

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

ответ

1

Есть несколько synthax и технические проблемы с этим кодом. В дополнение к what AlexP said вы должны заметить, что вы не можете отправлять заголовки, когда вы уже отправили какой-либо вывод. Заголовки должны быть отправлены до выхода, по той же причине вам нужно было положить ваш 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 это не так.

0
<form action="" method="post"> 

Где будет идти свои сообщения?

Я предложу вам это:

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

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

1

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

documentation говорит:

заголовка() должна вызываться перед любой фактический вывод направляется, либо с помощью обычных 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 
+0

JS работает, если вы раскомментировать первые три строки я изменил код этого и до сих пор ничего: функция PassLogin() \t \t \t { \t \t \t \t // печатаем «<тип скрипта =" текст/JavaScript "> '; \t \t \t \t // print 'alert («Запуск функции PassLogin»)'; \t \t \t \t // print ''; \t \t \t \t \t \t \t \t $ _SESSION [ "ReadingGrade"] = "Сбой"; \t \t \t \t $ _SESSION ["WritingGrade"] = "Fail"; \t \t \t \t $ _SESSION ["MathGrade"] = "Fail"; \t \t \t \t $ _SESSION ["Grade"] = htmlentities ($ _ POST ['GradeTextBox']); \t \t \t \t $ _SESSION ["Name"] = htmlentities ($ _ POST ['GradeTextBox']); \t \t \t \t Header ('Location: Reading.php'); \t \t \t} – Matt

Смежные вопросы