2016-07-07 3 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. Это очень распространенная ошибка для чтения кода с включением или требованием, функциями или другой функцией доступа к файлам, а также пробелов или пустых строк , которые выводятся перед вызовом 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'); 
Смежные вопросы