Скрипт пагинации не работает с таблицами данных - PullRequest
0 голосов
/ 24 мая 2019

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

edit Я только что удалил все условные операторы и получил неопределенный индекс для всех моих переменных, которые я получаю методом POST. Это проблема, но до сих пор не знаю, что может быть решением для этого.

<?php

if (isset($_POST['search_btn'])) {
include_once "db_connect.php";

$from = $_POST['from'];
$where = $_POST['where'];
$date = $_POST['date'];
$type = $_POST['type'];
$proc_id = $_POST['proc_id'];

if(empty($from) || empty($where) || empty($date) || empty($type)){
header("Location: index.php?search=empty");
exit();
}else{
//define how many results you want per page
$results_per_page = 10;

//number of results stored in database
"SELECT * FROM proc WHERE p_from = '".$from."' and p_where = '".$where."' and type= '".$type."' ";

$result = mysqli_query($conn, $sql);
$number_of_results = mysqli_num_rows($result);

//determine number of total pages available
$number_of_pages = ceil($number_of_results/$results_per_page);

//determine which page number visitor is currently on
if (!isset($_GET['page'])) {
$page = 1;
} else {
$page = $_GET['page'];
}

//determine the SQL LIMIT starting number for the result on the displaying page
$this_page_first_result = ($page-1)*$results_per_page;

//retrive selected results from database and display them on page                                   $sql='SELECT * FROM proc LIMIT ' . $this_page_first_result . ',' .  $results_per_page;

$result = mysqli_query($conn, $sql);

while($rows = mysqli_fetch_array($result, MYSQLI_ASSOC)) {

echo '<tr onclick="content(\''. $rows['proc_id'] .'\')">';
echo "<td>" .$rows['p_name'] . " " . $rows['p_surname']. " </td>";
echo "<td>" .$rows['p_from']. "</td>";  
echo "<td>" .$rows['p_where']. "</td>";
echo "<td>" .$rows['p_date']. "</td>";  
echo "<td>" .$rows['price']. "</td>";   
echo "<td>" .$rows['type']. "</td>";    
echo "</tr>";

 }
}
//display the links to the pages
for ($page=1;$page<=$number_of_pages;$page++) {
echo '<a href="search.php?page=' . $page . '">' . $page . '</a> ';
                                        }

}else{
echo "Error!";
}

?>

1 Ответ

2 голосов
/ 24 мая 2019

Я просто собираюсь предположить, что первоначальное отображение работает, но что разбиение на страницы создает проблемы?

Вы используете значения POST для передачи данных из формы поиска в ваш код, однако,когда вы затем щелкаете по ссылкам на нумерацию страниц, вы переноситесь на страницу поиска и теряете эти значения.

Вы можете изменить URL-адрес следующей страницы на форму и передать каждое необходимое значение в качестве скрытого поля ввода.Однако у этого есть недостаток, заключающийся в том, что когда вы нажимаете кнопку «Назад» в своем браузере, он будет жаловаться и запрашивать повторную отправку данных формы.

Другим решением будет сохранение этих параметров сообщения в сеансе, cookie, что бы на самом деле.Но, на мой взгляд, это тоже не слишком удачное решение этой проблемы.

Я бы предложил вам использовать параметры GET, а затем передать их на кнопку следующей страницы.Это дает дополнительное преимущество - возможность добавлять в закладки свои запросы.

Удачи!


В качестве дополнительного примечания вместо построения запроса с использованием конкатенации следует использовать подготовленные операторы.См. Документы для функций, которые я использовал в преобразованном коде ниже: https://www.php.net/manual/en/class.mysqli-stmt.php

    if ($statement = mysqli_prepare($conn, "SELECT * FROM proc WHERE p_from = ? AND p_where = ? AND type = ?")) {
        mysqli_stmt_bind_param($statement, "s", $from);
        mysqli_stmt_bind_param($statement, "s", $where);
        mysqli_stmt_bind_param($statement, "s", $type);

        $result = mysqli_stmt_get_result($statement);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...