使用php将用户指向另一个页面

时间:2016-07-07 04:41:24

标签: php mysql

在IF语句为真的情况下,将用户引导到另一个页面的最佳方法是什么。我希望页面使用PHP将用户引导到另一个页面,当运行IF语句时,我厌倦了这个但它不起作用?

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

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

e.preventDefault()

1 个答案:

答案 0 :(得分:2)

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

PHP Docs

  

请记住,在任何实际输出之前必须调用header()   通过普通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');