2016-07-07 1 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

첫 번째 줄로 헤더를 이동하고 작동하는지 확인한 다음 다른 방법을 통해 내 대답을 따르고 자바 스크립트 대체 기능을 사용해보십시오. 헤더를 이미 보낸 경우 일반적으로 헤더 위치 문제가 발생합니다. – Iceman

+0

[PHP에서 "헤더가 이미 전송되었습니다"오류를 해결하는 방법] (http://stackoverflow.com/questions/8028957/how-to-fix-headers-already-sent-error-in-php) – Qirel

답변

2

헤더가 데이터 흐름이 시작된 후 PHP는 이미 기본 헤더를 설정 한 것 때문에 헤더가 (설정되지 않을 수 있기 때문에 예를 들어 당신이 다음 헤더가 작동하지 않습니다 전에 echo 무언가가 이미 전송 된 경우 당신을 위해). 그래서,이 경우에 그렇다면 자바 스크립트를 사용하여 리디렉션을 수행합니다.

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'); 
관련 문제