Фильтрация результатов после начальной загрузки страницы - PullRequest
0 голосов
/ 20 апреля 2020

Я пытался заставить это работать некоторое время, и я чувствую, что я близок, просто не совсем там. У меня есть начальная страница, которая загружает все вымышленные резервирования для проекта, над которым я работаю. Как только страница загрузится, я хочу иметь возможность фильтровать эти результаты на той же странице, нажав кнопку фильтра. Я считаю, что запрос правильный, потому что он будет работать в mysql, но я просто не могу заставить его снова отфильтровать результаты после начальной загрузки страницы. Я попробовал несколько вещей из inte rnet, но я не могу вспомнить их все. Кроме того, я когда-либо брал только один класс в php, так что я уверен, что я сделал несколько глупостей. Любая помощь будет принята с благодарностью

<!--Filtering-->
        <?php  
        if(isset($_POST['submit'])){
        $filter = mysqli_real_escape_string($dbc, trim($_POST['filter']));
        $room_filter = mysqli_real_escape_string($dbc, trim($_POST['room_filter']));
        $past_or_future = mysqli_real_escape_string($dbc, trim($_POST['past_or_future']));
        $filter_start = mysqli_real_escape_string($dbc, trim($_POST['filter_start']));
        $filter_end = mysqli_real_escape_string($dbc, trim($_POST['filter_end']));
        $date_filter = "AND (start_date BETWEEN '".$filter_start."' AND '".$filter_end."')";
        echo $room_filter;
        echo '<br/>';
        echo $past_or_future;
        echo '<br/>';
        echo $filter_start;
        echo '<br/>';
        echo $filter_end;
        echo '<br/>';
        echo $date_filter;
        echo '<br/>';
        echo 


    $filter_query = "SELECT b.id, c.first_name, c.last_name, b.public_flag, b.event_name, b.start_date, b.end_date, b.req_start_date, b.req_end_date, r.room_name, b.status_flag
    FROM customer c
    INNER JOIN booking b
    ON c.id = b.customer_id
    INNER JOIN room r
    ON b.room_id = r.id WHERE $past_or_future $date_filter $room_filter ORDER BY $order_by LIMIT $start, $display";
    $results2 = @mysqli_query ($dbc, $filter_query);


    }
    //sticky for drop down form
    if (isset($_POST['room_filter']))
    {
        $room_filter_var = $_POST['room_filter'];
    }
    if (isset($_POST['past_or_future']))
    {
        $past_or_present_var = $_POST['past_or_future'];
    }



    ?>
    <div align='center'>
    <form method='post' action='reservations.php'>
        <select name='room_filter'>
            <option value=''>Room Name</option>
            <option <?php if($room_filter_var=="AND room_id=1")      echo 'selected="selected"'; ?> value="AND room_id=1">City Dome</option>
            <option <?php if($room_filter_var=="AND room_id=2")      echo 'selected="selected"'; ?> value="AND room_id=2">Crane Room</option>
            <option <?php if($room_filter_var=="AND room_id=3")      echo 'selected="selected"'; ?> value="AND room_id=3">Albatross Room</option>
            <option <?php if($room_filter_var=="AND room_id=4")      echo 'selected="selected"'; ?> value="AND room_id=4">Cormorant Room</option>
            <option <?php if($room_filter_var=="AND room_id=5")      echo 'selected="selected"'; ?> value="AND room_id=5">Egret Room</option>
            <option <?php if($room_filter_var=="AND room_id=6")      echo 'selected="selected"'; ?> value="AND room_id=6">Cyan Room</option>
            <option <?php if($room_filter_var=="AND room_id=7")      echo 'selected="selected"'; ?> value="AND room_id=7">Magenta Room</option>
        </select>
        <select name='past_or_future'>
            <option <?php if($past_or_present_var=="start_date >= NOW()")      echo 'selected="selected"'; ?> value="start_date >= NOW()">Future</option>
            <option <?php if($past_or_present_var=="start_date <= NOW()")      echo 'selected="selected"'; ?> value="start_date <= NOW()">Past</option>
        </select>
            <label for='start'>Start date:</label>
            <input type='date' id='start' name='filter_start' value='<?php echo $_POST['filter_start'];?>' min ='2019-01-01' max='2100-01-01'>
            <input type='date' id='end' name='filter_end' value='<?php echo $_POST['filter_end'];?>' min ='2019-01-01' max='2100-01-01'>

        <input type='submit'name='submit' value='Filter'>
    </form>
    </div>


        <?
    echo '<h2><center>Reservations</center></h2>';

//Determine the sort
//Default is by id
$sort= (isset($_GET['sort'])) ? $_GET['sort'] : 'id';

//Determine the sorting order:
switch ($sort){
    case 'first_name':
        $order_by = 'first_name ASC';
        break;
    case 'public_flag':
        $order_by = 'public_flag ASC';
        break;
    case 'event_date':
        $order_by = 'event_date ASC';
        break;
    case 'event_name':
        $order_by = 'event_name ASC';
        break;
    case 'room_name':
        $order_by = 'room_name ASC';
        break;
    case 'status_flag':
        $order_by = 'status_flag ASC';
        break;      
    default:
        $order_by = 'id ASC';
        $sort = 'id';
        break;
}   

//Number of records to show per page
$display= 25;

//Determine how many pages there are
if (isset($_GET['p']) && is_numeric($_GET['p'])) { //Already been determined
    $pages = $_GET['p'];
} else { //Need to determined
    //Count the number or records
    $q = "SELECT COUNT(id) FROM booking WHERE start_date >= NOW()";
    $r = @mysqli_query ($dbc, $q);
    $row = @mysqli_fetch_array ($r, MYSQLI_NUM);
    $records = $row[0];
    //Calculate the number of pages
    if ($records > $display) { //More than 1 page
        $pages = ceil ($records/$display);
    } else {
        $pages = 1;
    }
} 

//Determine where in the database to start returning results
if (isset($_GET['s']) && is_numeric($_GET['s'])) {
    $start = $_GET['s'];
} else {
    $start = 0;
}

// Make the query:

$query = "SELECT b.id, c.first_name, c.last_name, b.public_flag, b.event_name, b.start_date, b.end_date, b.req_start_date, b.req_end_date, r.room_name, b.status_flag
FROM customer c
INNER JOIN booking b
ON c.id = b.customer_id
INNER JOIN room r
ON b.room_id = r.id WHERE start_date >= NOW() ORDER BY $order_by LIMIT $start, $display";
$results = @mysqli_query ($dbc, $query);

// Close database connection_aborted
mysqli_close($dbc);

// Count the number of returned rows:
$num = mysqli_num_rows($results);

    //Num rows
//echo "<div align='center'>There are <font color='red' size='5'> <b>" . mysqli_num_rows($results2) . "</b> </font> total bookings.</div><br/><br/>";




    // Table title
    echo '<table cellpadding="5" cellspacing="0"  width="75%" align ="center">
    <tr class="border_bottom orange_box">
        <td align="center"><b><a href="reservations.php?sort=id">Id</a></b></td>
        <td align="left"><b><a href="reservations.php?sort=first_name">Customer Name</a></b></td>
        <td align="left"><b><a href="reservations.php?sort=public_flag">Event Type</a></b></td>
        <td align="left"><b><a href="reservations.php?sort=start_date">Event Date</a></b></td>
        <td align="left"><b><a href="reservations.php?sort=event_name">Event Name</a></b></td>
        <td align="left"><b><a href="reservations.php?sort=room_name">Room Name</a></b></td>
        <td align="left"><b>(Setup)  Time</b></td>
        <td align="left"><b>End Time  (Clean Up)</b></td>
        <td align="center"><b><a href="reservations.php?sort=status_flag">Status</a></b></td>
        </tr>';

    // Table creation

    while ($row = mysqli_fetch_array($results, MYSQLI_ASSOC)) {
    //event date
    $event = $row['start_date'];
    $eventdate = date('F d, Y', strtotime($event));
    //start time
    $starts = $row['req_start_date'];
    $starttime = date('g:i A', strtotime($starts));
    //setup time
    $setup = $row['start_date'];
    $setuptime = date('g:i A', strtotime($setup));
    //end time
    $end = $row['req_end_date'];
    $endtime = date('g:i A', strtotime($end));
    //cleanup time
    $cleanup = $row['end_date'];
    $cleanuptime = date('g:i A', strtotime($cleanup));

        if($row['public_flag'] == 1) {
        $public = 'Public Event';
        } else {
        $public = '';
        }
        if($row['status_flag'] == 1) {
        $image = '<img src="images/active.png">';
        } else {
        $image = '<img src="images/not_active.png">';
        }
        echo '<tr class="border_bottom">
        <td align="left"><a href="reservation_info.php?id=' .$row['id'] . '" class="id_link">' . $row['id'] . '</td>
        <td align="left">' . $row['first_name'] .' ' . $row['last_name'] . '</td>
        <td align="left">' . $public . '</td>
        <td align="left">' . $eventdate. '</td>
        <td align="left">' . $row['event_name'] . '</td>
        <td align="left">' . $row['room_name'] . '</td>
        <td align="left"> (' . $setuptime . ') '. $starttime . '</td>
        <td align="left">' . $endtime . ' (' . $cleanuptime . ')</td>
        <td align="center">' . $image. '</td>

        </tr>';
    }
        echo '</table><br/>';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...