Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem z sortowaniem, błędy
Forum PHP.pl > Forum > Bazy danych > MySQL
e-konrad
Tabela wyświetla po 10 rekordów na stronie, chciałem dodać funkcję sortującą w nazwie kolumny która będzie sortować po nazwie z kolumny. No ale niestety coś jest źle (nie mam pojęcia gdzie) bo mam same błędy. Bardzo proszę o pomoc.
  1. <?  
  2. //sortowanie  
  3. $limit = 10;  
  4. $offset = isset($_GET['p']) ? ((int) $_GET['p']) * $limit : 0;  
  5.  $allowedC = array('lokal', 'pietro', 'metraz');  
  6. $allowedD = array('asc', 'desc');  
  7.  $orderBy = [url="http://pl.php.net/in_array"]in_array[/url]($_GET['orderBy'], $allowedC) ? $_POST['orderBy'] : $allowedC[0];  
  8. $dir = [url="http://pl.php.net/in_array"]in_array[/url]($_GET['dir'], $allowedD) ? $_GET['dir'] : $allowedD[0];  
  9.  
  10. $sql = "SELECT * FROM plany_wiosenna ORDER BY $orderBy $dir LIMIT $offset, $limit;";  
  11.  //A w zmiennej $nDir będziesz mial przeciwna wartosc dla $dir. Czyli jak w adresie masz asc to przyjmie ona desc i na odwrót  
  12. $nDir = $dir == 'asc' ? 'desc' : 'asc';  
  13. //Domyślne wartości, odpowiednio liczby rekordów na strone i przesunięcia  
  14. $count=10;  
  15. $offset=0;  
  16. //Pobranie danych z $_GET jezli ustawione  
  17. if(isset($_GET['count']))$count = $_GET['count'];  
  18. if(isset($_GET['offset']))$offset = $count*$_GET['offset']; //numer strony  
  19.    
  20. //Pobranie liczby rekordów  
  21. $sql = 'Select count(*) from plany_wiosenna';  
  22. $result = mysql_query($sql,$link);  
  23. $r = mysql_fetch_array($result);  
  24. //Liczba stron, użycie ceil - zaokrąglenie w górę, w celu zapewnienia, że żadna strona się nie straci  
  25. $pages = ceil($r[0]/$count);  
  26. //Pobranie odpowieniej paczki  
  27. $sql = 'Select * from plany_wiosenna Limit '.$count.' offset '.$offset.';';  
  28. $result = mysql_query($sql,$link);  
  29. ?>


Przepraszam że w dwóch postach ale się nie zmieściło.
  1. <?
  2. //Początek tabeli  
  3.    echo '<center><h2>Plany mieszkań osiedla Wiosenna</h2></center>';  
  4.    echo '<table cellpadding=\"2\" border=1 align=center width=80% id=tabela>';  
  5.    echo '<tr align=center>';  
  6.    echo '<td class=komorka><a href="view.php?sortby=lokal&dir=<?php echo $nDir; ?>">Lokal</a></td>';  
  7.    echo '<td class=komorka><a href="view.php?sortby=pietro&dir=<?php echo $nDir; ?>">Piętro</a></td>';  
  8.    echo '<td class=komorka><a href="view.php?sortby=metraz&dir=<?php echo $nDir; ?>">Metraż [m<sup>2</sup>]</a></td>';  
  9.    echo '<td class=komorka>Plan</td>';  
  10.    echo '<td class=komorka>Plan PDF</td>';  
  11.    echo '</tr>';  
  12.  //Pętla po wszystkich rekordach  
  13. while(($row=[url="http://pl.php.net/mysql_fetch_array"]mysql_fetch_array[/url]($result))!=NULL){  
  14. echo '<tr><td>'.$row['lokal'].'</td><td>'.$row['pietro']. '</td><td>'.$row['metraz'].'</td><td><a href=images/plany/'.$row['zdjecie'].'.jpg class=thickbox><img width=25 height=25 src=images/plany/'.$row['zdjecie'].'.jpg /></a></td><td><a href=images/plany/'.$row['pdf'].'.pdf >Pobierz</a></td></tr>';  
  15. }  
  16. echo '</table>';  
  17. //Pętla po stronach  
  18. echo '<p align=right style=margin-right:2cm;> Strona:';  
  19. for($i=0;$i<$pages;$i++){  
  20. //jeśli obecna strona, nie twórz linku do strony  
  21.  if($i*$count==$offset){  
  22. echo ' ['.$i.'] ';  
  23. }else{  
  24. echo '<a href="view.php?count='.$count.'&offset='.$i.'"> '.$i.' </a>';  
  25. }  
  26. }  
  27. echo '</p>';  
  28. ?>
bigZbig
Wyświetl sobie wygenerowane zapytanie sql - może dzięki temu zorientujesz się co jest nie tak, a jeśli nie to wklej tu to zapytanie, które otrzymujesz oraz strukturę tabeli "plany_wiosenna"
e-konrad
Nie wiem o jakie zapytanie chodzi. Pierwszy raz robię coś na bazie MySQL.
Oto struktura tabeli:
  1. CREATE TABLE plany_wiosenna (
  2. id int( 100 ) NOT NULL AUTO_INCREMENT ,
  3. lokal varchar( 4 ) NOT NULL DEFAULT '',
  4. pietro varchar( 2 ) NOT NULL DEFAULT '',
  5. metraz varchar( 5 ) NOT NULL DEFAULT '',
  6. zdjecie varchar( 10 ) NOT NULL DEFAULT '',
  7. pdf varchar( 10) NOT NULL DEFAULT '',
  8. PRIMARY KEY ( id )
  9. );
bigZbig
Zrób po prosu
Kod
$sql = "SELECT * FROM plany_wiosenna ORDER BY $orderBy $dir LIMIT $offset, $limit;";  
var_dump($sql);


I zobacz co się wyświetli
e-konrad
Tylko w którym miejscu mam to wstawić, bo tych zapytań $sql to mam już od groma:-(
Chyba sobie to daruje. To jest trudniejsze niż myślałem:-(
bigZbig
W miejscu w którym robisz sortowanie - zresztą napisałem Ci var_dump pod linią, pod którą masz to wstawić
e-konrad
Nad tabelą wyświetliło mi:
Kod
string(60) "SELECT * FROM plany_wiosenna ORDER BY lokal asc LIMIT 0, 10;"


Czy mógłby ktoś mi podpowiedzieć co z tym skryptem jest nie tak?
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.