Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno Ošetření formuláře při znovunačtení stránky

Potřeboval bych nakopnout správným směrem. Mám následující formulář:

<FORM action="slovnik_pridat1.php" method="post">
Slovo: <br>
<input type="text" name="slovo" size="25" maxlength="200"><br><br> 
Vysvětlení pojmu:<br>
<TEXTAREA  class="textik" id="pojem" name="pojem" rows=10 wrap=VIRTUAL tyle="width: 90%"></TEXTAREA><br> 
 
Oblast: 
            <select name="oblast" size="1"> 
            <option value="jine">Jiné
            <option value="biologie">Biologie 
            <option value="historie">Historie
            <option value="knihy">Knihy
            <option value="postavy">Postavy
            <option value="realie">Reálie
            <option value="zemepis">Zeměpis
            </select>
            <br /><br>
            
            
 Zařazení do knihy: <br>

<?
if (!$i){$i=1;}
$n=$i;
while ($i > 0): 
$i--;
?>


<select name="<? echo $i; ?>" size="1"> 
            <option value=""> 
            <option value="jine">Jiné
            <? $query1 = mysql_query("SELECT nazev, nazev_bez FROM bibliografie WHERE ((cyklus='konias') || (cyklus='bakly')) ORDER BY nazev;");		
               while($rec = mysql_fetch_array($query1)) {
               echo  '<option value="'.$rec["nazev_bez"].'">'.$rec["nazev"].'<br>';
               } ?>
            </select><br>
            
<? endwhile; //konec cyklu ?>  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<a href="slovnik_kon_pridat.php?i=<? $i=$n+1; echo $i; ?>">PŘIDAT DALŠÍ KNIHU</a>          
<br>

<input type="hidden" name="n" value="<? echo $n; ?>">            
<input type="hidden" name="cyklus" value="konias">
<br><br><input align="right" type="submit"   class="tlacitko" value="ODESLAT" onClick="return posli()">
<input  align="right" type="submit" border="0" value="RESET">
</FORM>		

Problém je v tom, že když přidám další knihu ($i se navýší) dojde ke znovunačtení celé stránky a tím ztrátě dat napsaných ve formuláři.
Mám tam upozorňovací text, že je nejprve třeba vybrat zařazení do knihy (knih), ale někdo může být nepozorný.
Dalo by se to ošetřit buď tak, aby data zůstaly kde jsou, nebo tak, aby když uživatel napíše něco do formuláře, aniž by měl předem vybrané knihy vyskakovací okno, či bublina ho upozorní?

Poraďte prosím

Předmět Autor Datum
Jsem někak nepochopil co vlastně myslíš. Jako když vybere něco ze selectu, že se znovunačte stránka…
Kráťa 21.08.2009 16:49
Kráťa
Zobrazenie nejakej hlášky JavaScriptom je najjednoduchšie riešenie, ale nie každý podporuje JavaScri…
los 21.08.2009 21:37
los
Díky za reakce. Stránka se znovunačte při odeslání PŘIDAT DALŠÍ KNIHU. K chybám stránky: Zatím jde…
Brmboš 21.08.2009 23:15
Brmboš
S tým submitom by to bol jeden formulár. Na serveri by si zistil, že stlačil tlačidlo pre pridanie k…
los 21.08.2009 23:45
los
Aha, už chápu jak to myslíš. Díky, vyzkouším to. poslední
Brmboš 22.08.2009 08:48
Brmboš

Jsem někak nepochopil co vlastně myslíš. Jako když vybere něco ze selectu, že se znovunačte stránka a zmiznou již napsaná data?
Při vyplňování formuláře se přeci stránka znovu nenačítá. To až s odesláním ne?
Ale možná by ta vyplněná data šla uložit do proměnných a po znovunačtení vložit.

Zobrazenie nejakej hlášky JavaScriptom je najjednoduchšie riešenie, ale nie každý podporuje JavaScript a nie je to ani príliš user-friendly.

Buď si tie dáta budeš pamätať v session, alebo si ich budeš odosielať v POSTe. Každopádne z toho odkazu pre pridanie ďalšej knihy sa bude musieť stať submit tlačidlo a bude musieť pribudnúť kód, ktorým budeš tie hodnoty nastavovať.

Prípadne môžeš ten formulár rozdeliť do dvoch krokov - na prvej stránke zvolí knihy a na druhej vyplní zvyšok.

---
Pripomienky k nepodstatným drobnostiam:

- Používaš nenainicializované premenné (ako napr. $i) a využívaš zapnuté register_globals - to je bezpečnostné riziko. Na tvojom mieste by som namiesto toho začal používať $_POST a $_GET (spolu s isset).

- Používaš tvrdé medzery a zalomenia riadkov namiesto štýlov. S použitím štýlov by to bolo jednoduchšie upravovateľné.

- Nekóduješ výstup z databázy. Ak by tam niekto vložil HTML, tak by sa zobrazilo ako HTML a nie ako text. Použi funkciu htmlspecialchars na ošetrenie výstupu.

Díky za reakce.

Stránka se znovunačte při odeslání PŘIDAT DALŠÍ KNIHU.

K chybám stránky:
Zatím jde o pracovní formát, bez velkých ošetřování. A s vkládáním html kódu se přímo počítá - je to nutné pro vlastní výstup. Jde o admin přístupy, takže to budou poučení lidé.

S tím submitem - to by tedy byl další formulář "ve formuláři"? A jak ošetřit odeslání všech proměnných na závěr?

S tým submitom by to bol jeden formulár. Na serveri by si zistil, že stlačil tlačidlo pre pridanie knihy a zobrazil by si o jeden select viac. V prípade, že by si zistil, že stlačil tlačidlo pre odoslanie, tak by si to spracoval tak ako doteraz.

Mohlo by to vyzerať cca takto:

$count = 0;
while (isset($_POST["select-$count"]))
  ++$count;

if (isset($_POST["pridat"]))
  ++$count;
else if (isset($_POST["odeslat"]))
  ;// spracuj vysledok a presmeruj

// zobraz stránku
for ($i = 0; $i < max(1, $count); ++$i)
  ;// zobraz select name="select-1"

Zpět do poradny Odpovědět na původní otázku Nahoru