PHP - Paginacja z zachowaniem wyniku wyszukiwania |
PHP - Paginacja z zachowaniem wyniku wyszukiwania |
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
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 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. |
|
|
29.05.2023, 05:37:42
Post
#2
|
|
Grupa: Zarejestrowani Postów: 1 843 Pomógł: 226 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 |
|
|
Wersja Lo-Fi | Aktualny czas: 15.05.2024 - 04:26 |