Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Porcjowanie wyników PHP MySQL problem z przekazaniem zmiennych
Forum PHP.pl > Forum > Przedszkole
merys
witam

mam wyszukiwarkę która sprawdza zaznaczone lub wybrane opcje i wyświetla wynik z podziałem na strony. Problem polega na tym że działa to tylko przy pierwszym przekazaniu zmiennych. Generuje prawidłowo ilość stron odpowiednio do ilości rekordów ale po kliknięciu w link odrazu wyświetla wynik wszystkich stron i pokazuje ilość stron wszystkich rekordów a nie tylko dalszą część wyszukiwanych. Przekazywałem już zmienne POST i GET i efekt jest ten sam. Może ktoś ma pomysł jak to rozgryźć. poniżej plik z kodem :




search_advanced.php

  1. <?php
  2. if (!isset($_SESSION['check'])){
  3. $_SESSION['check'] = true;
  4. $_SESSION['adres_ip'] = $_SERVER['REMOTE_ADDR'];
  5. }
  6. if($_SESSION['adres_ip'] !== $_SERVER['REMOTE_ADDR']){
  7. echo 'Error: Próba przejęcia sesji';
  8. }
  9.  
  10. function pasek($rekordow,$na_stronie,$na_pasku,$skrypt,$s) {
  11. $stron = ceil($rekordow/$na_stronie);
  12. if ($s<1) $s=1;
  13. if ($s>$stron) $s=$stron;
  14. $koniec = $s+$na_pasku;
  15. if ($s<=$na_pasku) $koniec = $na_pasku*2+1;
  16. if ($koniec>$stron) $koniec = $stron;
  17. $start = $koniec-$na_pasku*2;
  18. if ($start<1) $start=1;
  19. if ($s>1) $p = "<a href='$skrypt".($s-1)."'>&lt;&lt;&lt;</a>";
  20. else $p = "<span style='color:gray'>&lt;&lt;&lt;</span>";
  21. if ($s<$stron) $n = "<a href='$skrypt".($s+1)."'>&gt;&gt;&gt;</a>";
  22. else $n = "<span style='color:gray'>&gt;&gt;&gt;</span>";
  23. for ($i=$start; $i<=$koniec; $i++) {
  24. if ($i==$s) $l .= "&nbsp;<span style='color:#cc0000;'><b>$i</b></span>&nbsp;";
  25. else $l .= "&nbsp;<a href='$skrypt$i'>$i</a>&nbsp;";
  26. }
  27. if ($rekordow<1) $wynik = "brak informacji spełniających kryteria wyszukiwania";
  28. else $wynik = "znalezionych: $rekordow, strona $s z $stron<br />";
  29. if ($stron>1) $wynik .= "$p&nbsp; - $l - &nbsp;$n";
  30. return $wynik;
  31. }
  32.  
  33. $s = ($_GET["s"]>1)?number_format($_GET["s"], 0, "", ""):1; // numer strony
  34. $na_stronie = 1; // liczba rekordow widocznych na stronie
  35. $na_pasku = 5; // liczba odpowiedzi/2 na pasku
  36. $skrypt = "search_advanced.php?post_code=".$_POST['post_code']."&fuel=".$_POST['fuel']."&s="; // skrypt do wysyłania danych
  37. ?>
  38.  
  39. <?
  40.  
  41.  
  42. $post_code = $_POST['post_code'];
  43. $make = $_POST['mid'];
  44. $model = $_POST['model'];
  45. $fuel = $_POST['fuel'];
  46. $param_w = '>=';
  47. $param_m = '<=';
  48.  
  49. if($_POST['age']=='up_to_1_year_old')
  50. { $age = $param_w." '2010'"; }
  51. if($_POST['age']=='up_to_2_years_old')
  52. { $age = $param_w." '2008'"; }
  53. if($_POST['age']=='up_to_3_years_old')
  54. { $age = $param_w." '2007'"; }
  55. if($_POST['age']=='up_to_4_years_old')
  56. { $age = $param_w." '2006'"; }
  57. if($_POST['age']=='up_to_5_years_old')
  58. { $age = $param_w." '2005'"; }
  59. if($_POST['age']=='up_to_7_years_old')
  60. { $age = $param_w." '2003'"; }
  61. if($_POST['age']=='up_to_10_year_old')
  62. { $age = $param_w." '2000'"; }
  63. if($_POST['age']=='over_10_years_old')
  64. { $age = '< 2000'; }
  65.  
  66. $szukaj=array();
  67.  
  68. if($_POST['post_code']<>"") $szukaj[] = "post_code LIKE '$post_code%'";
  69. if($_POST['mid']<>"") $szukaj[] = "make LIKE '$make%'";
  70. if($_POST['model']<>"") $szukaj[] = "model LIKE '$model%'";
  71. if($_POST['fuel']<>"") $szukaj[] = "fuel LIKE '$fuel%'";
  72. if($_POST['age']<>"") $szukaj[] = "age $age";
  73.  
  74. $pytanie = implode(" AND ", $szukaj);
  75.  
  76. if ($pytanie<>"") $pytanie = "WHERE $pytanie";
  77.  
  78.  
  79. $start = ($s-1)*$na_stronie;
  80.  
  81. $pytanie = [sql]"select SQL_CALC_FOUND_ROWS * from notice $pytanie LIMIT $start, $na_stronie";[/sql]
  82. //echo $pytanie;
  83.  
  84. $wynik =[sql] mysql_query($pytanie)or die (mysql_error());[/sql]
  85.  
  86. $rekordow = [sql]mysql_result(mysql_query("SELECT FOUND_ROWS()"),0);[/sql]
  87.  
  88. echo "<p style='text-align:center;'>";
  89. echo pasek($rekordow,$na_stronie,$na_pasku,$skrypt,$s);
  90. echo "</p>";
  91.  
  92. while ($rek = mysql_fetch_array($wynik))
  93. {
  94. echo "<div>".$rek['id_notice']."&nbsp;".$rek['make']."&nbsp;".$rek['model']."</div>";
  95. }
  96.  
  97.  
  98. ?>

pedro84
Moim zdaniem lepiej zrobić to z użyciem GET. W zapytaniu musisz ustalić LIMIT oraz OFFSET. Zagoogluj, zajrzyj do jakiejkolwiek klasy paginacji i zobaczysz jak mają to zrobione i sobie poradzisz.
merys
Użycie GET nie działa wogóle nie pobiera zmiennych. Co do paginacji to jak dla mnie czeski film. Przglądałem te klasy ale nie mam pojecia jak je zaimplementować do swojego kodu. sad.gif tak więc powrót do punktu wyjścia
mortus
nospor napisał małe co nieco na temat stronicowania i przekazywania danych wyszukiwania. Myślę, że znajdziesz tam rozwiązanie swojego problemu.
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.