Autor Zpráva
Neas
Profil
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
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
netestuju, jak jsi sám poznamenal, nemá to smysl.
Chamurappi
Profil
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
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
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
readonly jsme neznal.
Děkuji ti za pomoc a rozšíření znalostí.
petr 6
Profil
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
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.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0