Я только что изучал разбивку на страницы. У меня возникли проблемы с тем, чтобы он работал для результатов поиска. он правильно отображает первую страницу с правильным количеством ссылок, но нажатие на любую из ссылок (даже на странице 1) переходит на пустую страницу.
может кто-нибудь, пожалуйста, скажите мне, что я делаю неправильно:
Следующий код предназначен для нажатия кнопки поиска.
<?php include('includes/connect-db.php'); include('includes/functions.php'); if (isset($_GET['searchbtn'])){ $product=$_GET['products']; $status=$_GET['ticket_status']; $order_by=$_GET['order_by']; $ticket_type=$_GET['ticket_type']; #check if product has been selected if ($_GET['products'] == 'select'){ echo '<font class="error">  Please select a product to search.</font>'; }else{ if ($status == 'All' AND $order_by == 'All' AND $ticket_type == 'All' ){ $page_query="SELECT * FROM tickets WHERE product='$product' ORDER BY created DESC"; }elseif ($ticket_type == 'BOX'){ $page_query="SELECT * FROM tickets WHERE product='$product' AND status='$status' AND pbi <> '-' ORDER BY '$order_by' "; }elseif ($ticket_type == 'PVR'){ $page_query="SELECT * FROM tickets WHERE product='$product' AND status='$status' AND inc <> '-' ORDER BY '$order_by' "; }else{ $page_query="SELECT * FROM tickets WHERE product='$product' AND status='$status' ORDER BY created DESC"; } }#end of else $results_per_page=3; $result_set=pagination($results_per_page,$page_query); $query=$result_set['query']; $pages=$result_set['pages']; #SELECT, SHOW, DESCRIBE, EXPLAIN and other statements returning resultset. A resource on success or False on Error if (!empty($query)){ $result = mysqli_query($db,$query) or die( "My query ($query) generated an error: ".mysql_error()); $num_results = mysqli_num_rows($result); if ($num_results > 0){ displayTicket($result); if ($pages > 1){ echo '</br>'; for($i=1;$i<=$pages;$i++){ echo ' <a href="?page='.$i.'">'.$i.'</a> '; } } }else{ echo "  No Records found."; } }#query string is not empty } ?>
Я поставил код разбивки на страницы в отдельной функции:
function pagination($per_page, $pages_query){ include('includes/connect-db.php'); $pagination[]=array(); #total result count $total_result=mysqli_query($db,$pages_query); #ceil takes a decimal number and gives the nearest whole number $total=mysqli_num_rows($total_result); $pages = ceil($total / $per_page); $page = (isset($_GET['page'])) ? (int)$_GET['page'] : 1; $start = ($page - 1) * $per_page; $query = " LIMIT $start,$per_page"; $query = $pages_query.$query; $pagination['query'] = $query; $pagination['pages'] = $pages; return $pagination; }
вfunction pagination($per_page, $pages_query){ include('includes/connect-db.php'); $pagination[]=array(); #total result count $total_result=mysqli_query($db,$pages_query); #ceil takes a decimal number and gives the nearest whole number $total=mysqli_num_rows($total_result); $pages = ceil($total / $per_page); $page = (isset($_GET['page'])) ? (int)$_GET['page'] : 1; $start = ($page - 1) * $per_page; $query = " LIMIT $start,$per_page"; $query = $pages_query.$query; $pagination['query'] = $query; $pagination['pages'] = $pages; return $pagination; }
Примечание: привязка к страницам, связанная с другими страницами, терпит неудачу, когда я пытаюсь выполнить ее с помощью функции поиска. я попробовал это на странице, которая перечисляет информацию в таблице, и ссылки работают нормально.
Мне кажется, что проблема связана с информацией в ссылке: localhost/test/searchProductForm.php?page=1
сообщает searchProductForm, какую страницу отображать, но она не сообщает, что такое поисковая информация. Без этого ваша страница поиска не имеет понятия, что показывать. Попробуйте изменить ссылку для разбивки на страницы, чтобы включить всю информацию, содержащуюся в исходной ссылке поиска (например, ваши products
, параметры ticket_status
, order_by
и ticket_type
).
Я знаю, что это старый поток, но для тех, кто не может решить подобную проблему с использованием кода, описанного выше, это может быть связано с отсутствием session_start () в начале документа.
Я говорю это, потому что, хотя код пытается получить переменные сеанса, переданные операторами? Page = & products = etc в $ _GET, но они не извлекаются в переменные из URL-адреса, но вам нужно поместить session_start () в попрошайничество вашего PHP-документа для передачи информации из URL-адреса в строки.