Autor Zpráva
Suta
Profil
Ahoj. Níže je stránka, která kontroluje, zda jsou při pokusu o odeslání formuláře vyplněny povinné údaje. Pokud ne, vypíše text s upozorněním a formulář zobrazí znovu (s již dříve uživatelem vypsanými údaji).
Problém však je v tomto:
- formulář nemá nastaveno cestu <form action="xxx.php">,. pouze <form method="POST"> - skript tak vždy volá sám sebe.
- jsou-li údaje vyplněny správně, pokračuje se zde (v kódu): echo "<h1>Díky Aladine, příspěvek odeslán!</h1>"; - a zde na tomto místě bych potřeboval, aby byly údaje z formuláře (proměnné) odeslány na soubor "zpracovani_dat.php".

Jak to udělat ?


<html>

<head>
<title>Přidat článek</title>
</head>

<body>
<?
$zobrazitFormular = true;
if ($odeslano):
if ($nazev=="" ||
$text==""):
echo "<h1>Musíš vyplnit všechny povinné údaje!</h1>";
else:
$zobrazitFormular = false;
echo "<h1>Díky Aladine, příspěvek odeslán!</h1>";
endif;
else:
echo "<h2>Vložení nového příspěvku</h2>";
echo "<h4>Povinné údaje jsou označeny červeným písmem.</h4>";
endif;
?>

<?if ($zobrazitFormular): // má se zobrazovat formulář? ?>
<form method="POST">
<table frame=box rules=none border=1 cellpadding=4>
<tr><td>Zadej číslo příspěvku:</td> <td><input type="text" name="cislo" value="<?echo $cislo?>" size="2" maxlength="3"></td></tr>
<tr><td><b><font color="red">Zadej název:</font></b> </td> <td><input type="text" name="nazev" value="<?echo $nazev?>" size="30"></td></tr>
<tr><td>Zadej datum: </td> <td><input type="text" name="datum" value="<?echo $datum?>" size="20"></td></tr>
<tr><td valign="top"><b><font color="red">Zadej text příspěvku:</font></b></td> <td><textarea name="text" rows=5 cols=40></textarea></td></tr>
</table><br>

<p><input type="submit" value="Odeslání příspěvku"></p><input type="hidden" name="odeslano" value="true">
</form>
<?endif?>
</body>
</html>
Dero
Profil
php funkce include()?
Suta
Profil
Kde ?
Dero
Profil
http://us2.php.net/include/ - do zdrojáku začlenit po oné hlášce.
Suta
Profil
Příkazu rozumím, ale jedná se o hodnoty proměnných, které se při odesílání formuláře odesílají na daný soubor .php a ten pak hodnoty proměnných (to co vyplnil uživatel) posílá do databáze.
Pomocí include přece neodešlu data, pouze načtu (v mém případě tedy nemůžu načíst v tom souboru zpracovani_dat.php do proměnných hodnoty proměnných z jiného souboru ... to dělá formulář odeslaný na jiný soubor...) - proto jsem opět zpátky u původního dotazu, jak odeslat formulář (v místě kódu, kdy jsou vyplněny všechny povinné údaje)
Dero
Profil
Ne, to je omyl. Ten příkaz vloží obsah souboru na dané místo. Tažke všechny lokální proměnné by mu měly být přístupné.
Suta
Profil
A když nechci vložit celý soubor, ale jen obsah proměnných.. ? Jde to ? Jak ?

A navíc... stejně je potřebuji odeslat a né načíst... protože pokud formulář zůstane neodeslán a nebude spuštěna ona stránka zpracovani_dat.php (uživatel zavře okno), tak si ta stránka ty proměnné sama nenačte a neodešle do databáze...
Suta
Profil
... (jen pro zasmání) ... chybí mi na tomto webu možnost mazat omylem poslané komentáře ... (jako je tento, teď již s jiným textem, aby tady nebylo to samé, jako ve zprávě těsně nad :)
habendorf
Profil
Možná špatně chápu problém, ale především to chce doplnit tu action, ne?
Suta
Profil
Když doplním action, tak se data odešlou v každé situaci - a já zkrátka nevím, jak pak ošetřit, aby se formulář odeslal jen když jsou splněny podmínky (vyplněny povinné údaje)
habendorf
Profil
Suta: Máš chybu v celé logice, jdeš na to od základu blbě. Pokusím se vysvětlit:

1) Pokud chceš data otestovat před odesláním, čili na klientovi, musíš použít klientský skript (třeba JS)
2) Pokud chceš data testovat pomocí php, tak si uvědom, že php běží na serveru - čili je MUSÍŠ na server odeslat v každém případě.

Z toho jasně vyplývají dvě možnosti řešení:
1) Povolit odeslání jen správných dat - řešit pomocí JS, nebo
2) Odeslat vždy natvrdo, na serveru vyhodnotit a buď data zpracovat (pokud jsou v pořádku), nebo vrátit stránku s formulářem k dovyplnění.

Jasné?
Suta
Profil
Chápu, musím si to ujasnit a prozkoušet, dík. Pak se kdyžtak ozvu.
Toto téma je uzamčeno. Odpověď nelze zaslat.

0