Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wyszukiwarka
Forum PHP.pl > Forum > PHP
gregi1
Czy znacie moze jakis poradnik, przyklad jak napisac w miare prosto wyszukiwarke informacji.

Chodzi o to ze dodaje sobie osobe do bazy danych (imie, nazwisko, miasto, wojewodztwo) i na stronie chcialbym miec wyszukiwarke z polami do wyszukania:


Imie ......
Nazwisko
Miasto
Wojewodztwo


i jak wpisze w pole imie np. Jan i klikne szukaj to wyszuka mi wszystkich janow, a jak wpisze w pole imie: jan i w pole miasto Gdańska to wyszuka mi wszystkich janow z gdanska.

Nie chce miec tylko jednego pola w wyszukiwarce ktore szukalo by po wszystkich polach. Chcialbym miec dla kazdego pola osobno, a przy wpisaniu w kilka aby szukalo rekordy po tych dwoch polach.

Z gory dziekuje za pomoc.
nospor
moze sie przyda:
http://nospor.pl/wyszukiwarka-zapytanie-za...runkow-n31.html
gregi1
Pewnie ze sie przyda smile.gif Dzieki.

To jeszcze jedno pytanie w takim razie smile.gif Oki to jak juz mam wszystkie wyniki ktore mnie interesowaly, to jak rozdzielicw danym rekordzie poszczegolne pola abym w html mogl sobie je ulozyc tak jak chce np aby wyswietlony rekord wyswietlal sie nazwisko, wiek, imie?
webasek
Nie bardzo rozumiem ale może chodzi o mysql_fetch_array
gregi1
Hmmm jakby to wyjasnic, chodzi mi o to ze, po wykonaniu wyszukiwania tego co szukam przez wyszukiwarke podana wyzej otrzymam jakies wyniki w ktorych np. w imieniu wystepuje slowo JAN.

Przy wyswietlaniu wynikow wyszukiwania chcialbym sobie ladnie ulozyc(rozmiescic, dodac style) do danego rekordu. Aby wygladal on np tak:

---------
Nazwisko Wiek
Imie Telefon

--------
Nazwisko Wiek
Imie Telefon
--------

itd...
pawkow
HTML -> TABLE winksmiley.jpg ?

+ w PHP kolorowanie (ewentualnie w JS) ?
gregi1
To mam jeszcze jedno pytanko, skoro jest cos takiego:

  1. <?php
  2. if (!empty($_POST['slowo_kluczowe'])) //jeśli podano nazwisko
  3.   $wh[] = "SLOWO_KLUCZOWE = '$_POST[slowo_kluczowe]' ";
  4. ?>


To jak to pozniej wykorzystac aby szukalo tego slowa kluczowego w trzech polach w bazie?

Bo w podanym przykladzie jest:

  1. <?php
  2. if (!empty($wh))
  3.   $where = 'where '.implode(' and ', $wh);
  4. else
  5.   $where = '';
  6. ?>
nospor
  1. <?php
  2. if (!empty($_POST['slowo_kluczowe'])) //jeśli podano nazwisko
  3.  $wh[] = "(POLE1 = '$_POST[slowo_kluczowe]' or POLE2 = '$_POST[slowo_kluczowe]' or POLE3 = '$_POST[slowo_kluczowe]' )";
  4. ?>
gregi1
Juz chyba ostatni problem, jakas rada czemu to nie chodzi:
  1. <?php
  2. $result = mysql_query($sql);
  3.  
  4. if ($result != null){
  5.  
  6. while ($row = mysql_fetch_array($result)) {
  7.  
  8. echo '<table>';
  9.    echo '<tr><td>';
  10.    echo 'Nazwa firmy: '.$row[1];  
  11.     echo '</tr></td>';
  12.     echo '</table>';
  13. }
  14. }
  15.  
  16. else {
  17. echo 'zle';
  18. }
  19. ?>


Wszystko pieknie ladnie wchodzi o while ale za cholere nie chce wejsc do elsa. Oczywiscie wszystko dotyczy wyszukiwarki. Jak ktos wpisze w jakies pole np nazwe firmy ktorej nie ma w bazie to powinien dostac komunikat zle. Ale nie chce wejsc do tego elsa. Natomiast jak ktos wpisze poprawne dane to jest wszytko ok.
nospor
jesli zapytanie nie zwraca zadnych danych to mysql_query i tak zwroci resultSet. mysql_query zwraca false tylko wtedy, gdy zapytanie jest bledne skladniowo
gregi1
To moze jakas sugestia jak to poprawic aby dzialalo i jak nie znalazlo zadnego wyniku w bazie zwrocilo jakis komunikat.

Wiem ze to pytania laika, ale ja nim jestem w php.
nospor
http://pl.php.net/manual/pl/function.mysql-num-rows.php
i wszystko jasne winksmiley.jpg
gregi1
Oki, dzieki pomoglo, to w takim razie jeszcze jedno pyt. co prawda powinno byc w Przedszkolu ale nie bede zakladal nowego topicu. Czy mozna zrobic tak ze mam na stronie wysukiwarke klikne szukaj i na tej samej stronie pod wyszukiwarka pojawia mi sie wyniki. Domyslam sie ze mozna, tylko pytanie jest co musze wpisac w action=" questionmark.gifquestionmark.gif" w formularzu? Bo po prostu kod php wyswietlajacy wyniki wstawiam w miejsce gdzie powine byc wyniki.
nospor
Cytat
tylko pytanie jest co musze wpisac w action=" " w formularzu?
Ja wogole olewam ten parametr. Jak go nie podasz to formularz wysle sie do samego siebie - czyli to co chcesz osiągnac
phpion
Cytat(nospor @ 30.10.2008, 17:40:25 ) *
Ja wogole olewam ten parametr.

Czy przypadkiem nie jest on wymagany przez znacznik <form> do poprawnego przejścia walidacji? Ja zazwyczaj ustawiam go na pustą wartość (action="") i jest ok smile.gif
nospor
Cytat
Czy przypadkiem nie jest on wymagany przez znacznik <form> do poprawnego przejścia walidacji?
Nikt nic nie mowil o poprawnej walidacji winksmiley.jpg

Ok, masz racje, należy podać go pustego a nie olac. (choc "olac" moze tez byc interpretowane jako "pozostawic puste")
gregi1
A ja myslalem ze w tym znaczniku cos musi byc podane smile.gif

Dzieki wszystkim za pomoc, aczkolwiek dzieki wam udaje mi sie sporo nauczyc, wiec kolejny problem smile.gif Otoz...

Chcialbym dodac do swojej wyszukiwarki (pisanej z wasza pomoca) cos takiego ze mam wypisane na stronie obok pola do wyszukiwania wszystkie kategorie i po kliknieciu danej kategori otrzymam wszystkie wyniki umieszczone w danej kategori oczywiscie na tej samem stronie co wyszukiwarka.
To co wymyslilem to :
1. Mozna by zrobic kilka (kilkanascie oddzielnych stron) z zapytaniem z danej kateogri. Ale to bez sesnu bo dodajac kategorie musze tworzyc nowa strone.

Druga mysl to:
2. Po kliknieciu w kategorie przekazuje sobie parametr do adresu a w miejscu gdzie to mialoby sie wyswietlic sprawdzam jaki to parament i wyswietlam wyniki.

I teraz problem czy w takim razie dla kazdej nazwy kategori musze robic form? I jak odczytac pozniej ten parametr?

Chyba ze jest jeszcze jakis inny sposob?
pyro
Cytat(nospor @ 24.10.2008, 11:02:55 ) *


nospor, widze ze wogole nie zabezpieczasz swoich skryptow ;D
nospor
@pyro jak juz starasz sie kogos "oczernic" to chociac doczytaj wszystko co jest napisane w linku na ktory sie powolujesz:
Cytat
Zapytanie to nie będzie uwzględniało zabezpieczeń przed różnymi atakami typu SQLInjection - nie chcę zaciemniać kodu dodatkowymi "bajerami".

Jakbym do tego kodu dorzucil jeszcze zabawe w zabezpieczenia, to taka początkujaca osoba by juz nic z tego nie zrozumiala. Zabezpieczenia to oddzielny temat
pyro
Cytat(nospor @ 31.10.2008, 09:49:06 ) *
@pyro jak juz starasz sie kogos "oczernic" to chociac doczytaj wszystko co jest napisane w linku na ktory sie powolujesz:

Jakbym do tego kodu dorzucil jeszcze zabawe w zabezpieczenia, to taka początkujaca osoba by juz nic z tego nie zrozumiala. Zabezpieczenia to oddzielny temat


Nie gadaj bzdur, ja nikogo nie oczerniam, a to rzeczywiście mój błąd, bo patrzyłem tylko na kod
nospor
Cytat
Nie gadaj bzdur, ja nikogo nie oczerniam,
Dlatego slowo "oczerniam" dalem w cudzyslowiu, by niebrac tego doslownie.

Cytat
a to rzeczywiście mój błąd, bo patrzyłem tylko na kod
Nawet jakbym nie bylo tego dopisku w komentarzu, to i tak Toj tekst bylby nie na miejscu. Ja podaje na stronie rozwiazania pewnych problemow. Inne "pierduly" jak obrona przed atakami pozostawiam w rekach czytajacego. Jak jeszcze tego nie zna to z czasem pozna. Jak nie sam to z jakiegos innego artykulu czy forum.
Nie bede przeciez przy jednym zagadnieniu wyjasnial masy innych.

Ale to nie temat na takie dyskusje. Jak chcesz pogadac o tresci mojej strony to zaloz oddzielny temat, w ktorym bedziesz mogl opisywac inne "niedociegniecia".


@gregi1 a czemu nie mozesz tej kategorii podczepic pod formularz?
gregi1
Cytat(nospor @ 31.10.2008, 17:19:06 ) *
@gregi1 a czemu nie mozesz tej kategorii podczepic pod formularz?


Pewnie ze bym mogl, ale nie tylko ja decyduje jak ta strona ma wygladac i zostalo ustalone ze dostkowo maja byc linki do kategorii i wojewodztw

Cytat(nospor @ 27.10.2008, 20:04:11 ) *
  1. <?php
  2. if (!empty($_POST['slowo_kluczowe'])) //jeśli podano nazwisko
  3.  $wh[] = "(POLE1 = '$_POST[slowo_kluczowe]' or POLE2 = '$_POST[slowo_kluczowe]' or POLE3 = '$_POST[slowo_kluczowe]' )";
  4. ?>


Wroce jeszcze do tego zagadnienia. Mam problem bowiem niby jest oki, ale jak wpisze sobie w polu wyszukiwarki "Jan" natomiast w polu w bazie mam "Jan Kowalski" to juz mi tego rekordu nie znajdze. Jak to zrobic aby znajdowalo slowo w ciagu slow w danym polu w bazie?
danek
name LIKE "%Jan%"
gregi1
  1. <?php
  2. if (!empty($_POST['slowo'])) //jeśli podano nazwisko
  3.   $wh[] = "(POLE2 = '$_POST[slowo]')";
  4.  
  5. if (!empty($_POST['slowo_kluczowe'])) //jeśli podano nazwisko
  6.   $wh[] = "(POLE1 = '$_POST[slowo_kluczowe]' or POLE2 = '$_POST[slowo_kluczowe]' or POLE3 = '$_POST[slowo_kluczowe]' )";
  7. ?>



  1. <?php
  2. if (!empty($wh))
  3.   $where = 'where '.implode(' and ', $wh);
  4. else
  5.   $where = '';
  6. ?>


No dobrze ale jak to "like" polaczyc w jedno zapytanie. Bo w chwili obecenej mam cos takieto
danek
Like to jest odpowiednik =, więc stosujesz tak samo w where tyle, że zamiast = stosujesz LIKE
$wh[] = "(POLE2 LIKE '%$_POST[slowo]%')";
gregi1
TO teraz powstal kolejny problem, no moze nie problem a zagwostka. Napewno juz ktos to realizowal i pomoze jakim alg. albo schematem dzialania z np pseudokodem.

Tak wiec korzystajac z zasady dzialania wyszukiwarki nospor'a uzytkownika klika wyszukaj, dostaje wyniki i na gorze strony dodatkowo opcje uluz wg alfabetu, telefonu itd. Klika dana opcje i dostaje wyniki ulozone wg danej zasady.

Nie wiem wlasnie jak przechowac informacje jakie dane wpisal w wyszukiwarce poprzednim razem. Bo pewnie ze po kliknieciu w uloz alfabetycznie musi otrzymac wyniki wg tych kryteriow ktorych uzyl wczesniej. Dodam ze jak napewno z watku wiecie zmienne dotyczace kryteriow w danym wyszukiwaniu trzymane sa w $where.
nospor
musisz pamietac te dane np. w sesji
Problem opisywalem przy okazji pagera - tam jak klikasz na kolejne strony to tez musisz pamietac stan wyszukiwarki:
http://nospor.pl/formularz-i-stronicowanie...-stanu-n26.html
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.