Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP] Sortowanie tabeli poprzez link
pspgor
post
Post #1





Grupa: Zarejestrowani
Postów: 81
Pomógł: 0
Dołączył: 27.02.2011

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


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')
Go to the top of the page
+Quote Post
Valdi_B
post
Post #2





Grupa: Zarejestrowani
Postów: 107
Pomógł: 30
Dołączył: 19.02.2011
Skąd: Warszawa

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


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.

Ten post edytował Valdi_B 2.03.2011, 18:34:04
Go to the top of the page
+Quote Post
pspgor
post
Post #3





Grupa: Zarejestrowani
Postów: 81
Pomógł: 0
Dołączył: 27.02.2011

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


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
Go to the top of the page
+Quote Post
sadistic_son
post
Post #4





Grupa: Zarejestrowani
Postów: 1 495
Pomógł: 245
Dołączył: 1.07.2009
Skąd: Bydgoszcz

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


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']);

Ten post edytował sadistic_son 2.03.2011, 19:23:59


--------------------
Uśpieni przez system, wychowani przez media,
Karmieni zmysłami, próżnymi żądzami...

-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
Jesteś zbyt leniwy, żeby się zarejestrować? Ja jestem zbyt leniwy aby Ci pomóc!
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
Go to the top of the page
+Quote Post
pspgor
post
Post #5





Grupa: Zarejestrowani
Postów: 81
Pomógł: 0
Dołączył: 27.02.2011

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


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?
Go to the top of the page
+Quote Post
sadistic_son
post
Post #6





Grupa: Zarejestrowani
Postów: 1 495
Pomógł: 245
Dołączył: 1.07.2009
Skąd: Bydgoszcz

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


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


--------------------
Uśpieni przez system, wychowani przez media,
Karmieni zmysłami, próżnymi żądzami...

-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
Jesteś zbyt leniwy, żeby się zarejestrować? Ja jestem zbyt leniwy aby Ci pomóc!
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
Go to the top of the page
+Quote Post
pspgor
post
Post #7





Grupa: Zarejestrowani
Postów: 81
Pomógł: 0
Dołączył: 27.02.2011

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


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
Go to the top of the page
+Quote Post
citek10
post
Post #8





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 9.06.2008

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


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 ?
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 Aktualny czas: 21.08.2025 - 15:16