Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Wyszukiwarka
djluzio
post
Post #1





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 27.07.2004

Ostrzeżenie: (0%)
-----


Kto mi podsunie pomysl jak stworzyc wyszukiwarke? Zakladajmy ze bedzie to wyszukiwarka ofert motoryzacyjnych. Uzytkownik wypelnia formularz i zostaje przeniesiony do innej strony na ktorej sa pokazane wszystkie wyniki. Chodzi mi tylko o to jak zrobic zapytania do bazy w zaleznosci od tego co wybierze. Jesli np. wybierze tylko marke i model a reszta bedzie dowolna to jak mam zrobic zapytanie? Moze byc tak?
  1. <?php
  2.  
  3. if($marka<>'' AND $model<>'') { 
  4. $query = mysql_query(&#092;"SELECT * FROM $oferty WHERE marka='$marka' AND model='$model'\");
  5. $dane = mysql_num_rows($query);
  6. }
  7.  
  8. ?>

Cze mam rozpatzryc wszystkie mozliwosci wyboru? Jesli mam w formularzu zapytania 10 roznych opcji do wyboru to kombinacja wszystkich bedzie mega wielka, a nie chce pisac dla kazdej innego zapytania bo mi 10 stron nie wystarczy.
Jak do tego podejsc?

Formularz bedzie sie skladal glownie z selectow typu:
  1. <?php
  2.  
  3. <select name=&#092;"marka[]\">
  4. <option value=&#092;"\">------dowolna---
  5. <option value=&#092;"audi\">audi
  6. <option value=&#092;"bmw\">bmw
  7. <option value=&#092;"opel\">opel
  8. </select>
  9.  
  10. ?>


Jak porobic zapyania w zaleznosci od tego co zostanie wybrane w jak najprostszy sposob?

Mysle ze pomysl jest banalny i wystarczy jedno zapytanie ale dopiero wstalem i nie mysle jeszcze.
Dziekuje za pomoc

Ten post edytował djluzio 7.08.2004, 15:44:06
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 16)
fones
post
Post #2





Grupa: Zarejestrowani
Postów: 65
Pomógł: 0
Dołączył: 7.08.2004
Skąd: Brześć Kujawski

Ostrzeżenie: (0%)
-----


Mysle ze ten pierwszy kod jest ok, tylko po co Ci nazwa tabeli w zmiennej questionmark.gif?

pozdro guitar.gif


--------------------
Politechnika Warszawwska, Informatyka, G1I3
Aktualnie C i C++, ale nadal bardzo php ;p
Go to the top of the page
+Quote Post
djluzio
post
Post #3





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 27.07.2004

Ostrzeżenie: (0%)
-----


A co bedzie jak wybierze tylko model a marke pozostawi pusta? Wtedy nic nie znajdzie bo bedzie szukac rekordow w ktorych komorka marka jest pusta (albo bedzie 0 bo zmienna bedzie pusta)

Nazwa zmiennej jest dlatego ze w konfigu sa zdeklarowane rozne nazwy tabel.

Ten post edytował djluzio 7.08.2004, 15:51:50
Go to the top of the page
+Quote Post
fones
post
Post #4





Grupa: Zarejestrowani
Postów: 65
Pomógł: 0
Dołączył: 7.08.2004
Skąd: Brześć Kujawski

Ostrzeżenie: (0%)
-----


to zadeklaruj w if i bedzie ok, jak wybierze jedno to niech szuka tylko jednego... kilka linijek wiecej... (P.S. Jak wybierze jedno to nie zadziala tamten skrypt, bo instrukcja warunkowa jej nie przepusci, dlatego proponuje ifelse)

pozdro guitar.gif


--------------------
Politechnika Warszawwska, Informatyka, G1I3
Aktualnie C i C++, ale nadal bardzo php ;p
Go to the top of the page
+Quote Post
djluzio
post
Post #5





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 27.07.2004

Ostrzeżenie: (0%)
-----


Dzieki tak tez mozna zrobic. Ale jak masz jeszcze zalozny pola rok, przebieg, cena to juz masz tych kombinacji w cholere. np:
  1. <?php
  2.  
  3. if($model<>'' AND $marka<>'' AND $cena<>'' AND $przebieg<>'') {
  4. //zapytanie
  5. }
  6. if($model<>'' AND $rok<>'' AND $cena<>'' AND $przebieg<>'') {
  7. //zapytanie
  8. }
  9. if($model<>'' AND $rok<>'' AND $cena<>'') {
  10. //zapytanie
  11. }
  12. if($model<>'' AND $marka<>'' AND $cena<>'') {
  13. //zapytanie
  14. }
  15. ?>


wyobrazasz sobie ile jest kombinacji jak z formularza mozna wybrac z 15 pozycji?
Przypuszcza ze ze 100 conajmniej...

Ten post edytował djluzio 7.08.2004, 15:59:22
Go to the top of the page
+Quote Post
fones
post
Post #6





Grupa: Zarejestrowani
Postów: 65
Pomógł: 0
Dołączył: 7.08.2004
Skąd: Brześć Kujawski

Ostrzeżenie: (0%)
-----


życie ;p


--------------------
Politechnika Warszawwska, Informatyka, G1I3
Aktualnie C i C++, ale nadal bardzo php ;p
Go to the top of the page
+Quote Post
djluzio
post
Post #7





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 27.07.2004

Ostrzeżenie: (0%)
-----


blink.gif
heheh no wlasnie...lipa....
ale na pewno jak jakis pomysl bo na stronachj jest duzo takich wyszukiwarek i dzialaja szybko a gdyby kod byl dlugi to by pewnie to trwalo wiecznie...
Go to the top of the page
+Quote Post
tumczasty
post
Post #8





Grupa: Zarejestrowani
Postów: 80
Pomógł: 0
Dołączył: 2.08.2004
Skąd: Rzeszów

Ostrzeżenie: (0%)
-----


mój pomysł jest taki:
  1. <?php
  2. $kryteria=array('marka','model','cena','przebieg');
  3. $zapyt=array();
  4. foreach($kryteria as $kryt) if($_GET[$kryt]<>'') $zapyt[]=&#092;"$kryt='\".$_GET[$kryt].\"'\";  //ew. $_POST[...]
  5. if(count($zapyt)) $zapytanie=' WHERE '.implode(' AND ',$zapyt);
  6. $query = mysql_query(&#092;"SELECT * FROM $oferty$zapytanie\");
  7. (...)
  8. ?>


Ten post edytował tumczasty 7.08.2004, 16:33:49
Go to the top of the page
+Quote Post
djluzio
post
Post #9





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 27.07.2004

Ostrzeżenie: (0%)
-----


Cos jest skopane w tym co mi napiales ale pomysl jest bardzo dobry?
Moze mi ktos to poprawic?

zapytanie ma taka postac:
  1. WHERE typ='Array' AND region='Array' AND wojewodztwo='Array'


Co oznacza
  1. <?php
  2. $_GET[$kryt]
  3. ?>
?

Ten post edytował djluzio 7.08.2004, 22:42:56
Go to the top of the page
+Quote Post
tumczasty
post
Post #10





Grupa: Zarejestrowani
Postów: 80
Pomógł: 0
Dołączył: 2.08.2004
Skąd: Rzeszów

Ostrzeżenie: (0%)
-----


sam jesteś skopany tongue.gif
drobna zmiana we wszystkich selectach itp. i powinno działać:
  1. <select name="marka">
  2. <option value="">------dowolna---
  3. <option value="audi">audi
  4. <option value="bmw">bmw
  5. <option value="opel">opel

czyli w pierwszej linijce NAME ma być "marka", nie "marka[]"

$_GET to tablica, która zawiera wszystkie zmienne z formularza wysłane metodą GET; lepiej używać np. $_GET['marka'] niż $marka

Ten post edytował tumczasty 7.08.2004, 23:11:53
Go to the top of the page
+Quote Post
djluzio
post
Post #11





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 27.07.2004

Ostrzeżenie: (0%)
-----


Wlasnie zauwazylem ze jestem niezle skopany:)
Dziala idealnie i juz nie potrzebuje tysiaca ifów tylko kilka linijek.
Jak byś mial ochote mi jeszcze poradzic to mam ostatni problem (oczywiscie dla mnie zatrudny) taki ze jednym z selektow jest 'cena' i do tych wszystkich warunkow musze dodac cene tak zeby wyszukiwalo WHERE cena<='$cena. A ze dla mnie tablice to czarna magia wiec nie wymysle tego. Czyli mowiac na chlopski rozum ostatni warunke musi byc <= a nie =. Tak w ogole to dzieki za tamto. Zaoszczedzilem dzieki Tobie z tydzien czasu rolleyes.gif

dzieki za wyjasnienie...musialem uzyc $_POST bo wysylam przez posta.

zapyatnie musi wygladac mniejwiecej tak:
  1. $query = mysql_query("SELECT * FROM $oferty WHERE marka='$marka' AND model='$model' AND cena<='$cena'");

Pewnie potrzeba jakiegos ifa czy cos....

Ten post edytował djluzio 7.08.2004, 23:25:05
Go to the top of the page
+Quote Post
tumczasty
post
Post #12





Grupa: Zarejestrowani
Postów: 80
Pomógł: 0
Dołączył: 2.08.2004
Skąd: Rzeszów

Ostrzeżenie: (0%)
-----


biggrin.gif
  1. <?php
  2. $kryteria=array('marka','model','cena','przebieg');
  3. $zapyt=array();
  4. foreach($kryteria as $kryt) if($_POST[$kryt]<>'') $zapyt[]=&#092;"$kryt='\".$_POST[$kryt].\"'\";
  5. if(count($zapyt)) $zapytanie=' WHERE '.implode(' AND ',$zapyt);
  6. if($_POST['cena']) if($zapytanie!='') $zapytanie.=' AND cena<='.$_POST['cena']; else $zapytanie=' WHERE cena<='.$_POST['cena'];
  7. $query = mysql_query(&#092;"SELECT * FROM $oferty$zapytanie\");
  8. ?>
Go to the top of the page
+Quote Post
djluzio
post
Post #13





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 27.07.2004

Ostrzeżenie: (0%)
-----


zaraz przetestuje i dam Ci znac czy hula niezle

tworzy takie zapytanie...przedstawiam koncowke:
  1. AND cena='1000' AND cena<=1000


Ten post edytował djluzio 7.08.2004, 23:52:15
Go to the top of the page
+Quote Post
tumczasty
post
Post #14





Grupa: Zarejestrowani
Postów: 80
Pomógł: 0
Dołączył: 2.08.2004
Skąd: Rzeszów

Ostrzeżenie: (0%)
-----


malusieńki błąd (zdarza się najlepszym aarambo.gif )
bo teraz trzeba jeszcze usunąć "cenę" z tablicy $kryteria, żeby się nie robiło:
  1. ...AND cena='1000' AND...

i jeszcze drobne ulepszenie i będzie tak:
  1. <?php
  2. $zapyt=array();
  3. $kryteria=array('marka','model','przebieg');
  4. foreach($kryteria as $kryt) if($_POST[$kryt]<>'') $zapyt[]=&#092;"$kryt='\".$_POST[$kryt].\"'\";
  5. if($_POST['cena']) $zapyt[]='cena<='.$_POST['cena'];
  6. if(count($zapyt)) $zapytanie=' WHERE '.implode(' AND ',$zapyt);
  7. $query = mysql_query(&#092;"SELECT * FROM $oferty$zapytanie\");
  8. ?>

pozdrawiam

Ten post edytował tumczasty 8.08.2004, 13:14:37
Go to the top of the page
+Quote Post
Mery
post
Post #15





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 18.01.2004
Skąd: Ostrów Wlkp.

Ostrzeżenie: (0%)
-----


Jam mam takie pytanie zwiazane w sumie z wyszukiwarka. Chodzi mi o to zeby znalezc wszystkie rekordy ktore w danym polu zawieraja jakis text. Nie ze rowna sie tylko zawiera tongue.gif. Jest jakis sposob zeby zadac takie zapytanie questionmark.gif Bo zrobilem to przetwarzajac rekordy whil'em i uzywajac eregi() ale to mi strasznie komplikuje sprawe i uniemozliwia kilka innych rzeczy sad.gif
Go to the top of the page
+Quote Post
tumczasty
post
Post #16





Grupa: Zarejestrowani
Postów: 80
Pomógł: 0
Dołączył: 2.08.2004
Skąd: Rzeszów

Ostrzeżenie: (0%)
-----


spróbuj:
  1. SELECT * FROM tabela WHERE pole1 LIKE '%szukanytekst%'


Ten post edytował tumczasty 9.08.2004, 21:22:06
Go to the top of the page
+Quote Post
Mery
post
Post #17





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 18.01.2004
Skąd: Ostrów Wlkp.

Ostrzeżenie: (0%)
-----


dzieki bardzo, dziala elegancko i jeszcze pomija wielkosc liter biggrin.gif
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 19.08.2025 - 03:46