Autor | Zpráva | ||
---|---|---|---|
Smoother Profil |
#1 · Zasláno: 22. 5. 2008, 11:11:44 · Upravil/a: Smoother
Ahoj,
mám problémek s filtrováním údajů z db. Ve formuláři mám u různých údajů položky, pokud není žádná zadána, odešle se údaj "vyberte". Třeba: <select name="plocha1" size="1" dir="ltr" lang="cs" value=""> <option>vyberte</option> <option>80</option> <option>100</option> <option>150</option> <option>200</option> </select> V souboru zpracovavající formulář a provádějí výpuis z db pak mám podmínku: if ($plocha1=='vyberte') { $plocha1='IS NOT NULL'; } a pak: "SELECT * FROM neco WHERE velikost = '".$velikost1."' AND neco = '".$neco1."' AND plocha >= '".$plocha1."'" Otázka zní: když někdo chce omezit výběr pouze pomocí jednoho údaje (nebo několika), potřebuji aby všechny ostatní omezující podmínky byly vypsány všechny (jako že na nich nezávisí). Jak na to? Díky předem Smoother |
||
TSD Profil |
#2 · Zasláno: 22. 5. 2008, 12:55:20 · Upravil/a: TSD
if ($plocha1=='vyberte') { $plocha1=" AND plocha >='.$_REQUEST['plocha1']; } else { $plocha1="" ; }; SELECT * FROM neco WHERE velikost = '".$velikost1."' AND neco = '".$neco1."' ".$plocha1 doufám že jsem někde nezapomněl závorku :) |
||
Smoother Profil |
#3 · Zasláno: 23. 5. 2008, 11:26:20
díky moc, zoušel jsem a nějak mi to nefunguje...
Nenapsal jsi tu pomínku naopak? když plocha==vyberte - pak zobraz všechno, jinak "co je vybráno": if ($plocha1=='vyberte') { $plocha1="IS NOT NULL" ; } else { $plocha1=" AND plocha >='.$plocha1; }; formulář posílám přes GET a mám nad zpracováním: $plocha1=$_GET["plocha1"]; Možná jsme se nepochopili už v zadání: Potřebuji aby když někdo nic nevyplní, vypíše se obsah celé db, pokud vyplní některé omezující podmínky, dojde o omezení výběru, ale ostatní podmínky jakoby neměly vliv (což je asi klasika ve filtrování). Díky předem Smoother |
||
los Profil * |
#4 · Zasláno: 23. 5. 2008, 11:37:39
Najjednoduchšie podľa mňa takto:
$where = array(); if (isset($_GET['plocha1']) && $_GET['plocha1'] != 'vyberte') $where[] = 'plocha>=' . (int)$_GET['plocha1']; if (isset($_GET['neco1'])) $where[] = "neco1='" . mysql_real_escape_string($_GET['neco1']) . "'"; $query = 'select * from neco' . ($where ? ' where (' . implode(')and(', $where) . ')' : ''); (netestované, takže tam môžu byť chyby, ale princíp je zrejmý) |
||
TSD Profil |
#5 · Zasláno: 23. 5. 2008, 12:17:47 · Upravil/a: TSD
Smoother
Potřebuji aby když někdo nic nevyplní, vypíše se obsah celé db, pokud vyplní některé omezující podmínky, dojde o omezení výběru Proč prostě tuhle větu nepřepíšeš do toho sql a pořád se tam snažíš natlačit to IS NOT NULL? Prostě když bude nevybráno (= bude vybráno "vyberte"), tak tu podmínku do sql vůbec nedávej. Ještě jednou: když $plocha1 = "vyberte", tak $kus_sql = "" , jinak $kus_sql = " AND plocha >=".$plocha1 SELECT * FROM neco WHERE velikost = '".$velikost1."' AND neco = '".$neco1."' ".$kus_sql |
||
Časová prodleva: 3 dny
|
|||
Smoother Profil |
#6 · Zasláno: 26. 5. 2008, 16:18:09 · Upravil/a: Smoother
Pánové díky moc! Rozjel jsem to... Pokud byste byli ochotní mi pomoci ještě s podmínkou budu vděčný... Pokud možno bez použití tříd... :o)
to IS NOT NULL jsem tam dával proto, když nikdo nevybere nic, tak aby mi to vypsalo všechny údaje... Stejně mi to ale nefunguje... :-/ Nevím si rady s tím, když někdo zadá třeba 3 údaje do formuláře a výsledek má být ... WHERE 1=a AND 2=b AND 3=c Nemůžu vědět kolik a které omezující podmínky uživatelé použijí... Napadlo mě rozkouskovat to do proměnné třeba $kussql Výsledek by měl vypadat třeba takhle: SELECT * FROM domy WHERE mesto = 'North Port' AND typ = 'Bungalov' AND plocha >= '100' "SELECT * FROM domy WHERE mesto = '".$mesto1."' ". $typ1." ". $plocha1." ". $mistnosti1." ". $cenaod1." ". $cenado1." " Díky moc Smoother |
||
Mastodont Profil |
#7 · Zasláno: 26. 5. 2008, 17:06:50
Vždyť ti to popsal už los, prostě podmínky přidáváš do pole a pak je přes implode spojíš.
|
||
Smoother Profil |
#8 · Zasláno: 26. 5. 2008, 18:26:06 · Upravil/a: Smoother
Mastodont
...vím, ale dost dobře tomu zápisu nerozumím... Snad by se ty podmínky daly rozepsat srozumitelněji... edit: tedy tomu spojování pomocí implode... jsem lama, ale snažím se... |
||
Mastodont Profil |
#9 · Zasláno: 26. 5. 2008, 21:15:39
Implode spojí všechny prvky pole do řetězce a vloží mezi ne to, co zadáš jako první argument. Vyzkoušej si ten kód.
|
||
Smoother Profil |
#10 · Zasláno: 26. 5. 2008, 22:33:33
Funguje, super, díky všem!!!
|
||
Časová prodleva: 16 let
|
0