Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> PHP - Paginacja z zachowaniem wyniku wyszukiwania
kamiltnt
post 28.05.2023, 15:01:49
Post #1





Grupa: Zarejestrowani
Postów: 1
Pomógł: 0
Dołączył: 28.05.2023

Ostrzeżenie: (0%)
-----


Witam wszystkich smile.gif

Mam pewien problem z doprowadzeniem do końca projektu strony który pobiera wyniki z bazy danych, wyświetla je w formie tabeli i całość jest poddawana paginacji.
Problem dotyczy wyszukiwania oraz filtrowania.
Filtrowanie mógłbym wykonać "łopatologicznie" przenosząc cały kod do nowej strony i wstawiając w odpowiednie miejsce zmienne natomiast z wyszukiwaniem już się tak nie da, przynajmniej nie kiedy zastosowana jest paginacja sad.gif
W skrócie - po przejściu do nowej podstrony (w paginacji) traci wyniki wyszukiwania i pojawia się błąd że nie odnaleziono podanej zmiennej (w tym przypadku $search).

Nie jestem specem od PHP więc przejrzałem kilkanaście poradników z użyciem $_SESSION jednak nie mogłem doprowadzić do cofnięcia wyszukiwanych wyników, tak aby lista pokazywała wszystko.

Powoli się gubię stąd pomysł na założenie nowego tematu.

Podgląd kodu:

CODE

<main>
<div id="results">
<form action="#" method="GET">
<input type="search" name="search">
<input type="submit" name="submit" value="Szukaj">
</form>
<table id="headlines">
<tr>
<th>RMA</th><th>Sklep</th><th>Rodzaj naprawy</th><th>Czas</th><th>Imię</th><th>Nazwisko</th><th>Nazwa produktu</th><th>Status</th><th>Pracownik</th><th>Szczegóły</th>
</tr>
</table>
<br>
<table>
<?php

// ŁĄCZENIE Z BAZĄ DANYCH //

include_once 'db.php';

// UZYSKANIE BIEŻĄCEGO NUMERU STRONY //

if (isset($_GET['page']) && $_GET['page']!="") {
$page = $_GET['page'];
} else {
$page = 1;
}

// CAŁKOWITA LICZBA REKORDÓW NA STRONIE //

$total_records_per_page = 10;

// USTAWIENIE WARTOŚCI OFFSET I INNYCH ZMIENNYCH //

$offset = ($page-1) * $total_records_per_page;
$previous_page = $page - 1;
$next_page = $page + 1;
$adjacents = "2";

// CAŁKOWITA LICZBA STRON DO PODZIAŁU //

$search = $_GET['search'];

$result_count = mysqli_query($conn,"SELECT COUNT(*) As total_records FROM `8ofert` WHERE shop LIKE '%$search%'");
$total_records = mysqli_fetch_array($result_count);
$total_records = $total_records['total_records'];
$number_of_page = ceil($total_records / $total_records_per_page);
$second_last = $number_of_page - 1; // total pages minus 1

// POBIERANIE OGRANICZONEJ LICZNY STRON //

$result = mysqli_query($conn, "SELECT * FROM `naprawy` WHERE shop LIKE '%$search%' LIMIT $offset, $total_records_per_page");


// PĘTLA PO REKORDACH Z BAZY DANYCH //

while ($row = mysqli_fetch_array($result)) {
echo '<tr>';
echo '<td class="rma">RMA/'.$row['ID'].'/'.date('Y').'</td>';
echo '<td class="shop">';

// WYŚWIETLANIE INFORMACJI O WYBRANYM SKLEPIE //

if ($row['shop']=="nowy") {
echo '<span class="ofert">'.$row['shop'].'</span>';
}
else {
echo $row['shop'];
};
echo '</td>';
echo '<td>'.$row['warranty_form'].'</td>';
echo '<td>';
include 'timer.php';
echo '</td>';
echo '<td>'.$row['name_text'].'</td>';
echo '<td>'.$row['surname_text'].'</td>';
echo '<td>'.$row['product_name'].'</td>';
echo '<td>'.$row['repair_status'].'</td>';
echo '<td>'.$row['serviceman'].'</td>';
echo '<td><a href="details.php?ID='.$row['ID'].'"><button id="details">Szczegóły</button></a></td>';
echo '</tr>';
}
mysqli_close($conn);
echo '</table>';
?>
</div>
<div class="center">
<div class="pagination">
<?php if($page <= 1)?>
<a <?php if($page > 1) {
echo "href='?page=$previous_page'";
}
?>><</a>
</li>
<?php
if ($number_of_page <= 10) {
for ($counter = 1; $counter <= $number_of_page; $counter++){
if ($counter == $page) {
echo "<a class='active'>$counter</a>";
}
else {
echo "<a href='?page=$counter'>$counter</a>";
}
}
}
elseif ($number_of_page > 10) {
if($page <= 4) {
for ($counter = 1; $counter < 8; $counter++) {
if ($counter == $page) {
echo "<a class='active'>$counter</a>";
}
else {
echo "<a href='?page=$counter'>$counter</a>";
}
}
echo "<a>...</a>";
echo "<a href='?page=$second_last'>$second_last</a>";
echo "<a href='?page=$number_of_page'>$number_of_page</a>";
}
elseif($page > 4 && $page < $number_of_page - 4) {
echo "<a href='?page=1'>1</a>";
echo "<a href='?page=2'>2</a>";
echo "<a>...</a>";
for ($counter = $page - $adjacents;
$counter <= $page + $adjacents;
$counter++)
{
if ($counter == $page) {
echo "<a class='active'>$counter</a>";
}
else {
echo "<a href='?page=$counter'>$counter</a>";
}
}
echo "<a>...</a>";
echo "<a href='?page=$second_last'>$second_last</a>";
echo "<a href='?page=$number_of_page'>$number_of_page</a>";
}
else {
echo "<a href='?page=1'>1</a>";
echo "<a href='?page=2'>2</a>";
echo "<a>...</a>";
for ($counter = $number_of_page - 6;
$counter <= $number_of_page;
$counter++)
{
if ($counter == $page) {
echo "<a class='active'>$counter</a>";
}
else {
echo "<a href='?page=$counter'>$counter</a>";
}
}
}
}
?>
<?php if($page >= $number_of_page) {} ?>
<a <?php if($page < $number_of_page) {
echo "href='?page=$next_page'";
} ?>>></a>
</div>
</div>
</main>


Z góry bardzo dziękuję za wszystkie sugestie.
Go to the top of the page
+Quote Post
Tomplus
post 29.05.2023, 05:37:42
Post #2





Grupa: Zarejestrowani
Postów: 1 828
Pomógł: 225
Dołączył: 20.03.2005
Skąd: Będzin

Ostrzeżenie: (0%)
-----


1. Staraj się formatować kod
wcięcia i inne rzeczy - łatwiej się czyta taki kod i znajduje błędy

2. Metoda
jeżeli masz coś takiego: echo "href='?page=$next_page'";
i coś takiego: ?page=$counter
To nie ma co się dziwić.

Więc albo w Cookies (albo w bazie przy sesji) zapisujesz przy pomocy JS co jest w schowku dla wyszukiwania, albo dorzucasz kolejne parametry do HREF URL co filtrujesz, co wyszukujesz. ?page=$next&search=drzwi&sort=ASC

Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 28.03.2024 - 19:20