Я пытался заставить это работать некоторое время, и я чувствую, что я близок, просто не совсем там. У меня есть начальная страница, которая загружает все вымышленные резервирования для проекта, над которым я работаю. Как только страница загрузится, я хочу иметь возможность фильтровать эти результаты на той же странице, нажав кнопку фильтра. Я считаю, что запрос правильный, потому что он будет работать в 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/>';