Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP][MYSQL] wynik wyszukiwania
!*!
post
Post #1





Grupa: Zarejestrowani
Postów: 4 298
Pomógł: 447
Dołączył: 16.11.2006

Ostrzeżenie: (0%)
-----


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...
Go to the top of the page
+Quote Post
wipo
post
Post #2





Grupa: Zarejestrowani
Postów: 856
Pomógł: 19
Dołączył: 30.08.2005
Skąd: 100lica

Ostrzeżenie: (0%)
-----


Spróbuj może wyświetlić zapytanie. Będzie łatwiej zobaczyć gdzie masz błąd
Go to the top of the page
+Quote Post
!*!
post
Post #3





Grupa: Zarejestrowani
Postów: 4 298
Pomógł: 447
Dołączył: 16.11.2006

Ostrzeżenie: (0%)
-----


  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...
Go to the top of the page
+Quote Post
wipo
post
Post #4





Grupa: Zarejestrowani
Postów: 856
Pomógł: 19
Dołączył: 30.08.2005
Skąd: 100lica

Ostrzeżenie: (0%)
-----


Jak możesz to nie uzywaj mysql_num_rows(). Lepiej w tym celu użyć count(*)
Go to the top of the page
+Quote Post
!*!
post
Post #5





Grupa: Zarejestrowani
Postów: 4 298
Pomógł: 447
Dołączył: 16.11.2006

Ostrzeżenie: (0%)
-----


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. ?>


Ten post edytował !*! 27.06.2008, 01:15:50
Go to the top of the page
+Quote Post
nevt
post
Post #6





Grupa: Przyjaciele php.pl
Postów: 1 595
Pomógł: 282
Dołączył: 24.09.2007
Skąd: Reda, Pomorskie.

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
!*!
post
Post #7





Grupa: Zarejestrowani
Postów: 4 298
Pomógł: 447
Dołączył: 16.11.2006

Ostrzeżenie: (0%)
-----


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. ?>
Go to the top of the page
+Quote Post
nevt
post
Post #8





Grupa: Przyjaciele php.pl
Postów: 1 595
Pomógł: 282
Dołączył: 24.09.2007
Skąd: Reda, Pomorskie.

Ostrzeżenie: (0%)
-----


no dobra ... podstawiasz ilość wpisów w bazie (nie stron) do zmiennej $red i ... (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) co dalej ... (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) mamy powróżyć co robisz dalej z tą zmienną ... (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif)
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 17:43