Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] Sortowanie tabeli poprzez link
Forum PHP.pl > Forum > Przedszkole
pspgor
Witam z kolejnym problemem.

Mam taką tabelkę:

  1. echo "<table width='750' border='1' rules='all' title='Member list'>
  2. <tr>
  3. <td><center><b>L.p</b></center></td>
  4. <td><center><b>ID</b></center></td>
  5. <td><center><b><a href="">Nick</a></b></center></td>
  6. <td><center><b>E-mail</b></center></td>
  7. <td><center><b>Kasa</b></center></td>
  8. <td><center><b>Ranga</b></center></td>
  9. <td><center><b>Data rejestracji</b></center></td>
  10. </tr>
  11. ...........
  12. ...........
  13. ...........
  14. </table>";



i chciałbym, aby po kliknięciu na 'Nick' wykonywało daną rzecz w tym przypadku:

  1. $result = mysql_query('SELECT * FROM users ORDER BY nick')
Valdi_B
Zasada:
1. Treści nagłówków tabeli mają być linkami do "własnej" strony z query_string'iem (np.) ?sort=xxx (xxx - klucz sortowania). Nie musi to być nazwa kolumny, może być jakiś "symbol zastępczy".
2. W skrypcie zrób switch rozpoznający ten parametr.
3. Rozpoznaną wartość wstaw do kwerendy do frazy ORDER BY.
4. Generujesz stronę w oparciu o uzyskane wyniki.

Uwaga: Jeżeli w link'ach jako klucz sortowania użyjesz wprost nazw kolumn, to zanim wstawisz taki klucz do kwerendy, najpierw sprawdź czy poprawny.
Inaczej grozi SQL Injection.
pspgor
Dzięki za podpowiedzi! biggrin.gif

Jakbyś mógł jeszcze polecić jakiś przykład byłoby super? smile.gif

Jeśli nie to spoko i tak już pomogłeś biggrin.gif
sadistic_son
Linki do sortowania:
  1. Sortuj według:<a href="plik.php?sort=nick_asc">Nicka rosnąco</a>
  2. <a href="plik.php?sort=email_asc">E-maila rosnąco</a>
  3. <a href="plik.php?sort=nick_desc">Nicka malejąco</a>
  4. <a href="plik.php?sort=email_desc">E-maila malejąco</a>
Plik sortujący i wyswietlający wyniki:
  1. if(isset($_GET['sort'])){
  2. switch($_GET['sort']){
  3. case 'nick_asc':
  4. $sort='nick';
  5. $asc_desc='ASC';
  6. break;
  7. case 'nick_desc':
  8. $sort='nick';
  9. $asc_desc='DESC';
  10. break;
  11. case 'email_asc':
  12. $sort='emial';
  13. $asc_desc='ASC';
  14. break;
  15. case 'email_desc':
  16. $sort='emial';
  17. $asc_desc='DESC';
  18. break;
  19. default:
  20. $sort='id';
  21. $asc_desc='ASC';
  22. }
  23. }else{ $sort='id'; $asc_desc='ASC';}
  24.  
  25. $result=mysql_query("SELECT * FROM users ORDER BY $sort $asc_desc");
Mimo wszystko radze w linkach nie zawierac nazw kolumn z bazy, userowi taka wiedza jest zbedna a wrecz niebezpiecznie jest mu ja przekazywac. Dlatego zamiast email_asc lepiej uzyc np. mejlrosnaco. I po to wlasnie potem jest ten switch. Inaczej moznaby po prostu od razu GETa wpuscic do zapytania po zwyklym explode('_',$_GET['sort']);
pspgor
To już mi dało bardzo dużo do myślenia! biggrin.gif Wielkie dzięki wink.gif

Jeszcze jakbyś mógł napisać jak ten plik zapisać. BO nie za bardzo wiem jak to 'podpiąć' do tego <a href "">

Czyżby htaccess? Tym sposobem?
sadistic_son
Hmm nie bardzo rozumiem z czym masz dylemat. Na pewno zadne tam htaccess. Drugi kod to kod pliku plik.php ktory jest w linkach, czyli ten ktory wyswietla tabelke. A gdzie to masz to juz nie wiem, to tylko fragment kodu wiec wrzuc go gdzie chcesz smile.gif
pspgor
A więc mam tak:

plik sort.php:

  1. <?php
  2. echo '<h3>Lista użytkowników:</h3>';
  3. $result = mysql_query('SELECT * FROM users ORDER BY id');
  4. echo "<table width='750' border='1' rules='all' title='Member list'>
  5. <tr>
  6. <td><center><b>L.p</b></center></td>
  7. <td><center><b>ID</b></center></td>
  8. <td><center><b>Nick</b></center></td>
  9. <td><center><b>E-mail</b></center></td>
  10. <td><center><b>Kasa</b></center></td>
  11. <td><center><b>Ranga</b></center></td>
  12. <td><center><b>Data rejestracji</b></center></td>
  13. <td><center><b>Usuń</b></center></td>
  14. </tr>";
  15. $lp = 1;
  16. while($row = mysql_fetch_assoc($result)) {
  17.  
  18. echo '<tr><form action="userlist.php" method="post"><input type="hidden" name="id" value="'.$row['id'].'" />'."
  19. <td><center>".$lp."</center></td>
  20. <td><center>".$row['id']."</center></td>
  21. <td><center>".$row['nick']."</center></td>
  22. <td><center>".$row['email']."</center></td>
  23. <td><center>".$row['kasa']."<font color='green'>$</span></center></td>
  24. <td><center>";
  25. if($row['grupa'] == 4) {
  26. echo '<font color="black">User</font>'; }
  27. else if($row['grupa'] == 3) {
  28. echo '<font color="blue">V.I.P</font>';}
  29. else {
  30. echo '<font color="red">Admin</font>'; }
  31. echo "</center></td>
  32. <td><center>".date("d.m.Y, H:i", $row['data_rejestracji'])."</center></td>
  33. <td><center>";
  34. $lp++;
  35. ?>
  36. <input class="delete" type="submit" name="cmd" value="Usuń"></form>
  37.  
  38. <?php
  39. }
  40. echo "</center></td>
  41. </tr>";
  42.  
  43.  
  44. echo "</table>";
  45.  
  46. echo 'Sortuj według:<br /><a href="sort.php?sort=nick">Nicka rosnąco</a><br />
  47. <a href="sort.php?sort=email_asc">E-maila rosnąco</a><br />
  48. <a href="sort.php?sort=nick_desc">Nicka malejąco</a><br />
  49. <a href="sort.php?sort=email_desc">E-maila malejąco</a>';
  50. if(isset($_GET['sort'])){
  51. switch($_GET['sort']){
  52. case 'nick':
  53. $sort='nick';
  54. $asc_desc='ASC';
  55. break;
  56. case 'nick_desc':
  57. $sort='nick';
  58. $asc_desc='DESC';
  59. break;
  60. case 'email_asc':
  61. $sort='emial';
  62. $asc_desc='ASC';
  63. break;
  64. case 'email_desc':
  65. $sort='emial';
  66. $asc_desc='DESC';
  67. break;
  68. default:
  69. $sort='id';
  70. $asc_desc='ASC';
  71. }
  72. }else{ $sort='id'; $asc_desc='ASC';}
  73.  
  74. $result=mysql_query("SELECT * FROM users ORDER BY $sort $asc_desc");
  75.  
  76.  
  77. if(isset($_POST['cmd']) && isset($_POST['id']))
  78. {
  79. $sql = "DELETE FROM users WHERE id=$id";
  80.  
  81. $result = mysql_query($sql);
  82.  
  83. echo "Użytkownik został usunięty.<Br>";
  84. echo "<a href=\"index.php\">Powrót do panelu admina</a>.";
  85. }
  86. // koniec buforowania
  87.  
  88. ?>


Skasowałem niepotrzebne linijki kodu.

Dodam, że użyłem także twojego kodu do usuwania użytkowników i działa świetnie! wink.gif
citek10
Pozwolę zadac pytanie żeby nowego wątku nie rozpoczynać.
A jak zrobić, żeby po kolejnych kliknięciach na link sortowal ASC a po kolejnym DESC ?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.