2016-07-07 44 views
2

直接将用户导向另一个页面如果IF语句正确,将用户导向另一个页面的最佳方式是什么?我希望页面将用户引导到另一个页面使用PHP,当IF语句运行时,我厌倦了这一点,但它不工作?直接用户使用php

if (mysqli_num_rows ($result) > 0) 
    { 

    header('Location: exist.php'); 
    die(); 

    } 

以下是该页面的完整源代码。

<?php 

    // starts a session and checks if the user is logged in 
    error_reporting(E_ALL & ~E_NOTICE); 
    session_start(); 

    if (isset($_SESSION['id'])) { 
     $userId = $_SESSION['id']; 
     $username = $_SESSION['username']; 


    } else { 
     header('Location: index.php'); 
     die(); 

    } 

?> 



<!DOCTYPE html> 

<html lang="en"> 



    <head> 

    </head> 



    <body> 

     <p><span>Room No: </span><?php $room = $_SESSION['g']; 

       echo $room; // echo's room ?> 
     </p> 



     <p><span>Computer No: </span><?php 

       $select3 = $_POST['bike']; 
       echo $select3; 
       ?> 
     </p> 



     <p><span>Date: </span><?php $date = $_POST['datepicker']; 
       echo $date; // echo's date 
       ?> 
     </p> 



     <p><span>Start Session: </span> 
       <?php 
       if(isset($_POST['select1'])) { 
       $select1 = $_POST['select1']; 
       echo $select1; 
       echo ""; 
       } 
       else{ 
       echo "not set"; 
       } 
       ?> 
     </p> 

     <p><span>End Session: </span> 
       <?php 
       if(isset($_POST['select2'])) { 
       $select2 = $_POST['select2']; 
       echo $select2; 
       echo ""; 
       } 
       else{ 
       echo "not set"; 
       } 
       ?> 
     </p> 


     </div> 




     <div id="success"> 

<?php 

      $servername = "localhost"; 
      $name = "root"; 
      $password = "root"; 
      $dbname = "my computer"; 

      // Create connection 
      $conn = mysqli_connect($servername, $name, $password, $dbname); 
      // Check connection 
      if (!$conn) { 
       die("Connection failed: " . mysqli_connect_error()); 
      } 



$query = "SELECT * FROM `booked` WHERE 
     `date` = '{$date}' AND 
     `computer_id` = '{$select3}' AND 
     `start_time` = '{$select1}' AND 
     `end_time` = '{$select2}' AND 
     `room` = '{$room}' 
     "; 

      $result = mysqli_query($conn, $query); 



      if (mysqli_num_rows ($result) > 0) 
      { 

      header('Location: exist.php'); 
      die(); 

      } 




      else 
      { 
      $sql = "INSERT INTO booked (date, computer_id, name, start_time, end_time, room) 
       VALUES ('$date', '$select3', '$username', '$select1', '$select2', '$room')"; 



      if (mysqli_query($conn, $sql)) { 
       echo "New record created successfully"; 
       } else { 
       echo "Error: " . $sql . "<br>" . mysqli_error($conn); 
       } 

      mysqli_close($conn); 

      } 
      ?> 

     </div> 



     <form action="user.php"> 
      <input type="submit" value="book another" class="bookanother" /> 
     </form> 



     </div> 


    </body> 




</html> 
+0

它不工作的原因是因为'头()'函数必须在之前的任何输出发送到浏览器调用。 http://php.net/manual/en/function.header.php – mulquin

+0

尝试移动标题作为第一行,看看它的工作,否则按照我的答案,并尝试一个JavaScript后备。如果您已经发送标题,通常会发生标题位置问题。 – Iceman

+0

[如何修复]可能的PHP头文件已发送错误(http://stackoverflow.com/questions/8028957/how-to-fix-headers-already-sent-error-in-php) – Qirel

回答

2

如果头已经发送,例如你有之前那么头将无法正常工作echo东西,因为数据流开始后的头不能被设置,(因为PHP将已经设置默认标题为你)。所以,在这种情况下,如果是这样,我会使用javascript进行重定向。

PHP Docs

记住,标题()之前的任何实际的输出是 发送,或者通过正常的HTML标记,在一个文件中的空行,或从PHP必须被调用。 使用include或require, 函数或其他文件访问函数读取代码,并在调用header()之前输出空格或空行 是非常常见的错误。使用单个PHP/HTML文件时存在相同的问题 。

WORK-AROUND:这是一个我已经写了很久的函数,并且包含在控制器中。

 /** 
    * Safely redirect by first trying header method but if headers were 
    * already sent then use a <script> javascript method to redirect 
    * 
    * @param string 
    * @return null 
    */ 
    public function safeRedirect($new_url) { 
     if (!headers_sent()) { 
      header("Location: $new_url"); 
     } else { 
      echo "<script>window.location.href = '$new_url';</script>"; 
     } 
     exit(); 
    } 

添加功能,只需拨打:

safeRedirect('index.php');