Autor Zpráva
cenek
Profil
Zdravim,

Mám ve formuláři pole selcet a input (hidden). Do selectu tahám z databáze název položky a v inputu potřebuji value nastavit na id této položky. Problémem je, že pokud změním v selectu položku, value u inputu se samozřejmě nezmění, protože je tam od načtení stránky první položka.

Zná někdo, prosím, nějaký fígl?
Keeehi
Profil
Javascript a onchange na selectu. Z podstaty javascriptu to není 100% řešení.

Proč to vlastně potřebujete kopírovat ze selectu do inputu? přijde mi to jako hloupost.
JaySee
Profil
cenek:
Proč to dělat tak složitě, když každá option v selectu má svoje value. Nestačí pak tedy předávat tu hodnotu ze selectu? Namísto nějakého předávání do skrytých polí. Jaký to má mít přínos předávat to jinam?
cenek
Profil
Díky klucí,

Ale jde o to, že ten formulář pak zas ukládám do databáze. Tudíž select se jmenuje třeba "name" a ten pak POSTnu do sql. Tudíž nevim, jak bych value toho selectu uložil zvlášť, pod jinou proměnnou
Ugo
Profil
cenek:
tak v týhle větě mi trochu ujel vlak, myslíš třeba: $prvni = $_POST['name']; $druha = $_POST['name']; ? Jestli nad ní nepotřebuješ dělat úpravy, tak ani nepotřebuješ 2 přec. Jednoduše není důvod abys v hidden inputu potřeboval stejnou hodnotu, do proměnné kterou bys očekával z hidden inputu si přiřaď proměnnou selectu a máš to bez dalších úprav.
cenek
Profil
Sakra, nevím jestli si rozumíme. Zkusím to jinak:

<select name="name">
<option value="1">První jméno</option>
<option value="2">Druhé jméno</option>
</select>

Uložím $prvni = $_POST['name']. Ale jak ulozim $druha jako value toho optionu?
Ugo
Profil
Asi nerozumíme. Select odesílá vybranou value takže $_POST['name'] bude nabývat hodnot [1,2] a bude tam do té doby než to smažeš, čili i po tom přiřazení. To je nejspíš jasné takže nějak stále aspoň já nechápu, čeho chceš dosáhnout. Jestliže ti jde o to vybrat více možností, pak bys mohl použít multiple select který odešle pole vybraných, ovšem je třeba v něm umět označovat. Bez multiple pomocí selektu bych to neřešil na události onchange, focus atp. ale tlačítkem aby uživatel věděl co dělá.

P.S. teď mi to asi došlo, ty chceš odeslat value (čili 1) a zároveň textovou podobu - "První jméno" že? To bys moh jedine tím JS že na onchange by sis někam dával innerHTML toho option.. jestli to vůbec bude všude fungovat, to jsem nikdy nezkoušel. Ale ani to bych neřešil, šak ty hodnoty musíš znát, tak je jen přiřaď.

Např. máš něco jako..
$name[1] = "První jméno";
$name[2] = "Druhé jméno";

$value = $_POST['name'];
$text = $name[$value];
cenek
Profil
Potřebuju to přesně jak píšeš v P.S.

Ale to je právě to, že ty hodnoty neznám. Do toho selectu je vypisuju z jiný tabulky. Takže po lopatě: Vypíšu z jedné tabulky pár údajů do fomuláře, pár dalších údajů přidám a uložím do jiné tabulky.
Ugo
Profil
přijde mi to jako špatný návrh, máš je v tý tabulce -> id by mělo stále stačit na uložení, případně na dohledání jestliže nechceš mít závislost. Ovšem tím javascriptem to půjde, tedy Veře Pohlové ne, jen nevím jak. Je na to nějaka nejistá funkce, ale takovýto selektor bez jquery jednoduše nedám. Dám ti ale velice jednoduché řešení pomocí PHPka ... dej si např.

<select name="name">
<option value="1;První jméno">První jméno</option>
<option value="2;Druhé jméno">Druhé jméno</option>
</select>

<?php
$values = explode(";", $_POST['name']);
$text = "";
if(isset($values[1])) {
  $text = $values[1];
}
$name = $values[0];

jen to chce najít něco dle čeho jde spolehlivě explodovat .. co třeba !TNT! :D
cenek
Profil
Explode me vubec nenapadlo, to by melo fungovat. Zkusim to, dik moc


2Ugo:

Funguje to perfektně!!!
Díky moc chlape. Doufám, že to třeba pomůže i někomu dalšímu ;)
JaySee
Profil
cenek:
No jak poznamenal Ugo, není to správný návrh, takže doufám, že to někomu dalšímu moc pomáhat nebude. Pokud máš v jedné tabulce uložená jména, ta předpokládám mají i svoje ID, tak ti bohatě stačí předávat v tom selectu jen parametr name s hodnotu ID (1,2,...520) a ty si potom v SQL dotazu natáhneš ta jména podle ID, pokud je máš ve více tabulkách tak si tu druhou tabulku JOINneš k té první. Takhkle to míchat je cesta do pekel.

Ale jestli ti to stačí přes explode, tak budiž.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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

0