Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> Sortowanie po kliknięciu w link., dane z bazy danych
progman
post
Post #1





Grupa: Zarejestrowani
Postów: 36
Pomógł: 0
Dołączył: 6.07.2006

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


Witam, mam problem z dołączeniem do mojego modułu sortowania wyników z bazy danych, chodzi mi że mam pola np, Imie, Nazwisko i dorobione strzałki sortujące rosnąco oraz malejąco przy oby dwóch kolumnach, teraz pytanie jak zrobić aby po kliknięciu w strzałke sie posortowało. Jak wykonać zapytanie którego chce użyć? Kod poniżej.

  1. <?php
  2. '<a href="osoby.php?order=nazwisko&order=desc">';
  3. ?>
Go to the top of the page
+Quote Post
Cysiaczek
post
Post #2





Grupa: Moderatorzy
Postów: 4 465
Pomógł: 137
Dołączył: 26.03.2004
Skąd: Gorzów Wlkp.




Oj. Widzę, że możemy się nieporozumieć sad.gif
taki kod jak podales jest błędny, bo masz
order=nazwisko
order=desc

Rozumiem, ze chciales po prostu w ten sposob zapytac sie bazy i dostac posortowane wyniki. Problem w tym, ze php przetwarza URL-e.
  1. <?php
  2. $_GET['order']='nazwisko';
  3. $_GET['order']='desc';
  4. ?>

Czy juz zauważyłeś błąd? 2x przypisujesz wartosc tej samej zmiennej. Tak być nie może.
osoby.php?pole=nazwisko&order=desc

W takim układzie możesz wstawić zmienne do zapytania SQL w taki saposób
  1. <?php
  2. "SELECT * FROM db_name ORDER BY $_GET['pole'] $_GET['order']"
  3. //oto twoje zapytanie: select * from db_name order by nazwisko desc
  4. ?>


--------------------
To think for yourself you must question authority and
learn how to put yourself in a state of vulnerable, open-mindedness;
chaotic, confused, vulnerability, to inform yourself.
Think for yourself. Question authority.
Go to the top of the page
+Quote Post
TomASS
post
Post #3





Grupa: Zarejestrowani
Postów: 1 660
Pomógł: 13
Dołączył: 9.06.2004
Skąd: Wrocław i okolice

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


Po pierwsze primo, muszisz troszkę przerobić linka:
  1. <?php'<a href="osoby.php?order=nazwisko&order_by=desc">';?>


po drugie musisz się troszkę zabezpieczyć:

  1. <?php
  2. $odrder = mysql_escape_string($_GET['order']);
  3. $odrder_by = mysql_escape_string($_GET['order_by']);
  4. ?>



  1. SELECT * FROM tabela WHERE warunki ORDER BY '$order' $order_by;



-------------------------------------------------------edit------------------------------------------------
szkoda, że forum nie pokazuje czasu napisania odpowiedzi z dokładnością co do sekundy tongue.gif

Ten post edytował TomASS 14.07.2006, 08:54:36


--------------------
Go to the top of the page
+Quote Post
Thaal
post
Post #4





Grupa: Zarejestrowani
Postów: 31
Pomógł: 0
Dołączył: 1.06.2003

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


ech...

po pierwsze - zdecyduj się co chcesz mieć podpięte pod zmienną order - "nazwisko" czy "desc"

możesz zrobić coś takiego:

  1. <?php
  2. '<a href="osoby.php?order1=nazwisko&order2=desc">';
  3. ?>


a później formułując zapytanie SQL:
  1. <?php
  2.  
  3. $sql = "select * from nazwiska";
  4.  
  5. if((isset($_GET['order2']) && (isset($_GET['order1']))
  6. {
  7.  
  8.  $zm1 = mysql_escape_string($_GET['order1']);
  9.  
  10.  if($_GET['order2'] == 'desc')
  11.  {
  12. $sql .= " order by ".$zm1." DESC ";
  13.  } else {
  14. $sql .= " order by ".$zm1." ASC";
  15.  }
  16. }
  17. ?>



---
znaczy sięjakies zawody? konkurs??

Ten post edytował Thaal 14.07.2006, 09:01:38
Go to the top of the page
+Quote Post
Ja_Szczur
post
Post #5





Grupa: Zarejestrowani
Postów: 115
Pomógł: 0
Dołączył: 4.12.2005
Skąd: Strzyżów

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


to samo, trochę bezpieczniej:

  1. <?php
  2. $fields = array( 'imie', 'nazwisko', ... ); // lista dostępnych pól
  3.  
  4. $field = in_arrray( $_GET['field'] , $fields ) ? $_GET['field'] : 'id' ; // id - domyślnie
  5. $order = $_GET['order'] == 'desc' ? 'desc' : 'asc' ; // asc - domyślnie
  6.  
  7. $sql = 'SELECT * FROM `tabela` ORDER BY '.$field.' '.$order ;
  8. ?>


---
@TomASS: dokładnie biggrin.gif
i tak się spóźniłem :]


--------------------
"No bo z fasolą to człowiek przynajmniej wie, na czym stoi..."
Pomniejsze bóstwa, Terry Pratchett

php :*
Go to the top of the page
+Quote Post
progman
post
Post #6





Grupa: Zarejestrowani
Postów: 36
Pomógł: 0
Dołączył: 6.07.2006

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


No coś jest nie tak, bo jak wrzucam kod to nie wyświetla mi tabeli ani żadnych danych, dopisuję że działam na bazie POSTGRESQL.
Go to the top of the page
+Quote Post
Thaal
post
Post #7





Grupa: Zarejestrowani
Postów: 31
Pomógł: 0
Dołączył: 1.06.2003

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


sprawdź jakie zapytanie jest generowane i wysyłane do Postgresa przez php
Go to the top of the page
+Quote Post
progman
post
Post #8





Grupa: Zarejestrowani
Postów: 36
Pomógł: 0
Dołączył: 6.07.2006

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


$sql = 'SELECT * FROM osoby_data ORDER BY '.$field.' '.$order' ;
Go to the top of the page
+Quote Post
Thaal
post
Post #9





Grupa: Zarejestrowani
Postów: 31
Pomógł: 0
Dołączył: 1.06.2003

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


po $order nie powinno być tego -> '


linia powinna wyglądać tak:


  1. <?php
  2. $sql = 'SELECT * FROM osoby_data ORDER BY '.$field.' '.$order;
  3. ?>


Ten post edytował Thaal 14.07.2006, 09:35:22
Go to the top of the page
+Quote Post
progman
post
Post #10





Grupa: Zarejestrowani
Postów: 36
Pomógł: 0
Dołączył: 6.07.2006

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


Cytat(Thaal @ 14.07.2006, 10:34 ) *
po $order nie powinno być tego -> '
linia powinna wyglądać tak:
  1. <?php
  2. $sql = 'SELECT * FROM osoby_data ORDER BY '.$field.' '.$order;
  3. ?>


Mimo wszystko dalej kicha, nic się nie wyświetla.
Go to the top of the page
+Quote Post
nospor
post
Post #11





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




zadam glupio-mądre pytanie:
Czy ty oprocz tej jednej linijki co ci napisali masz jeszcze cos w kodzie?
Jesli tak: pokaz nam
jesli nie: no to nic dziwnego ze ci sie nic nie wyswietla smile.gif


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
progman
post
Post #12





Grupa: Zarejestrowani
Postów: 36
Pomógł: 0
Dołączył: 6.07.2006

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


Proszę bardzo winksmiley.jpg

  1. <?php
  2. include ("config.php");
  3. include ("baza.php");
  4. include ("modol_osoby2.php");
  5.  
  6.  
  7. print '';
  8.  
  9. $tab_data[0][1]='id';
  10. $tab_data[0][2]='Szczegóły';
  11.  
  12. $tab_data[1][1]='nazwisko';
  13. $tab_data[1][2]='Nazwisko <a href="osoby.php?order1=nazwisko&order2=desc"><IMG SRC="images/str1.jpeg">';
  14.  
  15. $tab_data[2][1]='imie';
  16. $tab_data[2][2]='Imię <a href="osoby.php?pole=nazwisko&order=desc"><IMG SRC="images/str1.jpeg">';
  17.  
  18. $tab_data[3][1]='nr_ewid';
  19. $tab_data[3][2]='Nr Ewid. <IMG SRC="images/str1.jpeg">';
  20.  
  21. $tab_data[4][1]='id_stanowiska';
  22. $tab_data[4][2]='ID Stanowiska <IMG SRC="images/str1.jpeg">';
  23.  
  24.  
  25.  
  26. $tab_sql='SELECT * FROM osoby_data WHERE time_del is Null';
  27.  
  28.  
  29. $tab_cols=5;
  30.  
  31.  
  32. tabelka();
  33. ?>


I drugi modół: "modol_osoby2.php"
  1. <?php
  2.  
  3. function tabelka()
  4. {
  5.  global $tab_data, $tab_sql, $tab_cols, $HTTP_GET_VARS, $conn;
  6.  
  7.  //ilosc rekordow na stronie
  8.  $na_stronie=10;
  9.  
  10.  //ilosc rekordow
  11.  $res1=pg_query($conn, 'SELECT count(id) as ilosc FROM ('.$tab_sql.') ddd');
  12.  $ilosc_rek=pg_result($res1, 0, 'ilosc');
  13.  
  14.  //biezaca strona
  15.  if (isset($HTTP_GET_VARS['pg']))
  16.  {
  17. $pg=$HTTP_GET_VARS['pg'];
  18.  }
  19.  else
  20.  {
  21. $pg=0;
  22.  }
  23.  
  24.  //rekordy dla biezacej strony
  25.  $res2=pg_query($conn, $tab_sql.' LIMIT '.$na_stronie.' OFFSET '.($pg * $na_stronie));
  26.  
  27.  if ($pg*$na_stronie>=$ilosc_rek)
  28.  {
  29. echo "Strona poza zakresem<br>";
  30.  }
  31.  else
  32.  {
  33.  
  34.  
  35. //naglowki tabeli
  36. echo "<table class='grid'><tr>";
  37. echo'<TR><TH colspan="6" scope="colgroup">Lista Osób</TH></TR>';
  38.  
  39. for ($x=0; $x<$tab_cols; $x++)
  40. {
  41.  echo "<th class='gridheader'>".$tab_data[$x][2]."</th>";
  42. }
  43.  
  44. echo "</tr>";
  45. //kolejne rekordy
  46. for ($y=0; ($y<$na_stronie) and ($pg*$na_stronie+$y<$ilosc_rek); $y++)
  47. {
  48.  echo "<tr>";
  49.  //kolejne kolumny
  50.  
  51. echo'<TD class="grids"><A href="osoba.php?id='.pg_result($res2, $y, $tab_data[0][1]).'">Szczegóły</a></td>';
  52.  
  53.  for ($x=1; $x<$tab_cols; $x++)
  54.  {
  55. echo "<td class='gridcell'>".pg_result($res2, $y, $tab_data[$x][1])."</td>";
  56.  }
  57.  
  58.  echo "</tr>";
  59.  
  60. }
  61.  
  62. echo "</table>";
  63.  }
  64. }
  65. ?>
Go to the top of the page
+Quote Post
nospor
post
Post #13





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Wiesz, bardziej mi chodzilo o ten kawalek, w ktorym wykorzystujesz to co ci powiedzieli w tym topicu. A ty zawaliles nas kupą kodu, w ktorym na dodatek nie ma nigdzie tego co ci tu mowiono.
Oszczędź więc nam czasu i podaj tylko niezbedny kawalek smile.gif


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Thaal
post
Post #14





Grupa: Zarejestrowani
Postów: 31
Pomógł: 0
Dołączył: 1.06.2003

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


1)
w tym fragmencie stosuj albo "order1" i "order2" albo "pole" i "order" - nazwy zmiennych muszą być takie same

  1. <?php
  2. $tab_data[1][1]='nazwisko';
  3. $tab_data[1][2]='Nazwisko <a href="osoby.php?order1=nazwisko&order2=desc"><IMG SRC="images/str1.jpeg">';
  4.  
  5. $tab_data[2][1]='imie';
  6. $tab_data[2][2]='Imię <a href="osoby.php?pole=nazwisko&order=desc"><IMG SRC="images/str1.jpeg">'
  7. ?>


2)
zapytanie (to chyba chodzi o to: $tab_sql='SELECT * FROM osoby_data WHERE time_del is Null' ) powinno na postgresie przejść - przed chwilą sprawdzałem (na v 8.1.3)
Go to the top of the page
+Quote Post
progman
post
Post #15





Grupa: Zarejestrowani
Postów: 36
Pomógł: 0
Dołączył: 6.07.2006

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


Thaal mam w ten sposób i nie wyświetla tabelki z wynikami tylko znika i 0 rezultatów

  1. <?php
  2. print '';
  3.  
  4. $tab_data[0][1]='id';
  5. $tab_data[0][2]='Szczegóły';
  6.  
  7. $tab_data[1][1]='nazwisko';
  8. $tab_data[1][2]='Nazwisko <a href="osoby.php?order1=nazwisko&order2=desc"><IMG SRC="images/str1.jpeg">';
  9.  
  10. $tab_data[2][1]='imie';
  11. $tab_data[2][2]='Imię';
  12.  
  13. $tab_data[3][1]='nr_ewid';
  14. $tab_data[3][2]='Nr ewid.';
  15.  
  16. $tab_data[4][1]='id_stanowiska';
  17. $tab_data[4][2]='ID Stanowiska';
  18.  
  19. $tab_sql='SELECT * FROM osoby_data WHERE time_del is Null';
  20.  
  21. if((isset($_GET['order2']) && (isset($_GET['order1']))
  22. {
  23.  
  24.  $zm1 = ($_GET['order1']);
  25.  
  26.  if($_GET['order2'] == 'desc')
  27.  {
  28. $tab_sql .= " order by ".$zm1." DESC ";
  29.  } else {
  30. $tab_sql .= " order by ".$zm1." ASC";
  31.  }
  32.  
  33. $tab_cols=5;
  34.  
  35. tabelka();
  36. ?>


Przy czym dodam że gdy nie mam kodu:
  1. <?php
  2. if((isset($_GET['order2']) && (isset($_GET['order1']))
  3. {
  4.  
  5.  $zm1 = ($_GET['order1']);
  6.  
  7.  if($_GET['order2'] == 'desc')
  8.  {
  9. $tab_sql .= " order by ".$zm1." DESC ";
  10.  } else {
  11. $tab_sql .= " order by ".$zm1." ASC";
  12.  }
  13. ?>

To w tedy jest OK, normalnie dostaje wyniki tworzy się tabela itp ale dalej nie ma funkcji sortowania. Jakieś sugestie macie? winksmiley.jpg
Go to the top of the page
+Quote Post
bendi
post
Post #16





Grupa: Zarejestrowani
Postów: 401
Pomógł: 5
Dołączył: 14.09.2003
Skąd: Wrocław

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


To taka mała uwaga, odsyłanie danych do serwera tylko po to żeby je posortować to nie jest najbardziej optymalne rozwiązanie - można spróbować tak:
http://bedkowski.pl/p/js/sorttable/

Mój się coś kaszani, ale jest fajna stronka: http://www.dhtmlgoodies.com/index.html?page=tableWidgets


--------------------
Go to the top of the page
+Quote Post
nospor
post
Post #17





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




jak na moj gust to ktos nie umie podomykac nawiasow { (
Kod
<?php
if((isset($_GET['order2']) && isset($_GET['order1']))
{

   $zm1 = ($_GET['order1']);

   if($_GET['order2'] == 'desc')
   {
      $tab_sql .= " order by ".$zm1." DESC ";
   } else {
      $tab_sql .= " order by ".$zm1." ASC";
   }
}
?>


@bendi a posortuj tak tablice ktora jest stronicowana smile.gif


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Thaal
post
Post #18





Grupa: Zarejestrowani
Postów: 31
Pomógł: 0
Dołączył: 1.06.2003

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


jej... tato...

tu jest namieszane z nawiasami

powinno być:

  1. <?php
  2. if((isset($_GET['order2'])) && (isset($_GET['order1'])))
  3. {
  4.  $zm1 = ($_GET['order1']);
  5.  if($_GET['order2'] == 'desc')
  6.  {
  7. $tab_sql .= " order by ".$zm1." DESC ";
  8.  } else {
  9. $tab_sql .= " order by ".$zm1." ASC";
  10.  }
  11. }
  12. ?>
Go to the top of the page
+Quote Post
progman
post
Post #19





Grupa: Zarejestrowani
Postów: 36
Pomógł: 0
Dołączył: 6.07.2006

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


Niestety nic nie dało, wciąż 0 rezultatów, jaka może być tego przyczyna?
Go to the top of the page
+Quote Post
Thaal
post
Post #20





Grupa: Zarejestrowani
Postów: 31
Pomógł: 0
Dołączył: 1.06.2003

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


hmm.. strzelam - stara wersja php

bo widziałem ze deklarujesz $HTTP_GET_VARS jako zmienną globalną, a to było stosowane bardzo dawno temu. zamień $_GET na $HTTP_GET_VARS.

Ten post edytował Thaal 14.07.2006, 11:15:36
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
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: 19.08.2025 - 04:51