Autor Zpráva
David1256
Profil
Mám tento kód
<form method="post">
<select name="Bazar1">
<option>Felicie</option>
<option value="S120">Škoda 120</option>
<option value="Renault">Renault 19</option>
</select> 
<select name="Bazar2">
<optgroup label="Domácí">
<option value="Felicie">Felicie</option>
<option value="S120">Škoda 120</option>
</optgroup>
<optgroup label="Zahraniční">
<option value="Renault" selected>Renault 19</option>
</optgroup>
</select>
<br><br>
<input type=submit value="Zobrazit aktuální výběr">
<input type=hidden name="Skryto" value=<?php if (isset($_POST["Bazar1"])) echo $Bazar1?>>
</form>
<?php 
if (isset($_POST["Bazar1"]) and  isset($_POST["Bazar2"]))
{
echo "Z 1. hierarchického seznamu jsi vybral " .$Bazar1. "<br>";
echo "Z 2. hierarchického seznamu jsi vybral " .$Bazar2. "<br>";
}
if (isset($_POST["Skryto"]))
{
echo $Skryto;
}
?>


Chci, aby se mi $Skryto vypsala hned, ale ona se vypíše až poté, co kliknu na potvrzovací button podruhé. Jenže když na něj kliknu podruhé už se mi do $Bazar1 a $Bazar2 hází hodnoty z formuláře, které jsou jiné než původně zadané. Což je docela problém.
Viz.Zde:Poslední příklad
SwimX
Profil
Vždyť když poprvé přijdeš na stránku tak není splněná podmínka: if (isset($_POST["Bazar1"])) takže se jako hodnota inputu skryto nastaví na ""
až při odeslání se skryto nastaví na hodnotu, kterou jsi minule odeslal..

Dělá to přesně to, co je napsáno.


A nepoužívej raději $Bazar1 v domění, že tam bude $_POST['Bazar1']
ne na všech serverech jsou zaplé register globals.
David1256
Profil
Ale i když tam ta podmínka nebude tak si to do tý proměnný $Bazar1 uloží "", protože v tu dobu při načtení stránky není proveden výběr z těch seznamů, tim nic nevyřeším. Ale prostě až se stiskne tlačítko pto odeslání formuláře musí se ty hodnoty uložit do tý proměnný $Skryto a poté se vypíše i obsah proměnné skryto. Tak, jak byste to teda řešily?
blaaablaaa
Profil
if (isset($_POST["Skryto"]) && !empty($_POST["Skryto"]) )
{
echo $_POST["Skryto"];
}
David1256
Profil
blaaablaaa:
Tak to asi taky moc nebude fungovat viz zde
Současný script:
<form method="post">
<select name="Bazar1">
<option>Felicie</option>
<option value="S120">Škoda 120</option>
<option value="Renault">Renault 19</option>
</select> 
<select name="Bazar2">
<optgroup label="Domácí">
<option value="Felicie">Felicie</option>
<option value="S120">Škoda 120</option>
</optgroup>
<optgroup label="Zahraniční">
<option value="Renault" selected>Renault 19</option>
</optgroup>
</select>
<br><br>
<input type=submit value="Zobrazit aktuální výběr">
<input type=hidden name="Skryto" value=<?php if (isset($_POST["Bazar1"])) echo $Bazar1?>>
</form>
<?php 
if (isset($_POST["Bazar1"]) and  isset($_POST["Bazar2"]))
{
echo "Z 1. hierarchického seznamu jsi vybral " .$Bazar1. "<br>";
echo "Z 2. hierarchického seznamu jsi vybral " .$Bazar2. "<br>";
}
if (isset($_POST["Skryto"]) && !empty($_POST["Skryto"]) )
{
echo $_POST["Skryto"];
}
?>
SwimX
Profil
David1256:
a proč cpeš do hiddenu hodnotu z Bazar1?
bude stejná jako Bazar1 tak s ní rovnou pracuj..

jediný rozumný důvod to má, pokud chceš uchovávat historii (jednu položku dozadu) Bazar1. Pak to ale funguje dobře po prvním odeslání je proměnná skryto prázdná -> protože před prvním odesláním v proměnné Bazar1 nic nebylo. Když to odešleš po druhé -> Bazar1 bude něco, a ve skryto bude to, co bylo před tím Bazar1.

Co vubec chceš udělat?
David1256
Profil
SwimX:
Tu historii, ale to jsem netušil, že to je i z původního řešení myšleno tak, že se to teda zobrazuje až poté co se přepíše původní hodnota $Bazar1 $Bazar2, čili po druhém kliknutí.
SwimX
Profil
David1256:
přijdeš na stránku a Bazar1 i 2 je prázdný
tudíž
<input type=hidden name="Skryto" value=<?php if (isset($_POST["Bazar1"])) echo $Bazar1?>>
je prázdný

Bazary vybereš, odešleš a teprve teď se nastaví skryto...

Ale je to v pořádku, pokud chceš historii vypisovat, tak to takle nechej pouze do výpisu dej tu podmínku isset Skryto -> echo Skryto

Snad to pomohlo :-)
David1256
Profil
Ok díky, tady byl problém zkrátka v tom, že jsem si myslel, že to má fungovat jinak, což nebyla pravda, takže teď když vím, že to funguje, jak má, jsem rád.

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: