Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MYSQL] wynik wyszukiwania
Forum PHP.pl > Forum > Przedszkole
!*!
Zapytanie i stronicowanie:
  1. <?php
  2. require_once("connect.php");
  3.  
  4. $wynik = $_POST['wyszukaj'];
  5.  
  6.  
  7. if (isset($_POST['wyszukaj'])) {
  8. $_SESSION['wyszukaj'] = $_POST['wyszukaj'];
  9. }
  10.  
  11. function pages ($first, $countpages, $nrpages, $zap) {
  12. if($countpages > $nrpages ){
  13. $countpages = $countpages/$nrpages; 
  14. $ile = ceil($countpages); 
  15. if ($first!=0) echo("<a href=\"".$_SERVER['PHP_SELF']."?wyszukiwarka.php&first=" . ($first-$nrpages) . "\" title=\"Poprzednie\">Poprzednie</a> "); 
  16.  
  17. for ($i=1;$i<=$ile;$i++) 
  18. { 
  19. echo("<a href=\"".$_SERVER['PHP_SELF']."?wyszukiwarka.php&first=" . ($i*$nrpages-$nrpages) . "\" title=\"" . ($i*$nrpages-($nrpages-1)) . "-" . ($i*$nrpages) ."\">");
  20. if ( $countpages > 6 ) {if ($first==($i*$nrpages-$nrpages)) 
  21.  { 
  22. echo ("<b>|" . $i . "|</b></a> "); $akt=$i-1; } else { print ("|" . $i . "|</a> "); 
  23.  } 
  24. } 
  25.  
  26. else {
  27. if ($first==($i*$nrpages-$nrpages)) 
  28.  { 
  29. echo ("<b>|" . $i . "|</b></a> "); $akt=$i; } else { print ("|" . $i . "|</a> ");  
  30.  } 
  31. }
  32. } 
  33. if ($akt<$ile) echo ("<a href=\"".$_SERVER['PHP_SELF']."?wyszukiwarka.php&first=" . ($first+$nrpages) . "\" title=\"Następne\">Następne</a>");
  34. }
  35. }
  36.  
  37. if (!isset($_GET['first'])) $first = 0; else $first = (int) $_GET['first']; 
  38. $nrpages = 10; 
  39. $szukaj=mysql_real_escape_string($_SESSION['wyszukaj']);
  40. $zap= "SELECT login,data FROM userdata WHERE login LIKE '%$szukaj%' LIMIT $first,$nrpages;";
  41. $countpages = mysql_num_rows(mysql_query("SELECT login FROM userdata WHERE login LIKE '%$szukaj%' "));
  42. $quer = mysql_query($zap);
  43.  
  44.  
  45. ?>


odczyt wygląda tak:

  1. <?php pages($first, $countpages, $nrpages, $zap); ?>
  2. <?php
  3.  
  4. while ($wiersz = mysql_fetch_array($quer)) 
  5. {
  6. $qwe++;
  7. $class = ($qwe%2==1) ? "wysz1" : "wysz2";
  8. echo '<div class="'. $class .'";>';
  9. echo '<b>'.$wiersz['login'].' </b><br />';
  10. echo '<br /> data rejestracji: '.$wiersz[data].'';
  11. echo '</div>';
  12. }
  13.  
  14. ?>


Wyszukuje rekordy, w tym wypadku 10 na stronę, jednak gdy mam 20 czy 200 wczytanych rekordów, owszem są one stronicowane co 10 na każdą stronę, ale gdy chcę zobaczyć stronę nr 2, lub 50 to zamiast się normalnie odczytać w stronicowaniu:

  1. Poprzednie |1| |2| |3| |4| Następne


skrypt się wykrzacza i pobierane są wszytkie rekordy z bazy, a co za tym idzie, wyglada to tak:

  1. |1| |2| |3| |4| |5| |6| |7| |8| |9| |10| |11| |12| |13| |14| |15| |16| |17| |18| |19| |20| |21| |22| |23| |24| |25| |26| |27| |28| |29| |30| |31| |32| |33| |34| |35| |36| |37| |38| |39| |40| |41| |42| |43| |44| |45| |46| |47| |48| |49| |50| |51| |52| |53| |54| |55| |56| |57| |58| |59| |60| |61| |62| |63| |64| |65| |66| |67| |68| |69| |70| |71| |72| |73| |74| |75| |76| |77| |78| |79| |80| |81| |82| |83| |84| |85| |86| |87| |88| |89| |90| |91| |92| |93| |94| |95| |96| |97| |98| |99| |100| |101| |102| |103| |104| Następne


W zalezności od ilości rekordów w bazie...
wipo
Spróbuj może wyświetlić zapytanie. Będzie łatwiej zobaczyć gdzie masz błąd
!*!
  1. <?php
  2. require_once("connect.php");
  3.  
  4. $wynik = $_POST['wyszukaj'];
  5.  
  6.  
  7. if (isset($_POST['wyszukaj'])) {
  8. $_SESSION['wyszukaj'] = $_POST['wyszukaj'];
  9. }
  10.  
  11. function pages ($first, $countpages, $nrpages, $zap) {
  12. if($countpages > $nrpages ){
  13. $countpages = $countpages/$nrpages; 
  14. $ile = ceil($countpages); 
  15. if ($first!=0) echo("<a href=\"".$_SERVER['PHP_SELF']."?wyszukiwarka&first=" . ($first-$nrpages) . "\" title=\"Poprzednie\">Poprzednie</a> "); 
  16.  
  17. for ($i=1;$i<=$ile;$i++) 
  18. { 
  19. echo("<a href=\"".$_SERVER['PHP_SELF']."?wyszukiwarka&first=" . ($i*$nrpages-$nrpages) . "\" title=\"" . ($i*$nrpages-($nrpages-1)) . "-" . ($i*$nrpages) ."\">");
  20. if ( $countpages > 6 ) {if ($first==($i*$nrpages-$nrpages)) 
  21.  { 
  22. echo ("<b>|" . $i . "|</b></a> "); $akt=$i-1; } else { print ("|" . $i . "|</a> "); 
  23.  } 
  24. } 
  25.  
  26. else {
  27. if ($first==($i*$nrpages-$nrpages)) 
  28.  { 
  29. echo ("<b>|" . $i . "|</b></a> "); $akt=$i; } else { print ("|" . $i . "|</a> ");  
  30.  } 
  31. }
  32. } 
  33. if ($akt<$ile) echo ("<a href=\"".$_SERVER['PHP_SELF']."?wyszukiwarka&first=" . ($first+$nrpages) . "\" title=\"Następne\">Następne</a>");
  34. }
  35. }
  36.  
  37. if (!isset($_GET['first'])) $first = 0; else $first = (int) $_GET['first']; 
  38. $nrpages = 10; 
  39. $szukaj=mysql_real_escape_string($_SESSION['wyszukaj']);
  40.  
  41. $zap= "SELECT * FROM userdata WHERE MATCH(login) against ('$szukaj*' IN BOOLEAN MODE)";
  42. $countpages = mysql_num_rows(mysql_query("SELECT login FROM userdata WHERE MATCH(login) against ('$szukaj*' IN BOOLEAN MODE) "));
  43. $quer = mysql_query($zap);
  44.  
  45.  
  46. ?>


Zmieniłem z LIKE na FULLTEXT i działa owiele szybciej, jednak nie działa przy tym stronicowanie...
wipo
Jak możesz to nie uzywaj mysql_num_rows(). Lepiej w tym celu użyć count(*)
!*!
Ok, poprawiłem conieco, ale nadal coś jest skopane bo po kliknieciu w link np. [2] nic się nie dzieje poza tym ze w adresie jest np. first=20, ale żadnych wyników nie ma, :/ coś chyba w zapytaniach źle zrobiłem z tym count.

  1. <?php
  2. require_once("connect.php");
  3.  
  4. $wynik = $_POST['wyszukaj'];
  5.  
  6.  
  7. if (isset($wynik)) {
  8. $_SESSION['wyszukaj'] = $_POST['wyszukaj'];
  9. }
  10.  
  11. function pages ($first, $red, $nrpages, $zap) {
  12. if($red > $nrpages ){
  13. $red = $red/$nrpages; 
  14. $ile = ceil($red); 
  15. if ($first!=0) echo("<a href=\"".$_SERVER['PHP_SELF']."?first=" . ($first-$nrpages) . "\" title=\"Poprzednie\">Poprzednie</a> "); 
  16.  
  17. for ($i=1;$i<=$ile;$i++) 
  18. { 
  19. echo("<a href=\"".$_SERVER['PHP_SELF']."?first=" . ($i*$nrpages-$nrpages) . "\" title=\"" . ($i*$nrpages-($nrpages-1)) . "-" . ($i*$nrpages) ."\">");
  20. if ( $red > 6 ) {if ($first==($i*$nrpages-$nrpages)) 
  21.  { 
  22. echo ("<b>|" . $i . "|</b></a> "); $akt=$i-1; } else { print ("|" . $i . "|</a> "); 
  23.  } 
  24. } 
  25.  
  26. else {
  27. if ($first==($i*$nrpages-$nrpages)) 
  28.  { 
  29. echo ("<b>|" . $i . "|</b></a> "); $akt=$i; } else { print ("|" . $i . "|</a> ");  
  30.  } 
  31. }
  32. } 
  33. if ($akt<$ile) echo ("<a href=\"".$_SERVER['PHP_SELF']."?first=" . ($first+$nrpages) . "\" title=\"Następne\">Następne</a>");
  34. }
  35. }
  36.  
  37. if (!isset($_GET['first'])) $first = 0; else $first = (int) $_GET['first']; 
  38. $nrpages = 10; 
  39. $szukaj=mysql_real_escape_string($_SESSION['wyszukaj']);
  40.  
  41. $zap= "SELECT * FROM userdata WHERE MATCH(login) against ('$szukaj*' IN BOOLEAN MODE)";
  42. $countpages = mysql_query("SELECT COUNT(login) FROM userdata WHERE MATCH(login) against ('$szukaj*' IN BOOLEAN MODE) ");
  43. $quer = mysql_query($zap);
  44. $red = mysql_result($countpages,0);
  45. ?>
nevt
miałeś:
  1. <?php
  2. $zap= "SELECT login,data FROM userdata WHERE login LIKE '%$szukaj%' LIMIT $first,$nrpages;";
  3. ?>

a przerobiłeś to na:
  1. <?php
  2. $zap= "SELECT * FROM userdata WHERE MATCH(login) against ('$szukaj*' IN BOOLEAN MODE)";
  3. ?>

naprawdę nie widzisz gdzie jest problem? nie wiesz jak się stronicuje dane pobierane z bazy MySQL?
no to podpowiem, wywaliłeś z zapytania klauzulę LIMIT która (jak sama nazwa wskazuje) ogranicza wyniki zwracane przez zapytanie do określonego limitu - w naszym przypadku do konkretnej podstrony ...
powodzenia.
!*!
Heh, tak widziałem to już rano :/ drobnostka ale nie widziałem tego po 2 :/ emm tylko że... nadal nie wiem co jest nie tak z zapytaniem... bo chyba o zapytanie musi chodzić, GET[first]; nadal nie przesyła danych do linku [2][3][4][5] itp.

Nie jestem pewien czy to zrobiłem dobrze

  1. <?php
  2. $countpages = mysql_query("SELECT COUNT(login) FROM userdata WHERE MATCH(login) against ('$szukaj*' IN BOOLEAN MODE) ");
  3. $red = mysql_result($countpages,0);
  4. ?>
nevt
no dobra ... podstawiasz ilość wpisów w bazie (nie stron) do zmiennej $red i ... questionmark.gif co dalej ... questionmark.gif mamy powróżyć co robisz dalej z tą zmienną ... questionmark.gif
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.