Drukowana wersja tematu

Kliknij tu, aby zobaczyć temat w orginalnym formacie

Forum PHP.pl _ PHP _ Wyszukiwarka na statycznej stronie www

Napisany przez: inuma 10.06.2019, 11:53:34

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


Chciałbym jednak zmienić
  1. http://www.php.net/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

Napisany przez: sratatata 11.06.2019, 14:16:07

ten Twoj przyklad jest be z sensu. Po pierwsze pobierze 'cośtam' z jednego pliku.

Napisany przez: 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.

Napisany przez: sratatata 12.06.2019, 12:16:05

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 = http://www.php.net/array('index.php', 'index2.php'); // pliki ktorych nie chcesz
  8. $sll = http://www.php.net/array();
  9.  
  10. $dir = scandir($main);
  11.  
  12. foreach($dir as $file)
  13. {
  14. if($file != '.' && $file != '..' && (!http://www.php.net/in_array($file, $deny)))
  15. {
  16. if(!http://www.php.net/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 = http://www.php.net/explode(" ",http://www.php.net/join(" ",http://www.php.net/file("./".$next)));
  38.  
  39. for($tmp=0;$tmp<count($slowa);$tmp++) {
  40.  
  41. if(http://www.php.net/strstr($slowa[$tmp],$szukana)){
  42. $nr++;
  43. $tmpData[]="[$nr]<br>";
  44. for($i=$tmp-5;$i<=$tmp+5;$i++){
  45. if(http://www.php.net/isset($slowa[$i]))
  46. {
  47. if($i==$tmp) {
  48. $tmpData[http://www.php.net/count($tmpData)-1].="<b>$slowa[$i]</b> ";
  49. }else{
  50. $tmpData[http://www.php.net/count($tmpData)-1].="$slowa[$i] ";
  51. }
  52. }
  53. }
  54. $tmpData[http://www.php.net/count($tmpData)-1].="...";
  55. $tmpData[http://www.php.net/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. http://www.php.net/print $val;
  69.  
  70. }
  71.  
  72.  
  73.  
  74.  
  75. ?>


Napisany przez: 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?

Napisany przez: sratatata2 12.06.2019, 20:52:15

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 = http://www.php.net/array('index.php', 'index2.php', 'znajdz.php'); // pliki ktorych nie chcesz
  7. $sll = http://www.php.net/array();
  8.  
  9. $dir = scandir($main);
  10.  
  11. foreach($dir as $file)
  12. {
  13. if($file != '.' && $file != '..' && (!http://www.php.net/in_array($file, $deny)) && (http://www.php.net/substr($file,-http://www.php.net/strlen('.php'))=='.php') )
  14. {
  15. if(!http://www.php.net/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 = http://www.php.net/explode(" ",http://www.php.net/join(" ",http://www.php.net/file("./".$next)));
  37.  
  38. for($tmp=0;$tmp<count($slowa);$tmp++) {
  39.  
  40. if(http://www.php.net/strstr($slowa[$tmp],$szukana)){
  41. $nr++;
  42. $tmpData[]="[$nr]<br>";
  43. for($i=$tmp-5;$i<=$tmp+5;$i++){
  44. if(http://www.php.net/isset($slowa[$i]))
  45. {
  46. if($i==$tmp) {
  47. $tmpData[http://www.php.net/count($tmpData)-1].="<b>$slowa[$i]</b> <p>";
  48. }else{
  49. $tmpData[http://www.php.net/count($tmpData)-1].="$slowa[$i] ";
  50. }
  51. }
  52. }
  53. $tmpData[http://www.php.net/count($tmpData)-1].="...";
  54. $tmpData[http://www.php.net/count($tmpData)-1].="<p>";
  55. $tmpData[http://www.php.net/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. http://www.php.net/print $val;
  69.  
  70. }
  71.  
  72.  
  73.  
  74.  
  75. ?>


Musisz dorobic sobie formularz i podpiac po to.

Tablica

  1. $deny = http://www.php.net/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. (http://www.php.net/substr($file,-http://www.php.net/strlen('.php'))=='.php') )

Napisany przez: inuma 13.06.2019, 21:13:30

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

Napisany przez: dublinka 14.06.2019, 08:19:32

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.

Napisany przez: inuma 14.06.2019, 11:43:39

ale gdzie dokładnie wpisać to strtolower()

Napisany przez: dublinka 14.06.2019, 12:08:55

Cytat(inuma @ 14.06.2019, 11:43:39 ) *
ale gdzie dokładnie wpisać to strtolower()


Przeczytaj odpowiedz wyżej.


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)