Autor | Zpráva | ||
---|---|---|---|
Neas Profil |
#1 · Zasláno: 24. 5. 2011, 15:44:29 · Upravil/a: Neas
Ahoj.
Mám na stránkách formulář pro editaci záznamů v jedné tabulce s 5ti inputy, z nichž první je typu hidden a obsahuje id daného záznamu. Při odeslání formuláře kontroluji, zda !empty() všechny tyto inputy. Pokud však id == 0, pak podslední 2 inputy (teď je jedno proč) se nastaví na disabled a jejich value se nastaví na "none". Avšak (testováno pouze ve firefoxu) při odeslání formuláře jakoby tyto zakázané inputy neexistovaly (tj. jejich value == empty). Dořešil jsem to tak, že if(id == 0) Then vepiš na stránku další 2 nové hidden inputy se stejnými názvy jako 2 zakázané inputy a jejich value nastav na "none". S tímto řešením již script funguje, jak má. Nějak mi na celém řešení ale nesedí jeden detail, a sice, že pokud id==0, na stránce v tu chvíli jsou 2x2 inputy se stejným atributem name, který by měl být unikátní. chtěl bych se tedy zeptat, zda neexistuje lepší řešení mého problému. děkuji EDIT: omlouvám se, že nepřikládám ukázku, momentálně ji zde nemám (nejsem na svém PC) |
||
petr 6 Profil |
#2 · Zasláno: 24. 5. 2011, 16:02:17
Určitě existuje.
Předpokládám, že pokud to tvé id==0, pak ve zpracování formuláře zbytečně testuješ $_POST['neco']=="none" |
||
Neas Profil |
#3 · Zasláno: 24. 5. 2011, 17:46:32
netestuju, jak jsi sám poznamenal, nemá to smysl.
|
||
Chamurappi Profil |
#4 · Zasláno: 24. 5. 2011, 18:11:10
Reaguji na Nease:
„na stránce v tu chvíli jsou 2x2 inputy se stejným atributem name, který by měl být unikátní“ Měl? Proč by měl? „Avšak (testováno pouze ve firefoxu) při odeslání formuláře jakoby tyto zakázané inputy neexistovaly“ Zakázané formulářové prvky se neodesílají v žádném prohlížeči, to je i účel toho zakázání. „Dořešil jsem to tak, že if(id == 0) Then vepiš na stránku další 2 nové hidden inputy se stejnými názvy“ To mi připadá trochu ujeté. Proč neupravíš tu podmínku, aby dokázala pracovat i bez přijetí zakázaných hodnot? |
||
Neas Profil |
#5 · Zasláno: 24. 5. 2011, 18:21:15
Chamurappi:
Měl? Proč by měl? Četl jsem to někde na internetu (už nevím kde, možná dokonce tady na diskuzi). Také mi to přijde logické, když budou mít dva inputy například stejný name, jak k nim mám oběma přistupovat? Zakázané formulářové prvky se neodesílají v žádném prohlížeči, to je i účel toho zakázání. Měl jsem chybně za to, že zakázané jsou pouze pro vstup uživatele, ale jejich hodnota že se odešle. Také jsem někde četl, že zakázání nefunguje v IE (zatím jsem to netestoval) To mi připadá trochu ujeté. Proč neupravíš tu podmínku, aby dokázala pracovat i bez přijetí zakázaných hodnot? Vypadá to, že nejlepší řešení je opět to nejjednoduší. Uvažoval jsem moc složitě a takto triviální řešení mi uniklo... děkuji za pomoc. |
||
Chamurappi Profil |
#6 · Zasláno: 24. 5. 2011, 18:31:18
Reaguji na Nease:
„když budou mít dva inputy například stejný name, jak k nim mám oběma přistupovat?“ V PHP asi těžko, pokud nebudou mít na konci hranaté závorky. Ostatní serverové jazyky z nich většinou dělají pole bez dodatečných syntaktických požadavků. Pokud odesíláš <select multiple> s více vybranými hodnotami, tak se také odesílají jako několik dvojic jméno=hodnota se stále stejným jménem.
„Měl jsem chybně za to, že zakázané jsou pouze pro vstup uživatele“ Že jsou pouze pro čtení, tedy readonly ?
„Také jsem někde četl, že zakázání nefunguje v IE“ Pokud vím, tak Explorer atribut disabled kdysi zavedl. Jen ho nepodporuje na <option> ech a <optgroup> ech, to jsi možná četl.
|
||
Neas Profil |
#7 · Zasláno: 24. 5. 2011, 18:36:19
readonly jsme neznal.
Děkuji ti za pomoc a rozšíření znalostí. |
||
petr 6 Profil |
#8 · Zasláno: 24. 5. 2011, 22:51:08
Neas:
„netestuju, jak jsi sám poznamenal, nemá to smysl“ Tak proč ti pak záleží na tom, jakou mají hodnotu? Jestli jim přidělíš hodnotu "none" nebo "empty" nebo je odešleš prázdné nebo vůbec, by pak mělo být jedno a s ohledem na to by měl být napsaný i ten kód, který ten formulář zpracovává. |
||
Neas Profil |
#9 · Zasláno: 25. 5. 2011, 00:12:08
petr 6:
na hodnotě jako takové nezáleží, jen nesmí bý empty (tedy prázdný řetězec), jinak neprojde podmínkou. Podmínku jsem již rozšířil o ...|| $_POST['id'] == 0 && !empty($_POST['text1']) && !empty($_POST['text2']) // poslední 2 pole neuvažuju jak mi poradil Chamurappi. |
||
Časová prodleva: 13 let
|
0