Autor Zpráva
MAUGLI
Profil *
Zdravím,

existuje v PHP nějaká alternativa k odkazu JAVASCRIPTU - "ZPET" ???

<A HREF="javascript:history.back();">ZPET</A>

... ale tak, aby zůstal např. vyplněný formulář... když se klikne na tento JAVASCRIPT, tak tam data zůstanou.

Nebo jak se to normálně řeší bez JAVASCRIPTU?

Děkuju za radu

Maugli
Joker
Profil
PHP je na straně serveru, takže nemá informace o klientovi, tedy ani historii prohlížeče.

aby zůstal např. vyplněný formulář
Jak můžu vědět, že předchozí stránka byla z mého webu, že na ní byl formulář, atd.?

Pokud má tlačítko ZPĚT vést na nějakou konkrétní stránku, bylo by lepší než history.back() udělat odkaz na tu konkrétní stránku.
Taps
Profil
MOhl bys také využít php a pomocí podmínek if zjistit zda formuláře byly vyplněny či nikoliv a pokud by byly vyplněny tak bysto pomocí header přesměroval an jinou stránku
jrm
Profil
Proměnné lze ukládat do "session", pak z nich vybírat... Do polí formuláře pak vypisovat přes "echo".
Miloš
Profil
Pomocí PHP se to dá udělat i bez tlačítka zpět; dokonce lze mít v jednom souboru jak formulář, tak odesilací funkci. Ve zkratce:
<?php

function zobraz_formular($jmeno = "", $prijmeni = "", $email = "@", $text_emailu = "") {
?> <!-- funkce pokračuje HTML kódem: -->

<form action="http://adresa-tohoto-scriptu.cz" method="post" onsubmit="return kontroluj(this)">
<input type="text" name="jmeno" value="<?php echo $jmeno?>">Vaše křestní jméno<br>
<input type="text" name="prijmeni" value="<?php echo $prijmeni?>"> Vaše příjmení<br>
<input type="text" name="email" value="<?php echo $email?>"> Váš e-mail<br>
<strong>Zde napište svou zprávu:</strong>
<textarea name="text_emailu" rows="5" cols="40"><?php echo $text_emailu?></textarea>
<input type="submit" value="Odeslat" class="tlacitko">
<input type="reset" value="Vymazat" class="tlacitko">
<input type="hidden" name="odeslano" value="true">
</form>

<?php
} // konec funkce
if($_SERVER['REQUEST_METHOD'] != 'POST') {
zobraz_formular();
} else {
if (empty($_POST['prijmeni']) || (empty($_POST['email']) || ($_POST['email'] == "@"))){
echo '<p>Nevyplnil(a) jste všechny položky, zkuste to, prosíme, znovu; děkujeme.</p>';
zobraz_formular($_POST['jmeno'], $_POST['prijmeni'], $_POST['email'], $_POST['text_emailu']);
}else {
if (mail("adresa@emailu.cz", "Z našeho webu", $_POST['text_emailu'], $_POST['jmeno'].' '.$_POST['prijmeni']." ".$_POST['email']." "))
echo "<h1>Váš dopis byl úspěšně odeslán.<br>Děkujeme.</h1>";
else
echo "<h1>Omlouváme se,<br>Váš e-mail nebylo možno odeslat.</h1>";
}
}
?>
MAUGLI
Profil *
Co znamená

if($_SERVER['REQUEST_METHOD'] != 'POST')
Miloš
Profil
MAUGLI
Test na to, jestli jsem na stránky přišel pomocí GET nebo POST.
A ono if($_SERVER['REQUEST_METHOD'] != 'POST') zkouší, zda jsem na tuto stránku metodou post nepřišel, neboli jestli jsem neodeslal formulářová data metodou POST.
Jestliže jsem na stránku přišel normálně, tak žádná data formulář neposlal, zobrazí se proto prázdný formulář – viz funkce zobraz(), kde mají jednotlivé proměnné hodnotu prázdného řetězce.

Jestliže jsem ale formulář odeslal, vracím se na stejnou stránku, ale funkci zobraz() jsem odesláním dormuláře předal hodnoty pomocí metody POST.
Miloš
Profil
MAUGLI
Ještě bych doplnil – data je vhodné otestovat i před odesláním – javascriptem.
Proto ono onsubmit="return kontroluj(this)"
Pokud js. kontrola zjistí nedostatek, formulář se neodešle, místo toho vyleze hláška.
No a jestliže není js povolen, pak to zkontroluje php, viz výše.

Zmíněná javascriptová kontrola ve zkratce:

function kontroluj(formular){
pr = formular.prijmeni.value; // příjmení
em = formular.email.value; // e-mail
if (window.RegExp) {
if (pr == "") {alert ("Vyplňte, prosím, své příjmení"); formular.prijmeni.focus(); return false;}
if (em == "" || em == "@") {alert ("Vyplňte, prosím, svůj e-mail); formular.email.focus(); return false;}
}
}
MAUGLI
Profil *
Miloš

Tvé řešení se mi velmi zamlouvá...

... akorát se chci zeptat k tomu JS ve zkratce... je to takhle funční, nebo je to potřeba nějak doladit. Já jsem na JS úplná NULA :)
Miloš
Profil
Takhle je to funkční. Není ale ošetřeno, jestli políčko email neobsahuje třeba @hovadina, stejně jako jestli jméno není třeba 565. To by se řešilo pomocí regulárních výrazů, které jsem se ještě nenaučil (ach ta lenost!)

Ten js namusíš dávat do dokumentu, stačí ho přilinkovat:
<script type="text/javascript" src="kontrola.js"></script>
(je-li uložen v souboru kontrola.js)
Toto téma je uzamčeno. Odpověď nelze zaslat.

0