Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Nie odczytuje zmiennej $orderby...
Forum PHP.pl > Forum > Przedszkole
JamalBIG
Witam

Mam kod ktory dzieli mi wynik na kilka stron z piecioma rekordami. Wszystko dziala poprawnie do momentu kiedy chce zeby sortowanie bylo np. wg daty, poprostu nie chce oczytywac mi zmiennej $orderby przy pobieraniu rekordow z bazy danych.

Kod ktory mam na stronie glownej:
  1. <?php
  2. list($pagertop, $pagerbottom, $limit) = pager(5, $count, "mytorrents.php?");
  3. $sql = "SELECT A.*, IF(A.numratings < $minvotes, NULL, ROUND(A.ratingsum / A.numratings, 1)) AS rating, B.name AS cat_name, B.image AS cat_pic FROM torrent_torrents A 
    L
  4. FT JOIN torrent_categories B ON A.category = B.id ORDER BY $orderby $limit";
  5. $res = $db->sql_query($sql) or bterror($sql);
  6.  
  7. print($pagertop);
  8. ?>


Kod z funkcja w oddzielnym pliku:
  1. <?php
  2. function pager($rpp, $count, $href, $opts = array()) {
  3. $pages = ceil($count / $rpp);
  4.  
  5. if (!$opts["lastpagedefault"])
  6. $pagedefault = 0;
  7. else {
  8. $pagedefault = floor(($count - 1) / $rpp);
  9. if ($pagedefault < 0)
  10. $pagedefault = 0;
  11. }
  12.  
  13. if (isset($_GET["page"])) {
  14. $page = 0 + $_GET["page"];
  15. if ($page < 0)
  16. $page = $pagedefault;
  17. }
  18. else
  19. $page = $pagedefault;
  20.  
  21. $pager = "";
  22.  
  23. $mp = $pages - 1;
  24. $as = "<b>&lt;&lt;&nbsp;Poprzednia</b>";
  25. if ($page >= 1) {
  26. $pager .= "<a href=\"modules.php?name=Bittorrent&page=" . ($page - 1) . "&orderby=$orderby\">";
  27. $pager .= $as;
  28. $pager .= "</a>";
  29. }
  30. else
  31. $pager .= $as;
  32. $pager .= "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;";
  33. $as = "<b>Nastepna&nbsp;&gt;&gt;</b>";
  34. if ($page < $mp && $mp >= 0) {
  35. $pager .= "<a href=\"modules.php?name=Bittorrent&page=" . ($page + 1) . "&orderby=$orderby\">";
  36. $pager .= $as;
  37. $pager .= "</a>";
  38. }
  39. else
  40. $pager .= $as;
  41.  
  42. if ($count) {
  43. $pagerarr = array();
  44. $dotted = 0;
  45. $dotspace = 3;
  46. $dotend = $pages - $dotspace;
  47. $curdotend = $page - $dotspace;
  48. $curdotstart = $page + $dotspace;
  49. for ($i = 0; $i < $pages; $i++) {
  50. if (($i >= $dotspace && $i <= $curdotend) || ($i >= $curdotstart && $i < $dotend)) {
  51. if (!$dotted)
  52. $pagerarr[] = "...";
  53. $dotted = 1;
  54. continue;
  55. }
  56. $dotted = 0;
  57. $start = $i * $rpp + 1;
  58. $end = $start + $rpp - 1;
  59. if ($end > $count)
  60. $end = $count;
  61. $text = "$start&nbsp;-&nbsp;$end";
  62. if ($i != $page)
  63. $pagerarr[] = "<a href=\"modules.php?name=Bittorrent&page=$i&orderby=$orderby\">$text</a>";
  64. else
  65. $pagerarr[] = "<b>$text</b>";
  66. }
  67. $pagerstr = join(" | ", $pagerarr);
  68. $pagertop = "<p align=\"center\">$pager<br />$pagerstr</p>\n";
  69. $pagerbottom = "<p align=\"center\">$pagerstr<br />$pager</p>\n";
  70. }
  71. else {
  72. $pagertop = "<p align=\"center\">$pager</p>\n";
  73. $pagerbottom = $pagertop;
  74. }
  75.  
  76. $start = $page * $rpp;
  77.  
  78. return array($pagertop, $pagerbottom, "LIMIT $start,$rpp");
  79. }
  80. ?>


Bylbym wdzieczny za pomoc
Pozdrawiam
trucksweb
sprobuj dac do funkcji zmienna orderby:

Cytat
function pager($rpp, $count, $href, $opts = array(), $orderby)


//odpowiadam na szybko, bez glebszej analizy kodu
JamalBIG
Tez nic nie daje, probowalem wczesniej. Na stronie wywala mi komunikat:

Cytat
Error executing SQL Query SELECT A.*, IF(A.numratings < 1, NULL, ROUND(A.ratingsum / A.numratings, 1)) AS rating, B.name AS cat_name, B.image AS cat_pic FROM torrent_torrents A LEFT JOIN torrent_categories B ON A.category = B.id ORDER BY LIMIT 0,5
Error ID: 1064_btsqlerror3Something is wrong in your syntax obok 'LIMIT 0,5' w linii 1
strife
No to masz błąd w zapytaniu smile.gif Po linijce $sql daj echo $sql i przenalizuj sobie tego sql'a dokładnie np. w phpmyadmin'ie.

  1. <?php
  2. // ...
  3.  $sql = "SELECT A.*, IF(A.numratings < $minvotes, NULL, ROUND(A.ratingsum / A.numratings, 1)) AS rating, B.name AS cat_name, B.image AS cat_pic FROM torrent_torrents A 
    L
  4. FT JOIN torrent_categories B ON A.category = B.id ORDER BY $orderby $limit";
  5. echo $sql; // wynik skopiuj i przeanalizuj :)
  6. ?>
JamalBIG
No wlasnie chodzi o to ze mam ORDER BY LIMIT 0,5 czyli wpisana przezemnie zmienna $orderby nie jest czytana (mam ja wpisana w 'adresie strony' - ....&orderby=date ASC

Macie jeszcze jakies pomysly na rozwiazanie tego problemu?

Pozdrawiam
strife
No to prawdopodobnie masz register_globals na off (i bardzo dobrze), aby rozwiązać ten problem zamiast $orderby staraj się używać $_GET['orderby'], czyli:

  1. <?php
  2. $sql = "SELECT A.*, IF(A.numratings < $minvotes, NULL, ROUND(A.ratingsum / A.numratings, 1)) AS rating, B.name AS cat_name, B.image AS cat_pic FROM torrent_torrents A 
    L
  3. FT JOIN torrent_categories B ON A.category = B.id ORDER BY " . $_GET['orderby'] . " $limit";
  4. ?>


I obowiązkowo jak tak będziesz robił to przeczytaj temat o SQL Injections.
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.