Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP][MYSQL] wynik wyszukiwania
!*!
post 26.06.2008, 17:55:39
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...


--------------------
Nie udzielam pomocy poprzez PW i nie mam GG.
Niektóre języki programowania, na przykład C# są znane z niezwykłej przenośności (kompatybilność ze wszystkimi wersjami Visty jest wiele warta).
Go to the top of the page
+Quote Post
wipo
post 26.06.2008, 19:40:57
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 26.06.2008, 19:54:15
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...


--------------------
Nie udzielam pomocy poprzez PW i nie mam GG.
Niektóre języki programowania, na przykład C# są znane z niezwykłej przenośności (kompatybilność ze wszystkimi wersjami Visty jest wiele warta).
Go to the top of the page
+Quote Post
wipo
post 26.06.2008, 19:57:57
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 27.06.2008, 01:07:46
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


--------------------
Nie udzielam pomocy poprzez PW i nie mam GG.
Niektóre języki programowania, na przykład C# są znane z niezwykłej przenośności (kompatybilność ze wszystkimi wersjami Visty jest wiele warta).
Go to the top of the page
+Quote Post
nevt
post 27.06.2008, 08:25:12
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.


--------------------

-
Oh no, my young coder. You will find that it is you who are mistaken, about a great many things... -
Go to the top of the page
+Quote Post
!*!
post 27.06.2008, 10:44:44
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. ?>


--------------------
Nie udzielam pomocy poprzez PW i nie mam GG.
Niektóre języki programowania, na przykład C# są znane z niezwykłej przenośności (kompatybilność ze wszystkimi wersjami Visty jest wiele warta).
Go to the top of the page
+Quote Post
nevt
post 27.06.2008, 12:35:42
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 ... questionmark.gif co dalej ... questionmark.gif mamy powróżyć co robisz dalej z tą zmienną ... questionmark.gif


--------------------

-
Oh no, my young coder. You will find that it is you who are mistaken, about a great many things... -
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 22.06.2025 - 17:53