Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL]Wyszukiwarka - stronicowanie wyników wyszukiwania
Forum PHP.pl > Forum > Przedszkole
adrianozo
Witam wszystkich forumowiczów.
Jako, że kończę pisać swoją stronę(została do zrobienia grafika) w wyszukiwarce chciałbym ograniczyć ilość wyświetlanych rekordów na jedną stronę.
Korzystam ze skryptu, który już mam napisany i działa przy innych plikach tutaj coś jest nie tak.
Ograniczył do wyświetlania 5 rekordów, ale pokazuje tylko pierwszą stronę. Rekordów w bazie jest 36 więc podzielić na 5=7 i trochę czyli 8 stron, a on pokazuje tylko 5 ostatnich. Nie bardzo wiem co jest źle.
Z góry dziękuje za pomoc.
Pozdrawiam smile.gif

szukaj.php

  1. <?php
  2. include('functions/filtr.php');
  3. include('include/db.php');
  4. $subpage = $_GET['page'];
  5. $perPage = 5;
  6. if (!empty($_GET['subpage']))
  7. {
  8. if (is_numeric($_GET['subpage']))
  9. {
  10. $subpage = (int) $_GET['subpage'];
  11. }
  12. }
  13. if ($subpage < 1)
  14. {
  15. $subpage = 1;
  16. }
  17. $start = ($subpage - 1) * $perPage;
  18. $_POST['wynik'] = trim(filtr($_POST['wynik']));
  19. if(empty($_POST['wynik']))
  20. {
  21. echo '<font color="red"><b>Formularz został wypełniony niepoprawnie!<br /> Nie można wyświetlić wyników wyszukiwania!</b></font>';
  22. echo '<br /><br />';
  23. }
  24. else
  25. {
  26. $zapytanie = "SELECT `id`, `tresc`, `adres`, `numer` FROM home WHERE tresc LIKE '%{$_POST['wynik']}%'
  27. UNION SELECT `id`, `tresc`, `adres`, `numer` FROM kontakt WHERE tresc LIKE '%{$_POST['wynik']}%'
  28. UNION SELECT `id`, `tresc`, `adres`, `numer` FROM oferta WHERE tresc LIKE '%{$_POST['wynik']}%'
  29. UNION SELECT `id`, `tresc`, `adres`, `numer` FROM o_mnie WHERE tresc LIKE '%{$_POST['wynik']}%'
  30. UNION SELECT `id`, `tresc`, `adres`, `numer` FROM portfolio WHERE tresc LIKE '%{$_POST['wynik']}%'
  31. UNION SELECT `id`, `nazwa`, `adres`, `numer` FROM portfolio WHERE nazwa LIKE '%{$_POST['wynik']}%'
  32. UNION SELECT `id`, `technologia`, `adres`, `numer` FROM portfolio WHERE technologia LIKE '%{$_POST['wynik']}%'
  33. UNION SELECT `id`, `adres_strony`, `adres`, `numer` FROM portfolio WHERE adres_strony LIKE '%{$_POST['wynik']}%'
  34. UNION SELECT `id`, `tresc`, `adres`, `numer` FROM reklama WHERE tresc LIKE '%{$_POST['wynik']}%'
  35. UNION SELECT `id`, `tresc`, `adres`, `numer` FROM skrypty WHERE tresc LIKE '%{$_POST['wynik']}%'
  36. UNION SELECT `id`, `nazwa`, `adres`, `numer` FROM skrypty WHERE nazwa LIKE '%{$_POST['wynik']}%' ORDER BY `id` DESC LIMIT ".filtr($start).", ".filtr($perPage)."";
  37. $idzapytania = mysql_query($zapytanie);
  38. $oblicz = mysql_num_rows($idzapytania);
  39. if (!isset($_GET['id']) or empty($_GET['id']))
  40. {
  41. echo'Znaleziono: '.$oblicz.'<br /><br />';
  42. for($x=0;$x<$oblicz;$x++)
  43. {
  44. $wiersz = mysql_fetch_array($idzapytania);
  45. echo $x+1;
  46. echo '. ';
  47. $wyraz = explode(' ',substr($wiersz['tresc'], 50));
  48. $wyrazy = substr($wiersz['tresc'], 0, 50).$wyraz[0];
  49. $wyraz = $wyrazy;
  50. $array = array('','','','','','','','','[small]','[/small]',
  51. '[big]','[/big]','[p]','[/p]','
    ','
    '
    ,'','',
  52. '','','[hr=([0-9]{1,2}|100)]','[/hr]');
  53. $wyrazek = str_replace($array,'',$wyraz);
  54. echo '<a style="text-decoration: none;" href="'.$wiersz['adres'].'/'.$wiersz['numer'].'"><b>'.$wyrazek.'</b></a>';
  55. echo'<br /><br />';
  56. }
  57. }
  58. $prev = $subpage - 1;
  59. $next = $subpage + 1;
  60. $prevLink = '/szukaj/subpage/'.$prev.'';
  61. $nextLink = '/szukaj/subpage/'.$next.'';
  62. $ilosc_wierszy = mysql_num_rows($idzapytania);
  63. echo '<div style="text-align:center;">';
  64. if($subpage > 1)
  65. echo'<a style="text-decoration: none;" href="'.$prevLink.'">Poprzednia strona</a> ';
  66. $stron=round($ilosc_wierszy/$perPage);
  67. for($i=1; $i<=$stron; ++$i)
  68. {
  69. if($i==$subpage)
  70. echo '<b>'.$i.' </b>';
  71. else
  72. echo '<a style="text-decoration: none;" href="/szukaj/subpage/'.$i.'">'.$i.' </a>';
  73. }
  74. if($subpage < $stron)
  75. echo ' <a style="text-decoration: none;" href="'.$nextLink.'">Następna strona</a>';
  76. echo '</div>';
  77. }
  78. mysql_close($connect);
  79. ?>


PS. Nie pokazuje nawet napisów Następna strona, Poprzednia strona, a wpisując w adres przeglądarki /szukaj/subpage/2 wyświetla komunikat:
Formularz został wypełniony niepoprawnie!
Nie można wyświetlić wyników wyszukiwania!
marcio
Daj kod w tagi php bo niezla kiszka wyszla i nie idzie sie doczytac.
adrianozo
Tagi dodane smile.gif

Jak na razie udało mi się pokazać Liczbę stron, napis poprzednia strona i napis następna strona, ponieważ usunąłem z zapytania
  1. ORDER BY `id` DESC LIMIT ".filtr($start).", ".filtr($perPage)."


Teraz pytanie. Jak ustalić limit w zapytaniu z UNION?

Ok zmieniłem.
Z zapytania zupełnie usunąłem
  1. ORDER BY `id` DESC LIMIT ".filtr($start).", ".filtr($perPage)."

I zmieniłem
  1. for($x=0;$x<$oblicz;$x++)
na
  1. for($x=0;$x<5;$x++)




EDIT:


No to pojawił się problem z tym kodem
  1. for($x=0;$x<5;$x++)


Przypuśćmy, że znajdzie mi 4 rekordy. To co wtedy?

1. pierwszy rekord

2. drugi rekord

3. trzeci rekord

4. czwarty rekord

5.

A poza tym nie działa stronicowanie tj. Wyszukując np. frazę technologia znajduje 36 rekordów. Dzieli je po 5 na stronę, ale chcąc przejść do następnej podstrony tj. szukaj/subpage/2 wyświetla komunikat
Formularz został wypełniony niepoprawnie!
Nie można wyświetlić wyników wyszukiwania!

Nie bardzo wiem jak temu zaradzić.


Cytat(adrianozo @ 7.02.2010, 18:25:38 ) *
Przypuśćmy, że znajdzie mi 4 rekordy. To co wtedy?

1. pierwszy rekord

2. drugi rekord

3. trzeci rekord

4. czwarty rekord

5.


To tak: ten problem rozwiązany jeszcze tylko to: chcąc przejść do następnej podstrony tj. szukaj/subpage/2 wyświetla komunikat
Formularz został wypełniony niepoprawnie!
Nie można wyświetlić wyników wyszukiwania!
marcio
Cytat
To tak: ten problem rozwiązany jeszcze tylko to: chcąc przejść do następnej podstrony tj. szukaj/subpage/2 wyświetla komunikat
Formularz został wypełniony niepoprawnie!
Nie można wyświetlić wyników wyszukiwania!

Wedlug mnie problem polega na tym ze jak przechodzisz na druga strone to POST masz puste i dlatego warunek czy $_POST['wynik'] jest pusty zwraca ci true dlatego masz error.
Albo dodaj szukana fraze do sesji i sprawdzaj sesje albo bardziej adekwatywne do wyszukiwarki bylo by uzyc $_GET'a.
adrianozo
Ok zmieniłem i działa

Taki adres działa:

strona.pl/index.php?page=szukaj&wynik=technologia&subpage=2

a chciałbym taki

strona.pl/szukaj/wynik/technologia/subpage/2

.htaccess za to odpowiadający:
Kod
RewriteCond %{REQUEST_FILENAME} !-s
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^szukaj/wynik/([a-z0-9_-]+)/subpage/([a-z0-9_-]+) index.php?page=szukaj&wynik=$1&subpage=$2


i teraz mam problem bo nie wiem co dać

  1. $prevLink = '/szukaj/wynik/tutaj/subpage/'.$prev.'';


Ok już mam

  1. $prevLink = '/szukaj/wynik/'.$wynik_filtru.'/subpage/'.$prev.'';


Dzięki za pomoc smile.gif

Teraz pozostało pytanie jak zmienić formularz

  1. <form action="/szukaj" method="get">
  2. <input type="text" name="wynik" value="Szukaj w serwisie..." onclick="this.value=' '" />
  3. <input class="przycisk_szukaj" type="submit" value="Szukaj" />
  4. </form>


Formularz próbuje wyszukać tak:

szukaj/wynik?=+tutaj
a chciałbym
szukaj/wynik/tutaj

Coraz to nowe poprawki wprowadzam bo nie zawsze działa jak chcę i teraz mam problem:
Otóż:
1. Dzieli na strony i wyświetla Poprzednia strona 1 2 3 4 5 6 7 Następna strona
Ale na każdej podstronie to samo i tyle samo
2. Wyświetla: jeśli jest 7 stron i 36 rekordów to wyświetla 7 razy 36 rekordów.

szukaj.php
  1. <h2>Wyniki wyszukiwania</h2>
  2. <form action="/szukaj" method="post">
  3. <input type="text" name="wynik" value="Szukaj w serwisie..." onclick="this.value=' '" />
  4. <input class="przycisk_szukaj" type="submit" value="Szukaj" />
  5. </form><br />
  6. <?php
  7. include('functions/filtr.php');
  8. include('include/db.php');
  9. $subpage = $_GET['page'];
  10. $perPage = 5;
  11. if (!empty($_GET['subpage']))
  12. {
  13. if (is_numeric($_GET['subpage']))
  14. {
  15. $subpage = (int) $_GET['subpage'];
  16. }
  17. }
  18. if ($subpage < 1)
  19. {
  20. $subpage = 1;
  21. }
  22. $start = ($subpage - 1) * $perPage;
  23. $wynik_filtru = trim($_GET['wynik']);
  24. if(empty($wynik_filtru))
  25. {
  26. echo '<font color="red"><b>Formularz został wypełniony niepoprawnie!<br /> Nie można wyświetlić wyników wyszukiwania!</b></font>';
  27. echo '<br /><br />';
  28. }
  29. else
  30. {
  31. $zapytanie = "SELECT `id`, `tresc`, `adres`, `numer` FROM home WHERE tresc LIKE '%{$wynik_filtru}%'
  32. UNION SELECT `id`, `tresc`, `adres`, `numer` FROM kontakt WHERE tresc LIKE '%{$wynik_filtru}%'
  33. UNION SELECT `id`, `tresc`, `adres`, `numer` FROM oferta WHERE tresc LIKE '%{$wynik_filtru}%'
  34. UNION SELECT `id`, `tresc`, `adres`, `numer` FROM o_mnie WHERE tresc LIKE '%{$wynik_filtru}%'
  35. UNION SELECT `id`, `tresc`, `adres`, `numer` FROM portfolio WHERE tresc LIKE '%{$wynik_filtru}%'
  36. UNION SELECT `id`, `nazwa`, `adres`, `numer` FROM portfolio WHERE nazwa LIKE '%{$wynik_filtru}%'
  37. UNION SELECT `id`, `technologia`, `adres`, `numer` FROM portfolio WHERE technologia LIKE '%{$wynik_filtru}%'
  38. UNION SELECT `id`, `adres_strony`, `adres`, `numer` FROM portfolio WHERE adres_strony LIKE '%{$wynik_filtru}%'
  39. UNION SELECT `id`, `tresc`, `adres`, `numer` FROM reklama WHERE tresc LIKE '%{$wynik_filtru}%'
  40. UNION SELECT `id`, `tresc`, `adres`, `numer` FROM skrypty WHERE tresc LIKE '%{$wynik_filtru}%'
  41. UNION SELECT `id`, `nazwa`, `adres`, `numer` FROM skrypty WHERE nazwa LIKE '%{$wynik_filtru}%'";
  42. $idzapytania = mysql_query($zapytanie) or die (mysql_error());
  43. $ile = mysql_num_rows($idzapytania);
  44. }
  45. if (!isset($_GET['id']) or empty($_GET['id']))
  46. {
  47. echo 'Znaleziono: '.$ile.'<br /><br />';
  48. while ($wiersz = mysql_fetch_array($idzapytania))
  49. {
  50. if($wiersz['tresc'] != '')
  51. {
  52. for($x=0;$x<$ile;$x++)
  53. {
  54. echo $x+1;
  55. echo '. ';
  56. $wyraz = explode(' ',substr($wiersz['tresc'], 50));
  57. $wyrazy = substr($wiersz['tresc'], 0, 50).$wyraz[0];
  58. $wyraz = $wyrazy;
  59. $array = array('','','','','','','','','[small]','[/small]',
  60. '[big]','[/big]','[p]','[/p]','
    ','
    '
    ,'','',
  61. '','','[hr=([0-9]{1,2}|100)]','[/hr]');
  62. $wyrazek = str_replace($array,'',$wyraz);
  63. echo '<a style="text-decoration: none;" href="'.$wiersz['adres'].'/'.$wiersz['numer'].'"><b>'.$wyrazek.'</b></a>';
  64. echo'<br /><br />';
  65. }
  66. }
  67. }
  68. $prev = $subpage - 1;
  69. $next = $subpage + 1;
  70. $prevLink = '/szukaj/wynik/'.$wynik_filtru.'/subpage/'.$prev.'';
  71. $nextLink = '/szukaj/wynik/'.$wynik_filtru.'/subpage/'.$next.'';
  72. echo '<div style="text-align:center;">';
  73. if($subpage > 1)
  74. echo'<a style="text-decoration: none;" href="'.$prevLink.'">Poprzednia strona</a> ';
  75. $stron=round($ile/$perPage);
  76. for($i=1; $i<=$stron; ++$i)
  77. {
  78. if($i==$subpage)
  79. echo '<b>'.$i.' </b>';
  80. else
  81. echo '<a style="text-decoration: none;" href="/szukaj/wynik/'.$wynik_filtru.'/subpage/'.$i.'">'.$i.' </a>';
  82. }
  83. if($subpage < $stron)
  84. echo ' <a style="text-decoration: none;" href="'.$nextLink.'">Następna strona</a>';
  85. echo '</div>';
  86. }
  87. mysql_close($connect);
  88. ?>


  1. <h2>Wyniki wyszukiwania</h2>
  2. <form action="/szukaj" method="post">
  3. <input type="text" name="wynik" value="Szukaj w serwisie..." onclick="this.value=' '" />
  4. <input class="przycisk_szukaj" type="submit" value="Szukaj" />
  5. </form><br />
  6. <?php
  7. include('functions/filtr.php');
  8. include('include/db.php');
  9. $subpage = $_GET['page'];
  10. $perPage = 5;
  11. if (!empty($_GET['subpage']))
  12. {
  13. if (is_numeric($_GET['subpage']))
  14. {
  15. $subpage = (int) $_GET['subpage'];
  16. }
  17. }
  18. if ($subpage < 1)
  19. {
  20. $subpage = 1;
  21. }
  22. $start = ($subpage - 1) * $perPage;
  23. $wynik_filtru = trim($_GET['wynik']);
  24. if(empty($wynik_filtru))
  25. {
  26. echo '<font color="red"><b>Formularz został wypełniony niepoprawnie!<br /> Nie można wyświetlić wyników wyszukiwania!</b></font>';
  27. echo '<br /><br />';
  28. }
  29. else
  30. {
  31. $zapytanie = "SELECT `id`, `tresc`, `adres`, `numer` FROM home WHERE tresc LIKE '%{$wynik_filtru}%'
  32. UNION SELECT `id`, `tresc`, `adres`, `numer` FROM kontakt WHERE tresc LIKE '%{$wynik_filtru}%'
  33. UNION SELECT `id`, `tresc`, `adres`, `numer` FROM oferta WHERE tresc LIKE '%{$wynik_filtru}%'
  34. UNION SELECT `id`, `tresc`, `adres`, `numer` FROM o_mnie WHERE tresc LIKE '%{$wynik_filtru}%'
  35. UNION SELECT `id`, `tresc`, `adres`, `numer` FROM portfolio WHERE tresc LIKE '%{$wynik_filtru}%'
  36. UNION SELECT `id`, `nazwa`, `adres`, `numer` FROM portfolio WHERE nazwa LIKE '%{$wynik_filtru}%'
  37. UNION SELECT `id`, `technologia`, `adres`, `numer` FROM portfolio WHERE technologia LIKE '%{$wynik_filtru}%'
  38. UNION SELECT `id`, `adres_strony`, `adres`, `numer` FROM portfolio WHERE adres_strony LIKE '%{$wynik_filtru}%'
  39. UNION SELECT `id`, `tresc`, `adres`, `numer` FROM reklama WHERE tresc LIKE '%{$wynik_filtru}%'
  40. UNION SELECT `id`, `tresc`, `adres`, `numer` FROM skrypty WHERE tresc LIKE '%{$wynik_filtru}%'
  41. UNION SELECT `id`, `nazwa`, `adres`, `numer` FROM skrypty WHERE nazwa LIKE '%{$wynik_filtru}%'";
  42. $idzapytania = mysql_query($zapytanie) or die (mysql_error());
  43. $ile = mysql_num_rows($idzapytania);
  44. }
  45. if (!isset($_GET['id']) or empty($_GET['id']))
  46. {
  47. echo 'Znaleziono: '.$ile.'<br /><br />';
  48. while ($wiersz = mysql_fetch_array($idzapytania))
  49. {
  50. if($wiersz['tresc'] != '')
  51. {
  52. $wyraz = explode(' ',substr($wiersz['tresc'], 50));
  53. $wyrazy = substr($wiersz['tresc'], 0, 50).$wyraz[0];
  54. $wyraz = $wyrazy;
  55. $array = array('','','','','','','','','[small]','[/small]',
  56. '[big]','[/big]','[p]','[/p]','
    ','
    '
    ,'','',
  57. '','','[hr=([0-9]{1,2}|100)]','[/hr]');
  58. $wyrazek = str_replace($array,'',$wyraz);
  59. echo '<a style="text-decoration: none;" href="'.$wiersz['adres'].'/'.$wiersz['numer'].'"><b>'.$wyrazek.'</b></a>';
  60. echo'<br /><br />';
  61. }
  62. }
  63. $prev = $subpage - 1;
  64. $next = $subpage + 1;
  65. $prevLink = '/szukaj/wynik/'.$wynik_filtru.'/subpage/'.$prev.'';
  66. $nextLink = '/szukaj/wynik/'.$wynik_filtru.'/subpage/'.$next.'';
  67. echo '<div style="text-align:center;">';
  68. if($subpage > 1)
  69. echo'<a style="text-decoration: none;" href="'.$prevLink.'">Poprzednia strona</a> ';
  70. $stron=round($ile/$perPage);
  71. for($i=1; $i<=$stron; ++$i)
  72. {
  73. if($i==$subpage)
  74. echo '<b>'.$i.' </b>';
  75. else
  76. echo '<a style="text-decoration: none;" href="/szukaj/wynik/'.$wynik_filtru.'/subpage/'.$i.'">'.$i.' </a>';
  77. }
  78. if($subpage < $stron)
  79. echo ' <a style="text-decoration: none;" href="'.$nextLink.'">Następna strona</a>';
  80. echo '</div>';
  81. }
  82. mysql_close($connect);
  83. ?>


To tak:
1. pokazuje Znaleziono: 36 i 1 2 3 4 5 6 7 Następna strona
Tylko, że na każdej stronie pokazuje to samo i jeszcze zamiast 5 wyników na każdej to wszystkie 36 na każdej

Mam problem z formularzem.

  1. <?php
  2. $wynik_filtru = trim($_GET['wynik']);
  3. echo '<h2>Wyniki wyszukiwania</h2>';
  4. echo '<form action="/szukaj/wynik/'.$wynik_filtru.'" method="post">';
  5. ?>
  6. <input type="text" name="wynik" value="Szukaj w serwisie..." onclick="this.value=' '" />
  7. <input class="przycisk_szukaj" type="submit" value="Szukaj" />
  8. </form><br />


i robi tylko takie coś:

adres.pl/szukaj/wynik/

a powinien

adres.pl/szukaj/wynik/to_co_wpisze_w type="text"
nie wiem jak to zrobić.
Proszę o pomoc smile.gif
altruista2
zamień method=post na method=get
adrianozo
To nic nie daje
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.