Autor | Zpráva | ||
---|---|---|---|
fili Profil |
#1 · Zasláno: 19. 6. 2013, 09:58:29
Zdravim!
Prosim o pomoc mam dole uvedeny kod, ale nefunguje. Chcem aby mi hladalo pri zadani obcho Polozka a Miesto, ale aj pri zadani jedneho Polozka alebo Miesto. Kde mam chybu? $sql="SELECT * FROM tabulka WHERE Polozka='%' AND Miesto='%' AND (Polozka='%' OR Miesto='%')"; |
||
Taps Profil |
fili:
<? $polozka=mysql_real_escape_string($_POST['polozka']); $miesto=mysql_real_escape_string($_POST['miesto']); $sql="SELECT * FROM tabulka WHERE Polozka='$polozka' OR Miesto='$miesto' "; ?> |
||
fili Profil |
#3 · Zasláno: 19. 6. 2013, 22:07:01
Taps:
Vdaka za pomoc, ale nefunguje to podla mojich predstav. Vysledok je OK len ak sa hlada Polozka alebo Miesto - vysledok mam 65 ks. Ale potrebujem aby mi to vyhodilo Polozku a Miesto, tam by mal byt mensi pocte vysledkov - 1 ks. Ak zadam aj Polozku a Miesto z formulara, tak potrebujem vysledok, len konkretnych poloziek na konkretnom mieste, ale toto mi vyhadzuje vsetko z polozky+to co by som chcel mat ako vysledok, takze namiesto jedneho vysledku mam 66 ks. |
||
Kajman Profil |
fili:
Položte tedy dotaz s podmínkami spojenými operátorem AND a když to nic nenajde, tak teprve uděletejte druhý se zmíněným OR. |
||
fili Profil |
#5 · Zasláno: 20. 6. 2013, 08:46:24
Tomuto celkom nerozumiem.
Potrebujem jednoduchu vec, aby hladanie fungovalo: 1.Pri zadani jednoho atributu z formulara, ak uzivatel chce takto hladat. 2. Vyhladat z toho isteho formulara, ak iny uzivatel zada oba atributy pri hladani. |
||
Kajman Profil |
#6 · Zasláno: 20. 6. 2013, 09:03:32
Tak jednoduše v tom php sestavte dotaz podle toho, kolik atributů uživatel zadal do hledání.
|
||
fili Profil |
#7 · Zasláno: 20. 6. 2013, 10:07:59
Kajman:
Ako bude vyzerat ten jednoduchy dotaz, pretoze php mi moc nejde, keby ano tak nehladam pomoc. Mam dole uvedeny dotaz, ale stale mi to nejde ako by malo. Ak zadam polozka vysledok je v poriadku - 65 vysledkov. Ale ak zadam plozka aj miesto vo formulari, co ma byt presnejsie - 1 vysldedok, tak mam stale vysledok 65 + ten 1 pozadovany. Kde mam chybu??? $sql="SELECT * FROM tabulka WHERE Polozka='$polozka' AND Miesto='$miesto' OR (Polozka ='$polozka' OR Miesto ='$miesto')"; |
||
Kajman Profil |
#8 · Zasláno: 20. 6. 2013, 10:18:02
Když zadá uživatel jen miesto, uděláte dotaz
$sql="SELECT * FROM tabulka WHERE Miesto='$miesto'"; Když zadá uživatel jen polozku, uděláte jiný dotaz $sql="SELECT * FROM tabulka WHERE Polozka='$polozka'"; Když zadá miesto i polozku, uděláte ještě jiný dotaz... $sql="SELECT * FROM tabulka WHERE Polozka='$polozka' AND Miesto='$miesto' "; |
||
fili Profil |
#9 · Zasláno: 20. 6. 2013, 16:23:08
Kajman:
No tak som to otestoval - tri dotazy na databazu, ale funguje z toho len jeden, kotry je uvedeny v kode ako posledny. Ostatne nenajdu nic. Bud to treba zlucit do jedneho - nieco podobne ako som mal vyssie, alebo tam treba pridat este nejaku podmienku na dotazy a to uz vobec neviem napisat. |
||
jenikkozak Profil |
#10 · Zasláno: 20. 6. 2013, 16:27:27
<?php if(isset($polozka, $miesto)){ $sql="SELECT * FROM tabulka WHERE Polozka='$polozka' AND Miesto='$miesto'"; }elseif(isset($polozka)){ $sql="SELECT * FROM tabulka WHERE Polozka='$polozka'"; }else{ $sql="SELECT * FROM tabulka WHERE Miesto='$miesto'"; } |
||
fili Profil |
#11 · Zasláno: 20. 6. 2013, 17:39:30
jenikkozak:
vdaka, ale nefunguje to tak ako by malo funguje len tato cast $sql="SELECT * FROM tabulka WHERE Polozka='$polozka' AND Miesto='$miesto'"; |
||
jenikkozak Profil |
#12 · Zasláno: 20. 6. 2013, 18:11:14
fili:
Pak hádám, že je „problém“ v tom, že ve skriptu jsou nastavené obě proměnné, přestože některá z nich obsahuje prázdný řetězec. (Což samozřejmě nemohu vědět, když nevím, odkud ty proměnné pocházejí.) Je-li tomu tak, můžeš otestovat, jestli ty proměnné obsahují hodnotu: <?php if($polozka!="" AND $miesto!=""){ $sql="SELECT * FROM tabulka WHERE Polozka='$polozka' AND Miesto='$miesto'"; }elseif($polozka!=""){ $sql="SELECT * FROM tabulka WHERE Polozka='$polozka'"; }else{ $sql="SELECT * FROM tabulka WHERE Miesto='$miesto'"; } |
||
fili Profil |
#13 · Zasláno: 20. 6. 2013, 21:10:14
jenikkozak:
Vysledok je stale rovnaky. Pri zadani oboch je OK - 1 vysledok, ale pri zadani jedneho alebo druheho, mam vysledok vzdy 0. Neviem ako si myslel, ci obsahuju hodnotu? Pouzivam roletky - select, takze tam mam uz vpisanie hodnoty na vyber. A testujem to na tom co mam skutocne aj v databaze, takze neviem... A mam jednu otazku mimo vyhladavania, mozem uz do existujucej databazy dodatocne vlozit ID? Myslim, ze by to nemalo sposobit problemy alebo??? |
||
Kajman Profil |
#14 · Zasláno: 20. 6. 2013, 21:53:37
fili:
„Pouzivam roletky - select, takze tam mam uz vpisanie hodnoty na vyber.“ V tom bude problém. Buď v tom optionu znamenající nic nastavte value na prázdný řetězec, nebo na řádcíh 2 a 4 porovnávejte s nic znamenající hodnotou místo prázdného řetězce. |
||
fili Profil |
#15 · Zasláno: 20. 6. 2013, 22:32:22
Kajman:
Formular nechcem menit, a co ma znamenat prazdny? aby si uzivatel mohol vpisat co hlada? Ako teda by mal vyzerat spravne ten dotaz??? A co to ID??? |
||
peta Profil |
fili: var_dump(array($polozka,$miesto)); // co to vypise?
"Pouzivam roletky - select, takze tam mam uz vpisanie hodnoty na vyber." Tento kod jsi nam neukazal, nelze ho zahrnout tedy do uvah o problemu, ktery muzeme resit. Cili sem zkopiruj html kod tech roletek, asi nejlepe. Mozna uplne idealne i s tagy form a odesilacim tlacitkem. |
||
fili Profil |
#17 · Zasláno: 21. 6. 2013, 10:00:23
Pri zadani prvej plozky z formulara "polozka"
Vysledok 0 array(2) { [0]=> NULL [1]=> string(10) "Miesto" } Pri zadani oboch "polozka" aj "miesto" Vyhodilo spravny vysledok Pri zadani druhej plozky Vysledok 0 array(2) { [0]=> NULL [1]=> string(8) "Biela" } Formular je bezny: <form action="vysledok-hladania.php" method="post"> <select name="Typ">option value="Typ">Typ</option <option value="Ponožky">Ponožky</option> <select name="Miesto"><option value="Miesto">Miesto</option> <option value="Biela">Biela</option> <input type="submit" name="odoslat" value="Vyhľadaj"></input></form> [/pre] |
||
juriad Profil |
Je to tím, že pokud nevybereš Typ, tak se odešle jeho hodnota Typ, podobně pro Miesto, pokud nevybereš nic, odešle se Miesto.
Z toho důvodu se vždy bude provádět jen SELECT podle obou parametrů; pokud vybereš Typ a Miesto necháš prázdné: SELECT * FROM tabulka WHERE Polozka='Ponožky' AND Miesto='Miesto' Řešením je nastavit prázdnou hodnotu pro nevyplněný select: <form action="vysledok-hladania.php" method="post"> <select name="Typ"><option value="">Typ</option <option value="Ponožky">Ponožky</option> <select name="Miesto"><option value="">Miesto</option> <option value="Biela">Biela</option> <input type="submit" name="odoslat" value="Vyhľadaj"></input></form> |
||
fili Profil |
#19 · Zasláno: 21. 6. 2013, 10:29:48
juriad:
Treba to nechat prazdne len pri tych hlavickach Typ a Miesto, alebo aj pri ich konkretnych polozkach Ponozky atd.? A co to ID??? Mozem ho pridat dodatocne a nenaburat si tak uz hotovu databazu????? |
||
Tori Profil |
fili:
> mozem uz do existujucej databazy dodatocne vlozit ID? Do tabulky. Ano, můžete přidat další sloupec pro ID. Když ho nastavíte na auto_increment, tak se řádky správně očíslují. |
||
juriad Profil |
#21 · Zasláno: 21. 6. 2013, 10:49:15
fili:
Jen u těch, které znamenají, že není vybraná hodnota - ty které mají význam hlavičky/nadpisu. U ostatních je naopak neprázdná value nutná - value je ta hodnota, která se odešle na server. mozem uz do existujucej databazy dodatocne vlozit ID? Myslim, ze by to nemalo sposobit problemy alebo??? Možná ti na to neodpovídá nikdo proto, že nechápe, na co se ptáš. Zkus tu otázku víc rozvést; třeba uveď příklad toho, čeho se snažíš dosáhnout. |
||
fili Profil |
juriad:
Vdaka, teraz vyhladavanie uz funguje lepsie, ale ma to jeden hacik, potrebujem tam este zakomponovat aj aby mi vyhladalo nielen Biele vybrate z formulara, ale aj Biele so vzorom, ktore nie je vo formulari ale je v databaze, cize aby mi to vzalo nejaky retazec s pevnou a zaroven volnou hodnotou. Dufam, ze sa da pochopit, co vlastne mam na mysli Ospravedlnujem sa ohladom toho ID, samozrejme som myslel vlozenie noveho stlpca s ID do tabulky v databaze. Robim s tym len obcasne, tak mi ani neprislo, ze je to vlastne cely stlpec. Vdaka aj za to!!!!! Som v PHP amater, tak este budem potrebovat pomoc, pretoze musim este poriesit nejake veci. |
||
juriad Profil |
Můžeš vyhledávat podřetězec:
WHERE Miesto LIKE 'Biela%' ; oprátor LIKE, procento značí wildcard (cokoli).
Ale lepší je data před vložením do databáze normalizovat, aby tam takové nesrovnalosti nevznikaly. Nebo můžeš v <select> zobrazit všechny přípustné hodnoty: SELECT DISTINCT Miesto FROM tabulka .
Ono je lepší se napřed zamyslet a navrhnout databázi rovnou správně. Neboj se tady zeptat, jestli máš schéma správně, ušetříš si hodně času a problémů. K ID: můžeš ten sloupec přidávat do každé tabulky, je to zadarmo (pár bajtů většinou nevadí), a je jednodušší o tom přemýšlet. |
||
fili Profil |
juriad:
Dakujem ja by som tam dal len WHERE Miesto '%'; bez LIKE a zas by som sa s tym trapil. Ale zistil som, ze povodny dotaz, ktory som pouzival predtym bol tiez dobry, hl. chyba bola vo formulari pri odosielani hodnot Typ alebo Miesto, ktore v databaze nie su. Chapem to, je to logicke, ale nikdy by ma nenapadlo, ze chyba je v html. Na to treba asi prax... "Nebo můžeš v <select> zobrazit všechny přípustné hodnoty: SELECT DISTINCT Miesto FROM tabulka." Toto by som ani nevedel pouzit. A co ostatne nastavenia pri vkladani stlpca s ID do databazy??????? Moderátor jenikkozak: Za každou větou piš raději jen jeden interpunkční znak.
|
||
jenikkozak Profil |
#25 · Zasláno: 23. 6. 2013, 22:12:51
fili:
„A co ostatne nastavenia pri vkladani stlpca s ID do databazy?“ Nic. Nastav, že to má být přirozené číslo, tedy celé, kladné a nenulové. |
||
juriad Profil |
#26 · Zasláno: 23. 6. 2013, 22:46:25
fili:
Nastav ten sloupec, podle toho, co od něj vyžaduješ. Většinou je žádoucí aby byl typu INTEGER (číslo faktury), někdy můžeš potřebovat VARCHAR (uživatelské jméno). Z povaha ID vyplývá, že bude unikátní; pokud v tabulce není jiný sloupec označený jako primární klíč, ID by mělo být primárním klíčem, pokud už jiný primární klíč existuje, bude stačit unikátní klíč s příznakem NOT NULL. Pokud chceš, aby se hodnota ID sama vyplňovala pro nové záznamy a nezáleží ti na konkrétní hodnotě, nastav AUTO_INCREMENT; pokud ID generuješ na základě nějakého pravidla, třeba faktury: první čtyři číslice rok, pak pořadové číslo faktury zleva doplněné nulami na 5 znaků, AUTO_INCREMENT nenastavuj. Jak vidíš neexistuje žádný rozumný důvod říct, udělej to tak, protože je to tak správně. V případě, že ID je uměle přidaný klíč, který má za úlohu jen identifikovat záznam, zajistit jednoduchý způsob spojení s jinými tabulkami a není třeba napojení na jiné systémy, můžeme říct, že následující zápis bude často správný. id INTEGER AUTO_INCREMENT PRIMARY_KEY Mě se v průběhu vývoje aplikace osvědčilo napsat si sql skript (pozor není určen pro mysql), který vytvoří celé databázové schéma a druhý skript, který ho naplní testovacími daty. To umožňuje docela rychle změnit schéma a naplnit databázi čerstvými daty. zkus trochu zkulturnit svůj projev, tučným písmem a interpunkcí šetři |
||
fili Profil |
#27 · Zasláno: 23. 6. 2013, 23:03:09
juriad:
Dakujem za vycerpavajucu odpoved, urcite sa mi vsetky info zidu. Staci mi to "jednoduche" ID Tak som dal vytvorit stlpec s ID, ale mi to neulozilo, vyhodilo chybu #1075 - Incorrect table definition; there can be only one auto column and it must be defined as a key Ospravedlnujem sa pisomny prejav, nevedel som, ze sa to nema. |
||
Časová prodleva: 11 let
|
0