Autor Zpráva
Joan
Profil
Přeji hezký den,
mám funkční webový formulář, u kterého bych chtěla, aby pouze po správném vyplnění potřebných inputů se zobrazila vedle formuláře stylová 3050ms animace v GIFu (flash zatím neumím, tak proto gif) a teprve po ní se stránka přesměrovala na jinou.
Mám zhruba tento kód:
...
if  (empty($chyba))
{
echo "<div id='anim'><img src='animace/formular_animace.gif' width=220 height=210 /></div>";
sleep(3.05);
cs_mail("prijemce@email.cz", $predmet, $zprava, "From: $email\n");
header ("location: http://localhost/slozka_stranek/diky.php");
...


a moje "interpretace", že v případě žádné chyby se zobrazí ona animace (kterou vpravo vedle formuláře ještě musím nastylovat), script počká 3.05s (trvání animace), vyplněný formulář se stále bude zobrazovat a teprve potom přesměruje na stránku diky.php mi nevychází, protože neumím animaci donutit, aby se tady a teď zobrazila. Resp. pokud vynechám header: location a echo s animací umístím hned za funkci cs_mail(), tak se animace zobrazí, ovšem až na přesměrované stránce diky.php což ale nechci.
Přesměrování podle výše uvedeného kódu skutečně čeká ty asi 3 sekundy, ovšem bez zobrazení animace...
Poradíte mi někdo prosím? Nepoužívám zatím ani JavaScript, ani databáze.
esonyx
Profil *
Za pomocí javascriptu by to šlo. Po kliknutí na odkaz provést kontrolu javascriptem, po té změnit obsah divu (zobrazit v něm obrazek) a po té javascriptem odeslat. Samozřejmě na straně serveru znovu zkontrolovat poslaná data.
Joan
Profil
esonyx:
Nějak nerozumím, jaký odkaz máš na mysli, já tam totiž žádný nemám.
Moje řešení žádný error nehází (a ve WAMPu jsou defaultně zapnuté myslím všechny chybové hlášky), jen to mám možná špatně poskládané, protože animace se nezobrazí tam, kde chci.
Jinak vím, že Javascriptem se taky dají dělat animace, ale já chci GIF i z toho důvodu, že JS může být vypnutý.
AM_
Profil
Takhle bohužel PHP nefunguje. PHP si nejdřív "vytvoří stránku", tu pak pošle prohlížeči, v tu chvíli teprve uživatel něco vidí, ale PHP už dávno nic nedělá. Takže není možné dělat plynulou aplikaci typu "zobraz obrázek, počkej a pak se přesměruj", navíc PHP přesměrování přes header musí být před jakýmkoli výstupem, tedy echo.

Řešení je:
- udělat to přes JS, jak píše Joan, je to triviální a dnes má drtivá většina uživatelů PC v prohlížečích zapnutý JS
- udělat to přes HTML - pokud je formulář vyplněn správně, zobrazit stránku s obrázkem a dát tam HTML přesměrování (nějak přes meta tag, teď z hlavy nevím, jak vypadá)
Joan
Profil
AM:
No to jsi mě nepotěšil, ale přesto díky, nebudu tedy čekat nemožné.
V jedné knížce od Rastislava Škultétyho mám návod, jak udělat animaci v Javascriptu, ale koukám že tam je to udělané z jednotlivých obrázků, kdežto já už mám animaci hotovou jako jeden soubor v GIFu.
Přes to HTML by to bylo na tři stránky, jestli to dobře chápu, že? První stránka s vlastním formulářem, druhá při splnění správně vyplněných položek, která by obsahovala opět formulář (už vyplněný) plus vedle formuláře animaci a třetí stránka by byla pomocí tagu v HTML přesměrovaná na stránku s poděkováním a informací, že zpráva byla odeslána dobře.
Nebo to udělat tak, že po správném vyplnění položek nastavím místo funkce cs_mail() napřed zobrazení stránky s formulářem a animací a teprve potom funkci cs_mail() a přesměrování na stránku s poděkováním a informací o správném odeslání?
Nebo jak použít to třísekundové zpoždění ve spolupráci s Javascriptem? Lze to vůbec takto udělat? JS teda zatím neovládám vůbec...
Díky předem za nápovědu!
AM_
Profil
Joan:
V jedné knížce od Rastislava Škultétyho mám návod, jak udělat animaci v Javascriptu
Pochopitelně animace v GIFu zůstane, ten návod je zřejmě jen ukázka, jak v JS dynamicky měnit obrázky. JS se pouze postará o režii zobrazení toho obrázku. Nástin:

<script type="text/javascript">
function validate(form)
{
  if (form.jmeno.value="pepa") { //toto je validace formulare
    if (form.alreadyShownPicture) {
      //znovu vyvolani submitu - povolime ho
      return true;
    } else {
      //zobrazime formular, submit zrusime a za 3.2 sekundy jej vyvolame znovu
      form.alreadyShownPicture = true;
      document.getElementById('spravne').style.display=block;
      setTimeout("document.getElementById('myform').submit()", 3200);
      return false;
    }
  }
}
</script>
<form method="post" id="myform" action="" onsubmit="return validate(this)">
<input type="text" name="jmeno">
<input type="submit" value="odeslat">
<img src="spravne.gif" alt="spravne" style="display:none" id="spravne">
</form>


Tohle by mělo v principu fungovat (psal jsem to z hlavy, tak tam možná nějaká drobnost bude), takhle nějak vypadá logika na straně formuláře. Co potom s daty z formuláře uděláš, už je na tobě, jestli někomu budeš posílat mail nebo tak.
Joan
Profil
AM:
Joj, to vypadá složitě, ale prokousám se tím! K JS jsem zatím jen přičichla, ale jednou začít musím, že.
Zatím Ti moc děkuju :-)

EDIT: Mohu ještě poprosit o "propojení" Tebou napsaného scriptu s pojmenováními tohoto mého formuláře ? Já při své neznalosti např. nevím, zda alreadyShownPicture je tzv. klíčové slovo Javascriptu nebo sis ho mohl vymyslet. Stejně tak nemám představu, jak propojit
if (form.jmeno.value="pepa")

se skutečným pojmenováním v mém formuláři.
A je nutné, abych pro použití Tvého scriptu měla udělanou celou kontrolu formuláře v JS? Zatím ji mám totiž jen v PHP.
Díky moc za pomoc, připadá mi to příliš složité.
Jo a na začátku všech stránek chci mít nahoře menu, takže výstupu před header se nevyhnu a asi to budu muset řešit přes ob_start() protože dát menu do kódu oproti jiným stránkám dolů, tj. za header a přepozicovat ho jen pro jednu stránku se mi příliš nechce (=měla bych v tom pak zmatek).

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:

0