ďťż

[php/sql]Wyszukiwarka

       

Podstrony


telcocafe

Witam
Potrzebna jest mi darmowa wyszukiwarka która przeszuka moją baze danych w poszukiwaniu podanej frazy. Znalazłem kilka ale niestety nie działają, albo ja nie umiem ich skonfigurować (1 była płatna:P). Najlepiej gdyby była jak najprostsza bo nie tylko ja mam z niej korzystać a dodatkowo zależy mi na czasie. Czy ktoś może mi coś polecić, ew. jakoś doradzić jak sameu machnąć to...ale samemu to raczej nie wyrobie czasowo i nie napisze nic wydajnego :/



http://www.php.rk.ed...e-wyszukiwanie/
Prosto i szybko to zrobisz raczej :)

To może skorzystaj z możliwości profesjonalnych wyszukiwarek. Możesz np. Google wstawić na swoją stronę. Masz jakieś strony i podstrony (czyli de facto zawartość bazy danych), które są już w indexie Google, więc z Twojej strony nie ma praktycznie żadnej pracy. A stworzenie porządnej szukajki samodzielnie to trochę pisania, w zależności jaką sobie zrobiłeś strukturę bazy, stron i hiperłączy między nimi.

a takie szybkie pytnaie....
zakładając, ze słowa kluczowe mam rozdzielone średnikami

słowo1;słowo2;słowo3

zda to egzamin?

coś lipa bo nie działa wogóle :P działa tylko jak podam w 100% identyczne słowo co do znaku i spacji a to nie za dużo mi daje
szczególnie, że narazie testuje na pojedyńczych frazach w komórce
Użytkownik Dawid-San edytował ten post 29 kwiecień 2007, 17:41


coś mi się zdaję że nie korzystałeś z LIKE w zapytaniu SQL. Powinno wyglądać tak:

"SELECT fraza from baza where like '%".$slowo."%'"

Co do słów kluczowych rozdzielonych średnikami trzeba zastosować funkcję explode z php
$slowo = $_POST('fraza'); $sl = explode(';', $slowo); $sl_count = count($sl); $zapytanie = '"SELECT fraza from baza where '; for ($i = 0; $i < $sl_count; $i++) { $zapytanie .= "like '%\" . $tab[$i] . \"%' "; if (!$i =$sl_count) { $zapytanie .="AND "; //lub OR } }

Pisane na sucho i może gdzieś być jakiś błąd ale chyba sobie poradzisz

$slowo = $_POST('fraza'); $sl = explode(';', $slowo);

tu się chyba pomyliłeś. Bo zakładam że $slowo to fraza którą chce wyszukać. Więc co mi da explode na $slowo?
to raczej powinno być tak:
$sl = explode(';', $slowa_kluczowe);
gdzie wcześniej $slowa_kluczowe wyciągam z tabeli

i jeszcze jakbyś mógł wyjaśnić to całą pętle w tym zapytaniu...bo nie za bardzo kminie. Nie łatwiej dać całe zapytanie w pętle ?
Użytkownik Dawid-San edytował ten post 30 kwiecień 2007, 14:55
Prócz tego co napisałem powyżej pojawia się jeszcze jeden problem. Otóż trzeba każdy rekord sprawdzić...

co wy na takie rozwiązanie?
$query = "SELECT * FROM tabela"; $result = mysql_query($query); while($item = mysql_fetch_array($result)) { $zapytanie = .... .... ... // tutaj zapytanie do wyszukania }

Trochę się nie zrozumieliśmy. Mi chodziło o to że jak ktoś wpisze w pole input coś takiego slowo1;slowo2;slowo3 a nastepnie wyśle przez POSTa to będzie musiał skrypt podzielić to coś na 3 oddzielne frazy które ma wyszukać w bazie. Po to ta cała zabawa z pętlą żeby utworzyć zapytanie. Na początku jest takie coś
SELECT fraza from baza where
później dopisujemy do tego zapytania odpowiednio LIKE %slowo1% AND LIKE %slowo2% AND LIKE %slowo3% tak że całe zapytanie wyglądało by tak
"SELECT fraza from baza where LIKE %slowo1% AND LIKE %slowo2% AND LIKE %slowo3%"
i teraz dopiero wysyłasz zapytanie do bazy danych

P.S Co do tego drugiego postu to jest dobre zabezpieczenie na ataki SQL Injection. Najpierw pobierasz wszystkie dane z bazy a następnie porównujesz je z danymi z zewnątrz(tych wysłanych przez użytkownika metoda POST lub GET).
Użytkownik deallas edytował ten post 30 kwiecień 2007, 16:41
no dobra, ale ja mam inaczej...w tabeli mam mam komórke słowa_kluczowe. Wpisane jest tam słowo1;słowo2;słowo3

użytkownik wpisuje do wyszukiwarki 'słowo1' i wyszukiwarka ma znaleźć który rekord ma taki wpis? Co radzisz?

to tak jak zrobiłeś. Pobierasz wszystkie dane z bazy. Następnie za pomocą explode rozdzielasz te dane, mniej wiecej tak
$sl = explode(';', $komórka_z_zapytania); $sl_count = count($sl);
dajesz to w pętle tak jak wcześniej pokazywałem i porównujesz z słowem które użytkownik przysłał.

Po co w PHP porównywać w pętli, jak to serwer zajedzie? Przecież bazy są dużo bardziej wydajne!

$query = "SELECT * FROM newsy WHERE tresc REGEXP '$fraza'";
Sądzę, że to wystarczy...
//oczywiście to jest do tagów (słów kluczowych)
Użytkownik pbnan edytował ten post 30 kwiecień 2007, 17:02
@pbnan - miodzioooooooooooooooooooooooo :) Przynajmniej jak narazie zobacze jak to dokładnie zakoduje hehe

no i wszystko ładnie pieknie, ale...jak sobie sprawdzam przez myadmin`a to zapytanie to jest ok. zwraca wiersze itp. Ale kiedy mam kodzik w php
$zapytanie = "SELECT * FROM content WHERE slowa_kluczowe REGEXP '$fraza'"; $wynik = mysql_query($zapytanie); $it = mysql_fetch_array($wynik); echo $it['con_id']."<br />";
to już lipa, nic nie zwracam
Użytkownik Dawid-San edytował ten post 30 kwiecień 2007, 17:31
A gdy zmienisz mysql_fetch_array na mysql_fetch_assoc to będzie działać?

tez nie...

dałem sobie echo $zapytanie; skopiowałem je i wrzuciłem przez myadmin i jest ok, ale wyszukiwarka nie zwraca wyników ;/

a echo mysql_errno() zwraca 0;

edit//
jak wrzuce
$ilosc = mysql_num_rows($wynik); echo $ilosc;
to zwraca 0 :/
Użytkownik Dawid-San edytował ten post 30 kwiecień 2007, 17:47
$zapytanie = "SELECT * FROM content WHERE slowa_kluczowe REGEXP '$fraza'"; $wynik = mysql_query($zapytanie); $ilosc = mysql_num_rows($wynik); echo 'Error: '.mysql_error().'<br/>'."\r\n"; echo 'Count: '.$ilosc.'<br/>'."\r\n"; while ($it = mysql_fetch_assoc($wynik)) { echo '<pre>'; print_r($it); echo '</pre></hr>'; }

Jeśli po 'Error: ' nic nie wyświetli, to z zapytaniem jest wszystko w porządku.
Jeśli po 'Count: ' wyświetli 0, to chyba nie nadałeś wartości zmiennej $fraza :)

//

jak wrzuce
$ilosc = mysql_num_rows($wynik); echo $ilosc;
to zwraca 0 :/

No właśnie :)
Użytkownik pbnan edytował ten post 30 kwiecień 2007, 17:52
no więc po error nic nie ma a count daje 0 :/

co śmieszne linijka wyżej jest $fraza = $_POST['fraza']

a echo $zapytanie zwraca

SELECT * FROM content WHERE slowa_kluczowe REGEXP 'słowo1'

Jesteś całkowicie pewien, że w tabeli `content` w polu `slowa_kluczowe` jest wartość 'słowo1'? Może nie wyszukuje, bo PHPMyAdmin robi dodatkowo konwersję kodowania znaków?


Może nie wyszukuje, bo PHPMyAdmin robi dodatkowo konwersję kodowania znaków?

Przeedytowałem treści...pozbywając się polskich znaków. Wyszukalem fraze "slowo" i znalazło wszystko co trzeba....teraz pytanie. Czemu z polskimi znakami nie mógł se poradzić?

Bo może masz różne kodowanie strony i w bazie? Wtedy wystarczy jeszcze polecenie CONVERT (w MySQL, oczywiście :)). Ale w tym przypadku, to trochę mało wiem.

zasadniczo baza ma ustawiona kodowanie utf-8 unicode a strona na której jest formularz do wpisania frazy też jest na utf-8

jakiś pomysł jak to załątwić?
Użytkownik Dawid-San edytował ten post 30 kwiecień 2007, 20:07
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • nvm.keep.pl

  • Sitedesign by AltusUmbrae.