Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Opcja szukaj na stronie.
Forum PHP.pl > Forum > PHP
Mateusz10
Witam! Chciałbym stworzyć na swoim portalu wyszukiwarkę treści tylko z mojej strony aby można tam było wpisać słowo i aby pokazywało wszystkie tematy aktualności z tym związane. Jak to zrobić
Spawnm
w zapytaniu sql użyj LIKE "%$wyraz%"
alegorn
to zalezy jak masz zbudowana storne, a dokladniej gdzie trzymasz tresc po ktorej chcesz wyszukiwac.

jesli w plikach - to prosto,
tworzysz iterator po katalogu, przechodzisz po kazdym prawidlowym pliku, sprawdzasz wyrazeniami regularnymi i wyswietlasz wynik.
jesli content masz w bazie danych - to po prostu preparujesz odpowiedniego sql'a i wyswietlasz wynik,
ewent hybryda obu opcji

oczywiscie to tak w wielkim skrocie, pamietaj o zabezpieczeniu sie na zlosliwy kod, a przy przeszukiwaniu tresci - radze wyciac wczesniej wszelkiego typu znaki html (takze wyrazeniem regularnym)

oczywiscie - przeszukiwanie calosci rozbudowanego serwisu w ten sposob to dosc czasochlonne moze byc, jesli czas swykonywania jest zbyt wielki - trzeba by bylo pomyslec o zindeksowaniu calosci.... ale to juz inna bajka.

tak naprawde poziom trudnosci wykonania tego o czym napisalem - zalezy od stopnia skomplikowania wyszukiwarki... to o czym napisalem, jest do wykonania w mniej niz pol godziny(w najprostszej postaci), i to z testami...
Mateusz10
Wyszukiwarka ma przeszukiwać pliki stron. A może podacie jakiś konkretny skrypt?
alegorn
to tak na szybko, bez wiekszej finezji i zabezpieczen...
  1. <?php
  2. //tablica plikow po ktorch nie wyszukujemy plikow
  3. $arrWyklucz = array(
  4.    'index.php'
  5. );
  6.  
  7. // szukany ciag
  8. $query = (isset($_REQUEST['query']))?$_REQUEST['query']:null;
  9. if(!empty($query)){
  10.    $query = htmlentities($query);
  11.    $dir = new DirectoryIterator(dirname(__FILE__));
  12.    $arSearch = array();
  13.    foreach ($dir as $fileinfo) {
  14.        if (!$fileinfo->isDot()) {
  15.            $fname = $fileinfo->getFilename();
  16.            if(in_array($fname,$arrWyklucz))
  17.                continue;
  18.    
  19.            $fpath = dirname(__FILE__) . '/'. $fname;
  20.            $fn = explode('.',$fname);
  21.            $ext = array_pop($fn);
  22.            //szukam tylko w plikach z rozszezeniem PHP
  23.            if ($ext =="php"){
  24.                $f = fopen($fpath,'r');
  25.                $tresc = file_get_contents($f);
  26.                $sprawdz = ereg("(".$query.")", $tresc);
  27.                if($sprawdz !== false){
  28.                    $arSearch[] = '<a href="'.TUTAJ_URL.$fname.'">'.$fn[0].'</a>';
  29.                }
  30.            }
  31.        }
  32.    }
  33. }
  34. if(count($arSearch)>0)
  35.    echo join('<br />', $arSearch);
  36. else
  37.    echo 'nie znalazlem';
  38. ?>
Mateusz10
A jak to podkleić pod ramkę wyszukiwania? bo jak wkleiłem na strone to pisze nie znalazłem i to wszystko.

Pomocy! DO czego wkleić ten kod?
Spawnm
Cytat(Mateusz10 @ 24.06.2009, 15:40:14 ) *
Pomocy! DO czego wkleić ten kod?

Do pliku winksmiley.jpg

Pokaż jak obecnie wygląda twój kod.

a to

  1. <?php
  2. if(count($arSearch)>0)
  3.   echo join('<br />', $arSearch);
  4. else
  5.   echo 'nie znalazlem';
  6. ?>


dał bym w klamerce od
if(!empty($query)){
Mateusz10
Ale ja nie mam pojęcia jak to podkleić do strony. Możecie mi powiedzieć jak to zrobić?
alegorn
hmm... okazalo sie ze zrobilem maly error winksmiley.jpg, tak bywa jak sie z glowy bez sprawdzania pisze.

tu masz caly plik, lacznie z formularzem do wywolania, zapisz go i zadziala... dalej to juz chyba sobie poradzisz...

  1. <form action="?"><input name="query" /> <input type="submit" /></form>
  2. <?php
  3. //tablica plikow po ktorch nie wyszukujemy plikow
  4. $arrWyklucz = array(
  5.   'index.php'
  6. );
  7.  
  8. // szukany ciag
  9. $query = (isset($_REQUEST['query']))?$_REQUEST['query']:null;
  10. if(!empty($query)){
  11.   $query = htmlentities($query);
  12.   $dir = new DirectoryIterator(dirname(__FILE__));
  13.   $arSearch = array();
  14.   foreach ($dir as $fileinfo) {
  15.       if (!$fileinfo->isDot()) {
  16.           $fname = $fileinfo->getFilename();
  17.           if(in_array($fname,$arrWyklucz))
  18.               continue;
  19.  
  20.           $fpath = dirname(__FILE__) . '/'. $fname;
  21.           $fn = explode('.',$fname);
  22.           $ext = array_pop($fn);
  23.           //szukam tylko w plikach z rozszezeniem PHP
  24.           if ($ext =="php"){
  25.               $tresc = file_get_contents($fpath);
  26.               $sprawdz = ereg("(".$query.")", $tresc);
  27.               if($sprawdz !== false){
  28.                   $arSearch[] = '<a href="'.TUTAJ_URL.$fname.'">'.$fn[0].'</a>';
  29.               }
  30.           }
  31.       }
  32.   }
  33. }
  34. if(!empty($query))
  35.    if(count($arSearch)>0)
  36.       echo join('<br />', $arSearch);
  37.    else
  38.       echo 'nie znalazlem';
  39. ?>



tym razem testowalem - dziala:)
Mateusz10
A u mnie na stronie jak wpisze i dam wyszukaj to pisze:

Fatal error: Cannot instantiate non-existent class: directoryiterator in /var/www/sites/yoyo.pl/m/i/miso/menu.php on line 40
Crozin
Czyżbyś miał PHP4?
Mateusz10
wątpie gdyż na yoyo.pl pisze iż jest tam php 5 więc co jest przyczyną? a może nie tam gdzie trzeba dodałem skrypt? bo ja mam tak w index.php jest menu i tam jest include do menu.php i w tym menu.php jest menu rozwijane i pod nim wyszukiwarka.
erix
Albo masz czwórkę włączoną, albo za starą piątkę.

Co masz w phpinfo" title="Zobacz w manualu PHP" target="_manual?
Mateusz10
już mam, takie coś mi wyskoczyło.

Kod
4.4.4-8+etch4yoyo1


Jak zmienić php na 5?
erix
Jesteśmy pomocą hostingu?

Poszukaj w panelu/na forum.
Mateusz10
Czyli zmienić hosting i będzie dobrze tak?
Crozin
Czyli zapytać obsługę hostingu, albo wklepać w google: jak zmienić na php5 [tu nazwa hostingu]
lejf
Pozwolę sobie odświeżyć temat.
Wyszukiwarka podana przez alegorna działa z wyjątkiem słów zawierających polskie znaki.
Zwraca wtedy brak wyników.
Może jakieś rozwązanie nie nazbyt skomplikowane komuś się nasuwa?

Pozdrawiam
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.