Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wyszukiwarka
Forum PHP.pl > Forum > PHP
Lethys
Witam,

Posiadam na swojej strony wyszukiwarke, ktora pokazuje po 10 wynikow na strone.

Problem mój polega na tym, że przy działa tylko pierwsza strona wyszukiwania (czyli pierwsze dziesiec wynikow).

Po kliknieciu na kolejna strone zostaje zwrocny moj komunikat zabezpieczajacy "musisz wpisac poszukiwana fraze". Czyli po prostu przy kolejnej stronie zmienna z formularza ($szukaj) już nie działa i skrypt traktuje to tak jak bysmy zostawili puste miejsce na fraze i klikneli szukaj.

Nie wiem jak przekazac zmienna $szukaj aby dzialala rowniez na innych stronach. Probowalem w sesji, w hidden form ale nie dzialalo ;?


Skrypt:

  1.  
  2. if ($action == "wyszukiwanie"){
  3.  
  4. include("config.php");
  5.  
  6.  
  7. if (!$szukaj){
  8. $problem = TRUE;
  9. echo("<p id='uwaga'><h2>Musisz wpisać co chcesz znaleźć.</h2></p>");
  10. echo '<br><p><img border="0" src="images/loader.gif"> Powrót do wyszukiwarki</p><meta http-equiv="Refresh" content="2; url=poradniki.php">';
  11.  
  12. }
  13.  
  14.  
  15.  
  16. if (!$problem){
  17.  
  18.  
  19.  
  20. $liczenie = mysql_num_rows(mysql_query("select * from poradniki where nazwa like '%$szukaj%' || opis like '%$szukaj%' || nazwa_small like '%$szukaj%'"));
  21.  
  22.  
  23. echo 'Wyszukiwanie dla frazy: '.$szukaj.'';
  24. echo '<p>Znaleziono <b>'.$liczenie.'</b> poradników.</p><br>';
  25.  
  26. $wyszukane = mysql_fetch_array(mysql_query("select * from poradniki where nazwa like '%$szukaj%' || opis like '%$szukaj%' || nazwa_small like '%$szukaj%'"));
  27.  
  28.  
  29. $perPage = 10;
  30. if (is_numeric($_REQUEST['page'])) {
  31. $page = (int) $_REQUEST['page'];
  32. if ($page < 1) {
  33. $page = 1;
  34. }
  35. } else {
  36. $page = 1;
  37. }
  38. $start = ($page - 1) * $perPage;
  39. $query = "select * from poradniki where nazwa like '%$szukaj%' || opis like '%$szukaj%' || nazwa_small like '%$szukaj%' order by licznik desc LIMIT $start, $perPage";
  40. $result = mysql_query($query);
  41. while ($record = mysql_fetch_array($result)) {
  42.  
  43.  
  44.  
  45. <div class="ui-state-highlight-opis ui-corner-all" style="margin-top: 20px; padding: 0 .7em;">
  46.  
  47. <b><h2><A HREF="przekierowanie.php?link='.$record['nazwalink'].'">'.$record['nazwa'].'</A></h2></b>Opis: '.$record['opis'].'<br/><br/>Data dodania: 12.03.2004<br/><A HREF="/link4sms/link.php?link='.$record['nazwalink'].'">Zobacz szczegóły</a></div>';
  48.  
  49.  
  50.  
  51.  
  52. }
  53.  
  54.  
  55. $prev = $page - 1;
  56. $next = $page + 1;
  57. $prevLink = $_SERVER['PHP_SELF'] . '?action=wyszukiwanie&page=' . $prev;
  58. $nextLink = $_SERVER['PHP_SELF'] . '?action=wyszukiwanie&page=' . $next;
  59. $a = $page*10;
  60. $b = mysql_num_rows(mysql_query("select * from poradniki where nazwa like '%$szukaj%' || opis like '%$szukaj%' || nazwa_small like '%$szukaj%'"));
  61.  
  62. if ($b < 11){
  63. }else{
  64. if ($page == 0 or $page == 1){
  65. echo '<br><center>Brak poprzedniej strony | <a href='.$nextLink.'>Następna strona</a></center>';
  66. }else{
  67. if ($b >= $page*10){
  68. echo '<br><center><a href='.$prevLink.'>Poprzednia strona</a> | <a href='.$nextLink.'>Następna strona</a></center>';
  69. }else{
  70. echo '<br><center><a href='.$prevLink.'>Poprzednia strona</a> | Brak więcej wyników</center>';
  71.  
  72. }
  73. }
  74. }
  75.  
  76.  
  77. }else{
  78.  
  79. }
  80. }
  81. ?>
croc
A jak wysyłasz dane do wyszukiwania? POST czy GET? Lepiej GET-em i przypisać tę samą zmienną do $prevLink i $nextLink, czyli dodać do nich np. &szukaj=$szukaj
CuteOne
  1. if(!empty($_POST['szukaj'])) {
  2.  
  3. $fraza = $_POST['szukaj'];
  4. }
  5. elseif(!empty($_GET['szukaj'])) {
  6.  
  7. $fraza = $_GET['szukaj'];
  8. }
  9. else {
  10.  
  11. echo "Nie wpisałeś frazy";
  12. }


W ten sposób, możesz przekazywać dane zarówno formularzem jak i url
croc
Użycie empty to bardzo słaby pomysł. Dlaczego nie mamy prawa wyszukać frazy "0"? Ta funkcja powinna być przeznaczona tylko dla tablic, bo jej działanie dla innych wartości jest moim zdaniem absurdalne.

chyba jednak łatwiej użyć:
  1. $szukaj = $_REQUEST['szukaj'];
nospor
Wynik wyszukiwania możesz przenosić w sesji lub w URL (jak wspomnieli przedmowcy)
Tu omówiłem obie metody
http://nospor.pl/formularz-i-stronicowanie...anie-stanu.html
może ci się przyda
Lethys
Nospor zrobiłem to twoją metodą, ale nadal przy zmianie strony nie czyta mi wyszukiwanej frazy (tak jak bym nie wpisał do wyszukiwania).

Kawałek forma:

  1. <form method=post action=szukaj.php?action=wyszukiwanie name=formularz>
  2. <input type="text" name="szukaj" maxlength="25" size="43" class="podpowiedz" title="Wpisz nazwę szukanego poradnika np. dieta" />
  3. <input type="submit" value="Szukaj" name="submitek" class="ui-state-default ui-corner-all" />


Kod:

  1. <?php
  2.  
  3. if ($action == "wyszukiwanie"){
  4.  
  5.  
  6.  
  7.  
  8.  
  9.  
  10. $_SESSION['form'] = array(
  11. 'szukaj' => $_POST['szukaj'],
  12. );
  13.  
  14.  
  15. //niezależnie, czy wysłano formularz, czy nie,
  16. //pobierz jego stan z sesji
  17. $formData = array(
  18. 'szukaj' => !isset($_SESSION['form']) ? null : $_SESSION['form']['szukaj'],
  19. );
  20.  
  21. include("config.php");
  22.  
  23.  
  24. if (!$formData['szukaj']){
  25. $problem = TRUE;
  26. echo("<p id='uwaga'><h2>Musisz wpisać co chcesz znaleźć.</h2></p>");
  27. echo '<br><p><img border="0" src="images/loader.gif"> Powrót do wyszukiwarki</p><meta http-equiv="Refresh" content="2; url=poradniki.php">';
  28.  
  29. }
  30.  
  31.  
  32.  
  33.  
  34.  
  35. if (!$problem){
  36.  
  37.  
  38.  
  39. $liczenie = mysql_num_rows(mysql_query("select * from poradniki where nazwa like '%$formData[szukaj]%' || opis like '%$formData[szukaj]%' || nazwa_small like '%$formData[szukaj]%'"));
  40.  
  41.  
  42. echo 'Wyszukiwanie dla frazy: '.$formData['szukaj'].'';
  43. echo '<p>Znaleziono <b>'.$liczenie.'</b> poradników.</p><br>';
  44.  
  45. $wyszukane = mysql_fetch_array(mysql_query("select * from poradniki where nazwa like '%$formData[szukaj]%' || opis like '%$formData[szukaj]%' || nazwa_small like '%$formData[szukaj]%'"));
  46.  
  47.  
  48. $perPage = 10;
  49. if (is_numeric($_REQUEST['page'])) {
  50. $page = (int) $_REQUEST['page'];
  51. if ($page < 1) {
  52. $page = 1;
  53. }
  54. } else {
  55. $page = 1;
  56. }
  57. $start = ($page - 1) * $perPage;
  58. $query = "select * from poradniki where nazwa like '%$formData[szukaj]%' || opis like '%$formData[szukaj]%' || nazwa_small like '%$formData[szukaj]%' order by licznik desc LIMIT $start, $perPage";
  59. $result = mysql_query($query);
  60. while ($record = mysql_fetch_array($result)) {
  61.  
  62.  
  63.  
  64. <div class="ui-state-highlight-opis ui-corner-all" style="margin-top: 20px; padding: 0 .7em;">
  65.  
  66. <b><h2><A HREF="przekierowanie.php?link='.$record['nazwalink'].'">'.$record['nazwa'].'</A></h2></b>Opis: '.$record['opis'].'<br/><br/>Data dodania: 12.03.2004<br/><A HREF="/link4sms/link.php?link='.$record['nazwalink'].'">Zobacz szczegóły</a></div>';
  67.  
  68.  
  69.  
  70.  
  71. }
  72.  
  73.  
  74.  
  75. $prev = $page - 1;
  76. $next = $page + 1;
  77. $prevLink = $_SERVER['PHP_SELF'] . '?action=wyszukiwanie&page=' . $prev;
  78. $nextLink = $_SERVER['PHP_SELF'] . '?action=wyszukiwanie&page=' . $next;
  79. $a = $page*10;
  80. $b = mysql_num_rows(mysql_query("select * from poradniki where nazwa like '%$formData[szukaj]%' || opis like '%$formData[szukaj]%' || nazwa_small like '%$formData[szukaj]%'"));
  81.  
  82. if ($b < 11){
  83. }else{
  84. if ($page == 0 or $page == 1){
  85. echo '<br><center>Brak poprzedniej strony | <a href='.$nextLink.'>Następna strona</a></center>';
  86. }else{
  87. if ($b >= $page*10){
  88. echo '<br><center><a href='.$prevLink.'>Poprzednia strona</a> | <a href='.$nextLink.'>Następna strona</a></center>';
  89. }else{
  90. echo '<br><center><a href='.$prevLink.'>Poprzednia strona</a> | Brak więcej wyników</center>';
  91.  
  92. }
  93. }
  94. }
  95.  
  96.  
  97. }else{
  98.  
  99. }
  100. }
  101. ?>


Przy zmienie strony tak jak by nie czytało zmiennej z ciasteczka.
nospor
if ($action == "wyszukiwanie"){

Czemu całość robisz dopiero gdy wyślesz formularz? W ogóle nie przeczałeś tego co pisałem a teraz piszesz, ze robisz po mojemu. Nie, nie robisz po mojemu. Robisz po swojemu.

Z danych z sesji masz korzystać zawsze, niezależnie czy form był wysłany czy nie.
A do sesji masz zapisywać tylko gdy form jest wysłany. Przeczytaj jeszcze raz arta uważnie. Przecież tam przykład doskonale to pokazuje.
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.