Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL][PHP] Stronicowanie wyników wyszukiwania
Kshyhoo
post
Post #1





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




Do tej pory wyświetlałem dane bez problemów, teraz jednak wymyśliłem sobie wyszukiwarkę i mam problemy ze stronicowaniem wyników. Pobierałem wyniki tak:
  1. SELECT * FROM tutoriale LIMIT $start, $na_strone

W wyszukiwarce, jeżeli ustalę np. 10 wyników na stronę, to kolejne strony są puste, mimo, że jest więcej wyników wyszukiwania. Są jakieś sposoby, żeby "pamiętać" dane do wyszukiwania w sposób efektywny? Moje zapytanie:
  1. SELECT * FROM tutoriale WHERE $gdzie LIKE '%$fraza%' LIMIT $start, $na_strone

Strony zapamiętuję w sesji.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Kshyhoo
post
Post #2





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




Sorry Winetu, kod całej szukajki:
  1. <?php
  2. if (isset($_POST['oursubmit'])) {
  3. $_SESSION['form'] = array(
  4. 'opcja' => $_POST['opcja'],
  5. 'fraza' => $_POST['fraza'],
  6. );
  7. }
  8. $formData = array(
  9. 'opcja' => !isset($_SESSION['form']) ? null : $_SESSION['form']['opcja'],
  10. 'fraza' => !isset($_SESSION['form']) ? null : $_SESSION['form']['fraza'],
  11. );
  12. ?>
  13. <div class="kontener"><font class="nag1">
  14. <form method="post" action="cpax.php?go=szukaj" name="formData">
  15. <input type="hidden" name="go" value="szukaj" class="">
  16. Autor: <input type="radio" name="opcja" value="0" <?php if (empty($formData['opcja'])) echo 'checked="checked"';?> />&nbsp;&nbsp;&nbsp;
  17. Tytuł: <input type="radio" name="opcja" value="1" <?php if ($formData['opcja'] == 1) echo 'checked="checked"';?> />&nbsp;&nbsp;&nbsp;
  18. Treść: <input type="radio" name="opcja" value="2" <?php if ($formData['opcja'] == 2) echo 'checked="checked"';?> />&nbsp;&nbsp;&nbsp;
  19. <input type="text" size="40" name="fraza" class="edit" value="<?php echo $formData["fraza"];?>">
  20. <input type="submit" value="" class="search" name="oursubmit">
  21. </form></font></div>
  22. <?php
  23. $jakisindex = $_SESSION['form']['opcja'];
  24. $opcje = array("0" => "autor", "1" => "tytul", "2" => "tresc");
  25. $gdzie = $opcje[$jakisindex];
  26.  
  27. echo $gdzie; echo ' '; echo $_SESSION['form']['fraza'];
  28. ///////////////////////// DANE DO STRONICOWANIA /////////////////////////
  29. if (isset($_SESSION['form']['fraza'])) {
  30.  
  31. function pasek($rekordow,$na_strone,$na_pasku,$skryptszu,$s) {
  32. $stron = ceil($rekordow/$na_strone);
  33. if ($s<1) $s=1;
  34. if ($s>$stron) $s=$stron;
  35. $koniec = $s+$na_pasku;
  36. if ($s<=$na_pasku) $koniec = $na_pasku*2+1;
  37. if ($koniec>$stron) $koniec = $stron;
  38. $start = $koniec-$na_pasku*2;
  39. if ($start<1) $start=1;
  40. if ($s>1) $p = "<a href='$skryptszu".($s-1)."'><img style='height: 21px; width: 57px;' alt='w lewo' border='0' cursor: pointer; src='./gfx/pla.png'></a>";
  41. else $p = "<img style='height: 21px; width: 57px;' alt='w lewo' border='0' cursor: pointer; src='./gfx/pln.png'>";
  42. if ($s<$stron) $n = "<a href='$skryptszu".($s+1)."'><img style='height: 21px; width: 57px;' alt='' border='0' cursor: pointer; src='./gfx/ppa.png'></a>";
  43. else $n = "<img style='height: 21px; width: 57px;' alt='w prawo' border='0' cursor: pointer; src='./gfx/ppn.png'>";
  44. for ($i=$start; $i<=$koniec; $i++) {
  45. if ($i==$s) $l .= "&nbsp;<span style='color:#cc0000;'><b>$i</b></span>&nbsp;";
  46. else $l .= "&nbsp;<a href='$skryptszu$i'>$i</a>&nbsp;";
  47. }
  48. if ($rekordow<1) $wynik = "<font class='en'>Brak informacji spełniających kryteria wyszukiwania...</font>";
  49. else $wynik = "<font class='en'>znalezionych: $rekordow <br /> strona <b>$s</b> z $stron<br />"; //znalezionych: $rekordow,
  50. if ($stron>1) $wynik .= "<font class='en'>$p&nbsp; - $l - &nbsp;$n</font>";
  51. return $wynik;
  52. }
  53.  
  54. if (!empty($_GET['s'])) {
  55. $s = ($_GET["s"]>1)?number_format($_GET["s"], 0, "", ""):1;
  56. $_SESSION["s"] = $_GET["s"];
  57. } else {
  58. $s = ($_SESSION["s"]>1)?number_format($_SESSION["s"], 0, "", ""):1;
  59. }
  60. /////////////////////////
  61.  
  62. $start = ($s-1)*$na_strone;
  63. $wynik = mysql_query("SELECT SQL_CALC_FOUND_ROWS * FROM tutoriale WHERE $gdzie LIKE '%$fraza%' LIMIT $start, $na_strone");
  64. $rekordow = mysql_result(mysql_query("SELECT FOUND_ROWS()"),0);
  65. // ponownie szuka, gdy ktos celowo wpisze "s" większe od ilości stron:
  66. $stron = ceil($rekordow/$na_strone);
  67. if ($s>$stron and $rekordow>0) {
  68. $start = ($stron-1)*$na_strone;
  69. $wynik = mysql_query("SELECT * FROM tutoriale WHERE $gdzie LIKE '%$fraza%' LIMIT $start, $na_strone");
  70. }
  71.  
  72. /////////////////////////
  73. echo "<div class='stron'>";
  74. echo "<font class='en'>";
  75. echo pasek($rekordow,$na_strone,$na_pasku,$skryptszu,$s);
  76. echo "</font>\n";
  77. echo "</div>"; // stron
  78. /////////////////////////
  79. if ($wynik and mysql_num_rows($wynik)>1) {
  80. echo "<div class='tabele'>
  81. <table class='t_table'>
  82. <tr>
  83. <td class='t_th' width='75px'>Obraz</td>
  84. <td class='t_th'>Tytuł tutoriala</td>
  85. <td class='t_th' width='100px'>Kategoria</td>
  86. </tr>";
  87.  
  88. while ($wynik and $dane = mysql_fetch_array($wynik)) {
  89. $bgl = ($kl++%2 == 0)?"t_tdjl":"t_tdcl";
  90. $bgc = ($kc++%2 == 0)?"t_tdjc":"t_tdcc";
  91. echo "</tr>
  92. <tr>
  93. <td class='$bgc'><img src='".$dane['obraz']."' alt='obraz' width='70' height='70' /></td>
  94. <td class='$bgl'><b>Tytuł: </b> <a href='cpax.php?go=pokaz&id=".$dane['id']."'class='key'>".$dane['tytul']."</a><br />
  95. <b>Autor: </b> ".$dane['autor']."<br />
  96. <b>Data: </b> ".$dane['data']."<br />
  97. <b>Notatki: </b> ".$dane['notatki']."<br />
  98. <b>Dodał: </b> ".$dane['moderator']."</td>
  99. <td class='$bgc'><a href='cpax.php?go=tutoriale&k=2&c=".$dane['kat_id']."'class='key'>".$dane['kat']."</a></td>
  100. </tr>";
  101. } //zap
  102. echo "</table>
  103. <div class='stron'><font class='en'>";
  104. echo pasek($rekordow,$na_strone,$na_pasku,$skryptszu,$s);
  105. }// wynik>1
  106. echo "</font></div>"; // stron</div>";
  107. } //
  108. ?>


EDIT: Niby wszystko ok, ale wyszukiwanie nie działa poprawnie...

Ten post edytował Kshyhoo 21.01.2010, 10:09:45
Go to the top of the page
+Quote Post

Posty w temacie
- Kshyhoo   [MySQL][PHP] Stronicowanie wyników wyszukiwania   19.01.2010, 20:18:17
- - thek   Może czas na sesje? Dane z wyszukiwarki też do se...   19.01.2010, 20:27:12
- - Kshyhoo   Całe wyniki? Nie łapię ;p   19.01.2010, 21:25:19
- - bl4ck_b0x   Nie całe wyniki Żebyś przechowywał w sesji którą ...   19.01.2010, 22:34:45
- - Kshyhoo   Hmm, strony mam tak: [PHP] pobierz, plaintext i...   19.01.2010, 22:56:48
- - Pilsener   Po co sesje do tego? Rozwiązania są dwa: 1. Jeżeli...   20.01.2010, 10:08:58
- - nospor   Tutaj o tym pisałem http://nospor.pl/formularz-i-s...   20.01.2010, 10:32:16
- - Kshyhoo   No właśnie... Problem w tym, że nie bardzo wiem, j...   20.01.2010, 10:36:19
- - thek   Najprostsza wersja to "weź i zapamiętaj w ses...   20.01.2010, 11:03:00
- - Kshyhoo   No dobra, w sesji. Zrobiłem tak, jak w przykładzie...   20.01.2010, 11:52:23
- - nospor   CytatZrobiłem tak, jak w przykładzie nospora, i ni...   20.01.2010, 11:55:44
- - Kshyhoo   Wydaje mi się, że $_POST['oursubmit']...   20.01.2010, 12:00:35
- - nospor   no bo dla submita nie nadałeś wartosci: value=...   20.01.2010, 12:08:05
- - Kshyhoo   A no tak. To dlatego, że mam graficzny przycisk i ...   20.01.2010, 12:28:02
- - nospor   no ale do sesji zapisujesz z forma rzeczy, ktorych...   20.01.2010, 12:31:51
- - Kshyhoo   Hmm, wciąż mam [oursubmit] => puste, nie wiem, ...   20.01.2010, 12:46:49
- - nospor   no bo dla oursubmit nie przekazałeś wartosci. dlat...   20.01.2010, 12:56:34
- - Kshyhoo   Zmieniłem, Wodzu: [PHP] pobierz, plaintext if ...   20.01.2010, 13:07:00
- - nospor   No i super. Jeszcze jakis problem? Jak tak to od r...   20.01.2010, 13:10:17
- - Kshyhoo   Ale ja zmieniłem wcześniej i dalej mam pusto ;( Go...   20.01.2010, 13:23:27
- - nospor   No bo radio to nie input text i zachowuje się zupe...   20.01.2010, 13:35:01
- - Kshyhoo   Test wykazał: CytatPOST: Array ( [go] => sz...   20.01.2010, 13:40:04
- - nospor   no bo bez namyslu skopiowales... Z rozpedu zostawi...   20.01.2010, 13:48:10
- - Kshyhoo   Nadal pusto: CytatPOST: Array ( [go] => szu...   20.01.2010, 13:53:19
- - nospor   no jak pusto? Juz w sesji masz to co masz miec.   20.01.2010, 13:57:11
- - Kshyhoo   No mam to, co wkleiłem... Yyyyy, no tak, nie mam w...   20.01.2010, 13:59:19
- - nospor   CytatYyyyy, no tak, nie mam w bazie 0, 1, 2, tylko...   20.01.2010, 14:01:39
- - Kshyhoo   Nie bardzo. Wiem, jak zmienić wartości: [PHP] pobi...   20.01.2010, 15:04:11
- - thek   A sprawdzałeś chociaż co uzyskasz poprzez wywołani...   20.01.2010, 15:28:10
|- - Kshyhoo   Cytat(thek @ 20.01.2010, 15:28:10 ) N...   20.01.2010, 15:36:13
- - nospor   [PHP] pobierz, plaintext $jakisindex = 1;$opcje = ...   20.01.2010, 17:17:17
- - Kshyhoo   No tak, niby wszystko ok, a wyniki wyszukiwania pu...   20.01.2010, 17:27:28
- - nospor   Czy ja za kazdym razem muszę pisac: "pokaż ko...   20.01.2010, 17:43:10
- - Kshyhoo   Sorry Winetu, kod całej szukajki: [PHP] pobierz, p...   20.01.2010, 17:51:53
- - nospor   w zapytaniu korzystasz ze zmiennej $fraza, al...   21.01.2010, 10:23:18
- - Kshyhoo   Masz rację (jak zawsze). Jakimś cudem skrypt pobie...   21.01.2010, 10:39:15
- - nospor   tak, po wcisnieciu "nowe szukanie " masz...   21.01.2010, 10:50:49
- - Kshyhoo   A można to zrobić na zasadzie: [PHP] pobierz, plai...   21.01.2010, 11:22:01
- - nospor   nie   21.01.2010, 11:25:10
- - Kshyhoo   Generalnie, to już w miarę chodzi. Wyszukuje i str...   24.01.2010, 15:42:45


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: 17.10.2025 - 03:48