Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wyszukiwarka na statycznej stronie www
Forum PHP.pl > Forum > PHP
inuma
Szukam prostego skryptu, który realizowałby prościutkie wyszukiwanie na podstronach www. (Nie w bazie mysql!) Stronę mam bez bazy, tylko html i css, mogę przerobić na php. Chodzi mi o samo okienko "search", wyniki na osobnej podstronie, jeden pod drugim z kawałkiem tekstu z "otoczenia" znalezionej frazy

znalazłem taki prosty kod:

  1. <?php
  2. $gdzie_szukac = 'http://domena.tld';
  3. echo '<a target=_blank href='."$gdzie_szukac".'/>'.$gdzie_szukac.'</a>';
  4. $tekst = file_get_contents( $gdzie_szukac );
  5. $wzorzec = '/szukany_ciag/';
  6. preg_match_all($wzorzec, $tekst, $wyniki);
  7. if (count($wyniki[0]) > 0) {
  8. echo ' - znalazlem';
  9. }
  10. else echo ' - nie znalazlem';
  11. ?>


Chciałbym jednak zmienić
  1. echo ' - znalazlem';


na wyświetlanie szukanego stringa wraz z kilkoma słowami wcześniej i kilkoma później. I jeśli są, wyświetlanie wielu takich odpowiedzi jedna pod drugą nie na oddzielnej stronie, ale na stronie gdzie jest formularz wyszukiwania
sratatata
ten Twoj przyklad jest be z sensu. Po pierwsze pobierze 'cośtam' z jednego pliku.
inuma
Można go przerobić na taki który ściąga z kilku plików. Już na upartego powiedzmy że są to pliki tekstowe. Chodzi mi o funkcje, które wyświetlą szukany string wraz z jego najbliższymi liniami.
sratatata
Cytat(inuma @ 11.06.2019, 15:23:44 ) *
Można go przerobić na taki który ściąga z kilku plików. Już na upartego powiedzmy że są to pliki tekstowe. Chodzi mi o funkcje, które wyświetlą szukany string wraz z jego najbliższymi liniami.


Msz i nie marudz ze wójek @sratatata jest zly
Here we go.;..

  1. <?php
  2. if(!function_exists('Sh'))
  3. {
  4. function ShowAllTree($main)
  5. {
  6.  
  7. $deny = array('index.php', 'index2.php'); // pliki ktorych nie chcesz
  8. $sll = array();
  9.  
  10. $dir = scandir($main);
  11.  
  12. foreach($dir as $file)
  13. {
  14. if($file != '.' && $file != '..' && (!in_array($file, $deny)))
  15. {
  16. if(!is_dir($file))
  17. {
  18. $all[] = $file;
  19. }
  20.  
  21. }
  22. }
  23.  
  24. return $all;
  25. }
  26.  
  27. }
  28.  
  29. $tabr = ShowAllTree('./');
  30.  
  31. $szukana = 'kota';
  32. $nr=0;
  33. foreach($tabr as $next)
  34. {
  35.  
  36.  
  37. $slowa = explode(" ",join(" ",file("./".$next)));
  38.  
  39. for($tmp=0;$tmp<count($slowa);$tmp++) {
  40.  
  41. if(strstr($slowa[$tmp],$szukana)){
  42. $nr++;
  43. $tmpData[]="[$nr]<br>";
  44. for($i=$tmp-5;$i<=$tmp+5;$i++){
  45. if(isset($slowa[$i]))
  46. {
  47. if($i==$tmp) {
  48. $tmpData[count($tmpData)-1].="<b>$slowa[$i]</b> ";
  49. }else{
  50. $tmpData[count($tmpData)-1].="$slowa[$i] ";
  51. }
  52. }
  53. }
  54. $tmpData[count($tmpData)-1].="...";
  55. $tmpData[count($tmpData)-1].="<a HREF='$next'>Wiecej...</A>";
  56. }
  57. }
  58.  
  59.  
  60.  
  61.  
  62. }
  63.  
  64.  
  65. foreach($tmpData as $val)
  66. {
  67.  
  68. print $val;
  69.  
  70. }
  71.  
  72.  
  73.  
  74.  
  75. ?>

inuma
Jak to zastosować do strony? Chcę umieścić formularz wyszukiwania na stronie index i jeszcze kilku innych i niech przeszukuje katalog z wyłączeniem niektórych plików (graficznych i innych). Jak uruchamiać te funkcje?
Ten kod jest dla mnie zbyt skomplikowany.


czy umieści ten kod w osobnym pliku np search.php i uruchamiać go post?
sratatata2
Cytat(inuma @ 12.06.2019, 17:04:06 ) *
Jak to zastosować do strony? Chcę umieścić formularz wyszukiwania na stronie index i jeszcze kilku innych i niech przeszukuje katalog z wyłączeniem niektórych plików (graficznych i innych). Jak uruchamiać te funkcje?
Ten kod jest dla mnie zbyt skomplikowany.


czy umieści ten kod w osobnym pliku np search.php i uruchamiać go post?


Cytat(inuma @ 12.06.2019, 17:04:06 ) *
Ten kod jest dla mnie zbyt skomplikowany.


Jesli gotowy przyklad jest dla Ciebie skomplikowany to moze sobie daruj.

Przyklad posiada tablice gdzie podajesz nazwy plikow ktore nie chcesz otwierac do przegladania.

  1. <?php
  2.  
  3. function ShowAllTree($main)
  4. {
  5.  
  6. $deny = array('index.php', 'index2.php', 'znajdz.php'); // pliki ktorych nie chcesz
  7. $sll = array();
  8.  
  9. $dir = scandir($main);
  10.  
  11. foreach($dir as $file)
  12. {
  13. if($file != '.' && $file != '..' && (!in_array($file, $deny)) && (substr($file,-strlen('.php'))=='.php') )
  14. {
  15. if(!is_dir($file))
  16. {
  17. $all[] = $file;
  18. }
  19.  
  20. }
  21. }
  22.  
  23. return $all;
  24. }
  25.  
  26.  
  27.  
  28. $tabr = ShowAllTree('./');
  29.  
  30. $szukana = 'kota';
  31. $nr=0;
  32. foreach($tabr as $next)
  33. {
  34.  
  35.  
  36. $slowa = explode(" ",join(" ",file("./".$next)));
  37.  
  38. for($tmp=0;$tmp<count($slowa);$tmp++) {
  39.  
  40. if(strstr($slowa[$tmp],$szukana)){
  41. $nr++;
  42. $tmpData[]="[$nr]<br>";
  43. for($i=$tmp-5;$i<=$tmp+5;$i++){
  44. if(isset($slowa[$i]))
  45. {
  46. if($i==$tmp) {
  47. $tmpData[count($tmpData)-1].="<b>$slowa[$i]</b> <p>";
  48. }else{
  49. $tmpData[count($tmpData)-1].="$slowa[$i] ";
  50. }
  51. }
  52. }
  53. $tmpData[count($tmpData)-1].="...";
  54. $tmpData[count($tmpData)-1].="<p>";
  55. $tmpData[count($tmpData)-1].="<a HREF=$next>Wiecej...</A><p>";
  56. }
  57. }
  58.  
  59.  
  60.  
  61.  
  62. }
  63.  
  64.  
  65. foreach($tmpData as $val)
  66. {
  67.  
  68. print $val;
  69.  
  70. }
  71.  
  72.  
  73.  
  74.  
  75. ?>


Musisz dorobic sobie formularz i podpiac po to.

Tablica

  1. $deny = array('index.php', 'index2.php', 'znajdz.php');


zawiera nazwy plikow ktore chcesz pominac w wyszukiwaniu. Aktualnie do wyszukania sa tylko i wylacznie pliki .php. Jesl ichcesz zmienic na inne to mozesz sam to zrobic

  1. (substr($file,-strlen('.php'))=='.php') )
inuma
Działa świetnie. Pomogłeś. Dzięki.

Jest tylko jeden problem. Wyszukiwarka traktuje osobno wielkie i małe litery. Jak M to znajduje Matematyka jak m matematyka a tamtego już nie ma w listingu
jak usunąć to case sensitive
dublinka
Do lower case jest funkcja strtolower();
Żeby było jak chcesz to musisz objąć szukaną frazę tą funkcją i ciag znaków rownież.Czyli to co jest w f. strtr(). Mozna tez zamienic wszystko na duże bo to znaczenia nie ma. Ważne żeby jedno i drugie mialo albo male albo duze litery zeby moc porownac. Jesli chcesz na duże (upper case) to strtoupper().
Dla wyniku to nie ma znaczenia bo to sie wykona w locie a wynik i tak sie wyswietli taki jaki jest w originale.
inuma
ale gdzie dokładnie wpisać to strtolower()
dublinka
Cytat(inuma @ 14.06.2019, 11:43:39 ) *
ale gdzie dokładnie wpisać to strtolower()


Przeczytaj odpowiedz wyżej.

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-2019 Invision Power Services, Inc.