Mam mały problem ze stronicowaniem. Otóż mam formularz, którego dane są przesyłane formą POST. Wyniki są zapisywane w oddzielnym pliku, gdzie istnieje mozliwość ich posortowania. Jeśli liczba wyników przekroczy ustaloną wartość (w moim przypadku 25) plik z wynikami jest dzielony na cześci poprzez stronicowanie. Odbywa się to za pomocą metody GET.
Problem polega na tym, że sortowanie zawsze przyjmuje te samo kryterium sortowania(te, które jest pierwsze na liście), niezależnie od wyboru.
Oto mój kod:
'imie_asc' => $_POST['imie_asc'], 'imie_desc' => $_POST['imie_desc'], 'nazwisko_asc' => $_POST['nazwisko_asc'], 'nazwisko_desc' => $_POST['nazwisko_desc'], 'miejsc_asc' => $_POST['miejsc_asc'], 'miejsc_desc' => $_POST['miejsc_desc'], 'pkt_asc' => $_POST['pkt_asc'], 'pkt_desc' => $_POST['pkt_desc'], 'program_asc' => $_POST['program_asc'], 'program_desc' => $_POST['program_desc'] ); ); $query_ask = 'SELECT COUNT(*) AS `Ilosc_ucz` FROM `Uczestnicy`'; $strona = $strona > $ilosc_stron ? $ilosc_stron : $strona; echo ' <div class="sortuj"> <form method="POST" action="index.php?dzial=panel&link=edit_member">Sortuj według: <select name="action"> <option name="imie_asc" value="' . $formdata['imie_asc'] . '">Imienia rosnąco</option> <option name="imie_desc" value="' . $formdata['imie_desc'] . '">Imienia malejąco</option> <option name="nazwisko_asc" value="' . $formdata['nazwisko_asc'] . '">Nazwiska rosnąco</option> <option name="nazwisko_desc" value="' . $formdata['nazwisko_asc'] . '">Nazwiska malejąco</option> <option name="miejscowosc_asc" value="' . $formdata['miejsc_asc'] . '">Miejscowości rosnąco</option> <option name="miejscowosc_desc" value="' . $formdata['miejsc_desc'] . '">Miejscowości malejąco</option> <option name="pkt_asc" value="' . $formdata['pkt_asc'] . '">Punktu rosnąco</option> <option name="pkt_desc" value="' . $formdata['pkt_desc'] . '">Punktu malejąco</option> <option name="program_asc" value="' . $formdata['program_asc'] . '">Programu rosnąco</option> <option name="program_desc" value="' . $formdata['program_desc'] . '">Programu malejąco</option> </select>'; $sql = 'SELECT * FROM `Uczestnicy`, `Ulice`, `Miejscowosc`, `Program` WHERE `ID_Ulica` = `Ulica_ID` AND `ID_Miejsc` = `Miejsce_ID` AND `ID_Program` = `Program_ID` ORDER BY '; switch ($_POST['action']) { // 4 otwarty case $formdata['imie_asc']: $sql .= 'Imie ASC'; break; case $formdata['imie_desc']: $sql .= 'Imie DESC'; break; case $formdata['nazwisko_asc']: $sql .= 'Nazwisko ASC'; break; case $formdata['nazwisko_desc']: $sql .= 'Nazwisko DESC'; break; case $formdata['miejsc_asc']: $sql .= 'Nazwa_miejsc ASC'; break; case $formdata['miejsc_desc']: $sql .= 'Nazwa_miejsc DESC'; break; case $formdata['pkt_asc']: $sql .= 'ID_Pkt ASC'; break; case $formdata['pkt_desc']: $sql .= 'ID_Pkt DESC'; break; case $formdata['program_asc']: $sql .= 'Nazwa_programu ASC'; break; case $formdata['program_desc']: $sql .= 'Nazwa_programu DESC'; break; default: $sql .= 'Nazwisko ASC'; break; } // 4 zamknięty $sql .= ' LIMIT '.(($strona - 1) * 25).', 25'; // stronicowanie echo '<input type="submit" value="Sortuj" class="button_sortuj"> </form> </div>'; );
Wg mnie błąd leży w instrukcji switch. Ale nie wiem, w jaki sposób mam ją zmienić.
Chyba, że ktoś zna lepszy sposób, aby zrobić sortowanie (bez użycia switch).
Widzę, że nikt nie kwapi się z odpowiedzią.