2016-07-07 7 views
2

IF文がtrueの場合、別のページにユーザーを誘導する最適な方法は何ですか?私はページを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

ヘッダがすでに送信された場合は、データフローが開始された後、PHPはすでにデフォルトのヘッダを設定していたので、ヘッダは(、設定することができないので、例えばあなたが、その後、ヘッダは動作しません前にecho何かを持っていますあなたのために)。したがって、この場合はそうですが、私はリダイレクトを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'); 
関連する問題