Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wyszkiwaka PHP i paginacja
Forum PHP.pl > Forum > Przedszkole
diamondking
Witam mam na stronię wyszukiwarkę użytkowników i paginację.
Wyszukiwarka działa na podstawie formularze, który wysyła dane metodą POST.
Pobiera wszystko ok i wyświetla odpowiednią ilość stron, ale kiedy wybiorę inną stronę
nie pokazuje już wyników bo strona się przeładowuje a nie wysyła już danych metodą POST.
Jak temu zapobiec by to działało smile.gif ?
nospor
1) Albo trzymaj dane wyszukiwania w sesji
2) Albo do paginacji dodawaj parametry wyszukiwania

Druga opcja najbardziej odpowiednia
Pyton_000
A czemu POSTem wysyłasz?
diamondking
1. Jak dodać parametry do paginacji tongue.gif

2. Próbowałem wysyłać GET'em oraz z sesjami ale niezbyt mi to działało biggrin.gif
nospor
ad1) Normalnie, jak kazda inna wartosc do get
twojastrona.pl?page=2&name=costam&surname=innecostam
diamondking
Metodą get to nie przejdzie to mój kod:

  1. if(isset($_POST['login'])){
  2.  
  3. $_POST['login'] = mysql_real_escape_string(htmlspecialchars($_POST['login']));
  4. $_POST['wiekod'] = mysql_real_escape_string(htmlspecialchars($_POST['wiekod']));
  5. $_POST['wiekdo'] = mysql_real_escape_string(htmlspecialchars($_POST['wiekdo']));
  6. $_POST['wojewodztwo'] = mysql_real_escape_string(htmlspecialchars($_POST['wojewodztwo']));
  7. $_POST['miasto'] = mysql_real_escape_string(htmlspecialchars($_POST['miasto']));
  8. $_POST['online'] = mysql_real_escape_string(htmlspecialchars($_POST['online']));
  9.  
  10. if($_POST['online']==1){
  11. $time = time() - 300;
  12. $online = "AND (`czas` > '".$time."')";
  13. }
  14.  
  15. if(!empty($_POST['wiekod']) || !empty($_POST['wiekdo'])) {
  16. if(empty($_POST['wiekod'])){
  17. $_POST['wiekod'] = 10;
  18. }
  19.  
  20. if(empty($_POST['wiekdo'])){
  21. $_POST['wiekdo'] = 100;
  22. }
  23.  
  24. $wiekmin = date("Y") - $_POST['wiekod'];
  25. $wiekmax = date("Y") - $_POST['wiekdo']-1;
  26. $wiek = "AND `rok` BETWEEN '".$wiekmax."' AND '".$wiekmin."'";
  27.  
  28. }
  29.  
  30. if($_POST['wojewodztwo'] != 0) {
  31. $region = "AND `wojewodztwo` = '".$_POST['wojewodztwo']."'";
  32.  
  33. }
  34.  
  35. if(!empty($_POST['miasto'])) {
  36. $miasto = "AND `miejscowosc` LIKE '%".$_POST['miasto']."%'";
  37.  
  38. }
  39.  
  40.  
  41.  
  42. $raw_results = mysql_query("SELECT * FROM users
  43. WHERE (`login` LIKE '%".$_POST['login']."%') $online $wiek $region $miasto ORDER BY id DESC");
  44. list($iloscWpisow) = mysql_fetch_row($raw_results);
  45. define('ILOSC_WYNIKOW_NA_STRONIE', 2);
  46. $SQL = "SELECT SQL_CALC_FOUND_ROWS * FROM users
  47. WHERE (`login` LIKE '%".$_POST['login']."%') $online $wiek $region $miasto ORDER BY id DESC LIMIT ".mysql_escape_string((int)$_GET['strona']*ILOSC_WYNIKOW_NA_STRONIE).",".ILOSC_WYNIKOW_NA_STRONIE;
  48. $wynik = mysql_query($SQL);
  49.  
  50. if(mysql_num_rows($wynik) > 0){
  51.  
  52. echo '<div class="row">';
  53.  
  54. while($results = mysql_fetch_array($wynik)){
  55.  
  56.  
  57.  
  58. $pobierzlink = mysql_fetch_array(mysql_query("SELECT * FROM galeria WHERE user_id='{$results['id']}' AND profilowe='1';"));
  59. if($pobierzlink['profilowe'] == 1) {
  60. $link = $pobierzlink['nazwa'];
  61. }else{
  62. $link = "img/nophoto.png";
  63. }
  64.  
  65. if(!empty($results['miesiac']) && !empty($results['dzien']) && !empty($results['rok'])){
  66.  
  67.  
  68. //date in mm/dd/yyyy format; or it can be in other formats as well
  69. $birthDate = $results['miesiac']."/".$results['dzien']."/".$results['rok'];
  70. //explode the date to get month, day and year
  71. $birthDate = explode("/", $birthDate);
  72. //get age from date or birthdate
  73. $wiek = (date("md", date("U", mktime(0, 0, 0, $birthDate[0], $birthDate[1], $birthDate[2]))) > date("md")
  74. ? ((date("Y") - $birthDate[2]) - 1)
  75. : (date("Y") - $birthDate[2]));
  76.  
  77. } else{
  78. $wiek = 'Nie podano';
  79. }
  80.  
  81. if(!empty($results['miejscowosc'])){
  82. $skad = $results['miejscowosc'];
  83. }else{
  84. $skad = 'Nie podano';
  85. }
  86.  
  87.  
  88. echo '
  89.  
  90. <div class="col-lg-3 col-xs-6">
  91. <div class="contact-box center-version">
  92.  
  93. <a href="profil.php?id='.$results['id'].'">
  94.  
  95. <img alt="image" class="img-circle" src="'.$link.'">
  96.  
  97.  
  98. <h3 class="m-b-xs"><strong>'.$results['login'].'</strong></h3>
  99.  
  100.  
  101. <address class="m-t-md">
  102. '.$wiek.'<br />
  103. '.$skad.'
  104. </address>
  105.  
  106. </a>
  107.  
  108.  
  109. </div>
  110. </div>
  111.  
  112.  
  113.  
  114. ';
  115.  
  116. }
  117. //Teraz wypadało by wyświetlić jakąś nawigację
  118. echo '
  119. </div>
  120. <div class="row" style="
  121. display: initial;
  122. ">
  123. <nav aria-label="Page navigation example " style="text-align: center;">
  124. <ul class="pagination">';
  125. //jesli nie jesteśmy na pierwszej stronie
  126. if($_GET['strona']>0){
  127. //wyswietlamy link do poprzedniej strony
  128. echo '<li class="page-item"><a class="page-link" href="szukaj.php?strona='.($_GET['strona']-1).'">Poprzednia</a></li>';
  129. }
  130.  
  131. for($i = 0;$i<=floor($iloscWpisow/ILOSC_WYNIKOW_NA_STRONIE);$i++){
  132. echo '<li class="page-item"><a class="page-link" href="szukaj.php?strona='.($i).'">'.($i+1).'</a></li>';
  133. }
  134. //jeśli nie jesteśmy na ostatniej stronie
  135. if($_GET['strona']<floor($iloscWpisow/ILOSC_WYNIKOW_NA_STRONIE)){
  136. //wyswietlamy link do nastepnej strony
  137. echo '<li class="page-item"><a class="page-link" href="szukaj.php?strona='.($_GET['strona']+1).'#">Następna</a></li>';
  138. }
  139. echo ' </ul>
  140. </nav>
  141. </div>';
  142. }else{
  143. echo '<div class="alert alert-warning" role="alert">
  144. Brak wyników
  145. </div>';
  146. }
  147. }
nospor
No i niby czemu nie przejdzie get? Strony masz linkami czyli GET wiec mozesz tam dodac to o czym mowilem.
A do wyszukiwania mozesz brac z $_REQUEST to ci bedzie bral i z get i z post

ps: tak na marginesie twoj kod jest dziurawy jak ser szwajcarski i uzywa od dawna juz wycofanego rozszerzenie mysql_
diamondking
Cytat(nospor @ 26.04.2018, 16:56:24 ) *
No i niby czemu nie przejdzie get? Strony masz linkami czyli GET wiec mozesz tam dodac to o czym mowilem.
A do wyszukiwania mozesz brac z $_REQUEST to ci bedzie bral i z get i z post

ps: tak na marginesie twoj kod jest dziurawy jak ser szwajcarski i uzywa od dawna juz wycofanego rozszerzenie mysql_


Nie ważne, że używa wycofanego rozszerzenia skoro działa tongue.gif
jakiś poradnik o $_REQUEST nigdy nie używałem biggrin.gif
nospor
request uzywasz dokladnie tak samo jako post czy get. DOKLADNIE tak samo...

Cytat
Nie ważne, że używa wycofanego rozszerzenia skoro działa
W sumie wiesz lepiej.
diamondking
Cytat(nospor @ 26.04.2018, 17:05:07 ) *
request uzywasz dokladnie tak samo jako post czy get. DOKLADNIE tak samo...

W sumie wiesz lepiej.


Nie wiem lepiej dlatego prosze o pomoc bo chyba po to powstało te forum tylko zdaje mi się, że tutaj każdy kto ma wiedzę woli się nią chwalić niżeli pomagać ;/
nospor
Przeciec ci caly czas pomagam. Nawet wskazuje ci luki w twoim systemie na co odpowiadasz ze skoro dziala to masz to w nosie. To co ty ode mnie jeszcze chcesz? Mam ci piwo i chipsu przyniesc?
diamondking
Cytat(nospor @ 26.04.2018, 17:07:24 ) *
Przeciec ci caly czas pomagam. Nawet wskazuje ci luki w twoim systemie na co odpowiadasz ze skoro dziala to masz to w nosie. To co ty ode mnie jeszcze chcesz? Mam ci piwo i chipsu przyniesc?


Wiem, że teraz na modzie jest PDO ale ja tego nie ogarniam i praca w starym systemie jest dla mnie łatwiejsza i działa więc nie będę sobie komplikować pracy jeszcze bardziej bo jestem amatorem.

Skoro według Ciebie da się to jakoś ogarnąć (w sensie dać zmienne w get przy paginacji) ale wysyłać formularz w post to możesz mi bardziej określić jak to zrobić biggrin.gif ?

Próbuję to zrobić na Twoim poradniku dot. przechowywania wartości w sesjach.
Ale np. mam użytkownika tester
wpiszę w pole nazwa tes
i wskazuje mi aż 3 strony przy ustawieniu 2 wyników na stronę
a w bazie mam tylko jednego spełniającego warunek w nazwie tes

  1. <?php
  2.  
  3. if(isset($_POST['login'])){
  4.  
  5. unset($_SESSION['logins']);
  6. unset($_SESSION['wiek']);
  7. unset($_SESSION['region']);
  8. unset($_SESSION['miasto']);
  9. unset($_SESSION['online']);
  10.  
  11.  
  12. $_POST['login'] = mysql_real_escape_string(htmlspecialchars($_POST['login']));
  13. $_POST['wiekod'] = mysql_real_escape_string(htmlspecialchars($_POST['wiekod']));
  14. $_POST['wiekdo'] = mysql_real_escape_string(htmlspecialchars($_POST['wiekdo']));
  15. $_POST['wojewodztwo'] = mysql_real_escape_string(htmlspecialchars($_POST['wojewodztwo']));
  16. $_POST['miasto'] = mysql_real_escape_string(htmlspecialchars($_POST['miasto']));
  17. $_POST['online'] = mysql_real_escape_string(htmlspecialchars($_POST['online']));
  18.  
  19. $_SESSION['logins'] = $_POST['login'];
  20.  
  21. if($_POST['online']==1){
  22. $time = time() - 300;
  23. $online = "AND (`czas` > '".$time."')";
  24. $_SESSION['online'] = $online;
  25. }
  26.  
  27. if(!empty($_POST['wiekod']) || !empty($_POST['wiekdo'])) {
  28. if(empty($_POST['wiekod'])){
  29. $_POST['wiekod'] = 10;
  30. }
  31.  
  32. if(empty($_POST['wiekdo'])){
  33. $_POST['wiekdo'] = 100;
  34. }
  35.  
  36. $wiekmin = date("Y") - $_POST['wiekod'];
  37. $wiekmax = date("Y") - $_POST['wiekdo']-1;
  38. $wiek = "AND `rok` BETWEEN '".$wiekmax."' AND '".$wiekmin."'";
  39. $_SESSION['wiek'] = $wiek;
  40.  
  41. }
  42.  
  43. if($_POST['wojewodztwo'] != 0) {
  44. $region = "AND `wojewodztwo` = '".$_POST['wojewodztwo']."'";
  45. $_SESSION['region'] = $region;
  46.  
  47. }
  48.  
  49. if(!empty($_POST['miasto'])) {
  50. $miasto = "AND `miejscowosc` LIKE '%".$_POST['miasto']."%'";
  51. $_SESSION['miasto'] = $miasto;
  52. }
  53.  
  54.  
  55. }
  56.  
  57.  
  58.  
  59. $raw_results = mysql_query("SELECT * FROM users
  60. WHERE (`login` LIKE '%".$_SESSION['logins']."%') {$_SESSION['online']} {$_SESSION['wiek']} {$_SESSION['region']} {$_SESSION['miasto']} ORDER BY id DESC");
  61. list($iloscWpisow) = mysql_fetch_row($raw_results);
  62. define('ILOSC_WYNIKOW_NA_STRONIE', 2);
  63. $SQL = "SELECT SQL_CALC_FOUND_ROWS * FROM users
  64. WHERE (`login` LIKE '%".$_SESSION['logins']."%') {$_SESSION['online']} {$_SESSION['wiek']} {$_SESSION['region']} {$_SESSION['miasto']} ORDER BY id DESC LIMIT ".mysql_escape_string((int)$_GET['strona']*ILOSC_WYNIKOW_NA_STRONIE).",".ILOSC_WYNIKOW_NA_STRONIE;
  65. $wynik = mysql_query($SQL);
  66.  
  67. if(mysql_num_rows($wynik) > 0){
  68.  
  69. echo '<div class="row">';
  70.  
  71. while($results = mysql_fetch_array($wynik)){
  72.  
  73.  
  74.  
  75. $pobierzlink = mysql_fetch_array(mysql_query("SELECT * FROM galeria WHERE user_id='{$results['id']}' AND profilowe='1';"));
  76. if($pobierzlink['profilowe'] == 1) {
  77. $link = $pobierzlink['nazwa'];
  78. }else{
  79. $link = "img/nophoto.png";
  80. }
  81.  
  82. if(!empty($results['miesiac']) && !empty($results['dzien']) && !empty($results['rok'])){
  83.  
  84.  
  85. //date in mm/dd/yyyy format; or it can be in other formats as well
  86. $birthDate = $results['miesiac']."/".$results['dzien']."/".$results['rok'];
  87. //explode the date to get month, day and year
  88. $birthDate = explode("/", $birthDate);
  89. //get age from date or birthdate
  90. $wiek = (date("md", date("U", mktime(0, 0, 0, $birthDate[0], $birthDate[1], $birthDate[2]))) > date("md")
  91. ? ((date("Y") - $birthDate[2]) - 1)
  92. : (date("Y") - $birthDate[2]));
  93.  
  94. } else{
  95. $wiek = 'Nie podano';
  96. }
  97.  
  98. if(!empty($results['miejscowosc'])){
  99. $skad = $results['miejscowosc'];
  100. }else{
  101. $skad = 'Nie podano';
  102. }
  103.  
  104.  
  105. echo '
  106.  
  107. <div class="col-lg-3 col-xs-6">
  108. <div class="contact-box center-version">
  109.  
  110. <a href="profil.php?id='.$results['id'].'">
  111.  
  112. <img alt="image" class="img-circle" src="'.$link.'">
  113.  
  114.  
  115. <h3 class="m-b-xs"><strong>'.$results['login'].'</strong></h3>
  116.  
  117.  
  118. <address class="m-t-md">
  119. '.$wiek.'<br />
  120. '.$skad.'
  121. </address>
  122.  
  123. </a>
  124.  
  125.  
  126. </div>
  127. </div>
  128.  
  129.  
  130.  
  131. ';
  132.  
  133. }
  134. //Teraz wypadało by wyświetlić jakąś nawigację
  135. echo '
  136. </div>
  137. <div class="row" style="
  138. display: initial;
  139. ">
  140. <nav aria-label="Page navigation example " style="text-align: center;">
  141. <ul class="pagination">';
  142. //jesli nie jesteśmy na pierwszej stronie
  143. if($_GET['strona']>0){
  144. //wyswietlamy link do poprzedniej strony
  145. echo '<li class="page-item"><a class="page-link" href="szukaj.php?strona='.($_GET['strona']-1).'">Poprzednia</a></li>';
  146. }
  147.  
  148. for($i = 0;$i<=floor($iloscWpisow/ILOSC_WYNIKOW_NA_STRONIE);$i++){
  149. echo '<li class="page-item"><a class="page-link" href="szukaj.php?strona='.($i).'">'.($i+1).'</a></li>';
  150. }
  151. //jeśli nie jesteśmy na ostatniej stronie
  152. if($_GET['strona']<floor($iloscWpisow/ILOSC_WYNIKOW_NA_STRONIE)){
  153. //wyswietlamy link do nastepnej strony
  154. echo '<li class="page-item"><a class="page-link" href="szukaj.php?strona='.($_GET['strona']+1).'#">Następna</a></li>';
  155. }
  156. echo ' </ul>
  157. </nav>
  158. </div>';
  159. }else{
  160. echo '<div class="alert alert-warning" role="alert">
  161. Brak wyników
  162. </div>';
  163. }
  164.  
  165. ?>
nospor
sesja jest pusta. zrob sobie var_dump($_SESSION); a sam sie przekonasz
diamondking
Cytat(nospor @ 26.04.2018, 17:57:10 ) *
sesja jest pusta. zrob sobie var_dump($_SESSION); a sam sie przekonasz


no mam poza sesja logowania taki wynik:

["logins"]=> string(3) "tes"

Czyli nie jest pusta a i tak mimo, że jest tylko jeden poprawny użytkownik zawierający w nazwie "tes"
to teoetycznie pobiera 5-6 bo wyskakują mi 3 strony wyników przy ustawieniu 2 wyniki na stronę

Ok poradziłem sobie z tym wink.gif

Dziękuję za naprowadzenie i pomoc smile.gif

JEDNAK NIE ... sad.gif

Ok do zamknięcia chyba, że ktoś mi teraz podpowie.

Wchodzę na stronę wyszukaj ... szukam np. tester - ok wyszukuje mi tester.
Następnie wpisuję admin - działą wyszukuje mi admin.

Wychodzę na inną podstronę ... po chwili znowu wchodzę na wyszukaj...

Jak wtedy zrobić by już nie pamiętało osatniego wyszukiwania z sesji admin ?

Prymitywnie ale poradziłem sobie:

  1. <?php
  2. if($_SERVER['SCRIPT_URL'] != '/szukaj.php'){
  3. unset($_SESSION['logins']);
  4. unset($_SESSION['wiek']);
  5. unset($_SESSION['region']);
  6. unset($_SESSION['miasto']);
  7. unset($_SESSION['online']);
  8. }
  9. ?>
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.