Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [php/mysql] problem z wyszukiwaniem
guilty82
post 26.04.2007, 16:32:34
Post #1





Grupa: Zarejestrowani
Postów: 176
Pomógł: 31
Dołączył: 26.03.2007

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


Witam,

Może zacznę od kodu.
Mój fomularz wygląda tak:

  1. <form action="wyszukaj.php" method="get" name="wyszukaj" id="wyszukaj">
  2. <pre><select name="p_uzyt" id="pow"><option selected value="*">powierzchnia</option>
  3. <option value="">------------------------</option>
  4. <option value="1">do 80m2</option>
  5. <option value="2">80 do 120m2</option>
  6. <option value="3">powyżej 120m2</option>
  7. </select>
  8. </pre>
  9. <pre><select name="tech"><option selected value="*">technologia</option>
  10. <option value="">------------------------</option>
  11. <option value="murowany">murowany</option>
  12. <option value="szkieletowy">szkieletowy</option>
  13. </select>
  14. </pre>
  15. <pre><select name="kat"><option selected value="*">kategoria</option>
  16. <option value="">------------------------</option>
  17. <option value="parter">parterowy</option>
  18. <option value="male_poddasze">małe poddasze</option>
  19. <option value="poddasze">poddasze</option>
  20. </select>
  21.  
  22. <input name="szukaj" type="submit" id="wyszukaj" value="szukaj">
  23. </pre>
  24. </form>


Zapytanie tak:
  1. <?php 
  2. $p_uzyt = $_GET['p_uzyt'];
  3. $tech = $_GET['tech'];
  4. $kat = $_GET['kat'];
  5.  
  6. $lista = @mysql_query("SELECT * FROM domki
  7. WHERE p_uzytkowa='$p_uzyt' OR technologia='$tech'
  8. OR kategoria='$kat' ORDER BY p_uzytkowa");
  9. ?>


Ok. Mój problem dotyczy zmiennej $p_uzyt. Nie wiem jak zdefiniować dla niej wartość żeby zapytanie filtrowało pozycje które spełniają warunek. W bazie mam pozycje p_uzytkowa od 0.00 do 200.00 i przykładowo wybieram opcję <option value="2">80 do 120m2</option>. probowałem z IF, ale nie działa:
  1. <?php
  2. $p_uzyt = $_GET['p_uzyt'];
  3. if ($p_uzyt == 1) {
  4. $p_uzyt = $p_u < 80.00; }
  5. if ($p_uzyt == 2) {
  6. $p_uzyt = ($p_u > 80.00) and ($p_u < 120.00); }
  7. if ($p_uzyt == 3) {
  8. $p_uzyt = $p_u > 120.00; }
  9. ?>


--edit--
ok $p_u nie ma przypisanej wartości. teraz zauważyłem ten błąd. Jednak nadal się zastanawiam jak przekształcić tego IFa, żeby w zapytaniu wybrał tylko te pozycje, których p_uzytkowa = od 80 do 120
--edit--

Drugi problem to, że jak nie zaznacze żadnej opcji z forma to chciałbym aby z bazy zostały wyciągnięte wszystkie wartości. Próbowałem wstawić '*' jako default value:
  1. <option selected value="*">powierzchnia</option>

Jednak mysql chyba ignoruje "gwiazdki" przesyłane przez GET.
Proszę o pomoc

Ten post edytował guilty82 26.04.2007, 16:38:31
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
dawhol
post 26.04.2007, 20:03:50
Post #2





Grupa: Zarejestrowani
Postów: 256
Pomógł: 0
Dołączył: 19.07.2006
Skąd: Ostrów Wielkopolski

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


Co do pierwszego to warunek IF wydaje sie byc OK
a co do drugiego to nie * tylko % (dowolna ilosc znaków) co najwyzej winksmiley.jpg lub _(jeden znak)

Polecam rozwiązanie no-spora (mam nadzieje ze nie przekręciłem nicka)
  1. <?php
  2. $wh = array();
  3. if (isset($nazwa))
  4.  $wh[] = 'nazwa LIKE "'.$nazwa.'%"';
  5. if (isset($miasto) && $miasto != '')
  6.  $wh[] = 'miasto LIKE "'.$miasto.'%"';
  7.  if (isset($gwiazdki) && $gwiazdki != '*')
  8.  $wh[] = 'gwiazdki="'.$gwiazdki.'"';
  9.  if (isset($kat) && $kat != '0')
  10.  $wh[] = 'kategoria="'.$kat.'"';
  11.  if (isset($woj) && $woj != '*') // nie sugeruj sie tymi gwiazdakami u mnie w skrypcie oznaczaja cos innego ;) 
  12.  $wh[] = 'wojewodztwo="'.$woj.'"';
  13.  if (isset($wyposazenie) && $wyposazenie != '')
  14.  $wh[] = 'wyposazenie LIKE "'.$wyposazenie.'"';
  15.  
  16.  
  17. if (isset($wh)) {$where = implode(' AND ', $wh);} else {$where = 'id="%"';} ; // tu masz to o co pytałes powinno dac wszystkie wyniki z bazy
  18.  
  19. $sql = 'SELECT * FROM hotel WHERE '.$where;
  20. ....
  21. ?>


Moze jeszcze troche wytłumaczenia winksmiley.jpg
a wiec tam gdzie masz like $zmienna."%" to poptrostu w bazie szuka gdzie jakas wartosc pola ma dane ze zmiennej zmienna w sobie i ew. po nich jakies inne znaki ze jak np w wyszukiwarce wpisze samą litere K to pokaze Ci wyniki z bazy które zaczynaja sie na litere K jak np DŻE to pokaze Ci wszystko co zaczyna sie na DŻE ... itd a tam gdzie masz zmienna=$zmienna to poprostu "stała" wartość z formularza np z pól option smile.gif

Ten post edytował dawhol 26.04.2007, 20:12:50


--------------------
Go to the top of the page
+Quote Post

Posty w temacie


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 Wersja Lo-Fi Aktualny czas: 19.06.2025 - 18:59