Autor Zpráva
Mates111
Profil
Zdravím programátoři,

mohl by mi někdo poradit?
formulář se mi povede odeslat na svůj email, ale když se podívám na svůj mail, tak ano mail mi přijde, ale je prázdný, a ani není vidět od koho je

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title></title>
    </head>
    <body>
       <?php
header("Content-Type: text/html; charset=utf-8");
$to = "ma.jedlicka@gmail.com";
$extra = "From: $email\r\nReply-To: $email\r\n";
$subject = "Kontakt od ".$jmeno."";
$mess = "Jméno: ".$jmeno."\nEmail: ".$email."\nText:\n".$text."";
mb_language('Neutral');
mb_internal_encoding("UTF-8");
mb_http_input("UTF-8");
mb_http_output("UTF-8");
if($text==" "||ereg("^.+@.+\..+$", $email)){
echo "<script>alert('Špatně zadané údaje, zkuste to prosím znovu.');</script>";
} else{
$succes = mb_send_mail($to, $subject, $mess, $extra);
if($succes){
echo "<script>alert('Zpráva byla úspěšně odeslána, děkujeme.');</script>";
}else{
echo "<script>alert('Nastala chyba, zkuste nás kontaktovat na e-mail: ma.jedlicka@gmail.com');</script>"; } }
print "<meta http-equiv=\"refresh\" content=\"0;URL=index.php\">";
exit();
?>
    </body>
</html>
jenikkozak
Profil
Nejčastější potíže s PHP (FAQ) » Nefungují proměnné z formuláře nebo z URL (vypnuté register globals)
Mates111
Profil
jenikkozak:
Z toho moc chytřejší nejsem
Davex
Profil
Proměnné $email, $jmeno, $text nejsou definované, takže se nemá co odeslat. Údaje z formuláře se musí získat odjinud, jak psal jenikkozak [#2].
Mates111
Profil
A mohl by si mě poradit jak to provést?
xROAL
Profil
Formulár tieto údaje posiela buď cez GET alebo POST. A tak k ním treba aj v PHP pristupovať. Ak máme vo formulári prvok s menom "text", ktorý sa posiela cez POST, tak v PHP sa k nemu dostaneme cez superglobálne pole $_POST, konkrétne $_POST['text'].

Toto je ostatne vysvetlené aj v odkaze ktorý sem dal [#2] jenikkozak (a myslím, že na tom vysvetlení nie je čo nechápať).
Mates111
Profil
To sem samozřejmě udělal, ale bez žádné odezvy
Rfilip
Profil
Tak sem dej kod formulare a novou verzi kodu co jsi uvedl v [#1].
Mates111
Profil
Už mi to funguje sem přehlídnul jednu proměnnou.
Díky!
Mates111
Profil
Mám tu ještě jeden problém, v podmínce to mám ošetřený ale stejně když odešlu prázdný formulář tak se odešle. Mohl by se na to někdo podívat?
<?php
header("Content-Type: text/html; charset=utf-8");
$to = "ma.jedlicka@gmail.com";
$extra = "From: $_POST[email]\r\nReply-To: $_POST[email]\r\n";
$subject = "Kontakt od ".$_POST['jmeno']."";
$mess = "Jméno: ".$_POST['jmeno']."\nEmail: ".$_POST['email']."\nText:\n".$_POST['text']."";
mb_language('Neutral');
mb_internal_encoding("UTF-8");
mb_http_input("UTF-8");
mb_http_output("UTF-8");
if($jmeno=="  "||$text==" "||ereg("^.+@.+\..+$", $email)){
echo "<script>alert('Špatně zadané údaje, zkuste to prosím znovu.');</script>";
} else{
$succes = mb_send_mail($to, $subject, $mess, $extra);
if($succes){
echo "<script>alert('Zpráva byla úspěšně odeslána, děkujeme.');</script>";
}else{
echo "<script>alert('Nastala chyba, zkuste nás kontaktovat na e-mail: ma.jedlicka@gmail.com');</script>"; } }
print "<meta http-equiv=\"refresh\" content=\"0;URL=kontakt.html\">";
exit();
?>
Tori
Profil
Řádek 11 změňte na něco takovéhoto:
if (empty($_POST['jmeno']) || empty($_POST['text']) || empty($_POST['email']) || !preg_match('#^.+@.+\..+$#U', $_POST['email'])) {
Mates111
Profil
Bohužel i s tímto mi to nefunguje
Tori
Profil
Ještě by tam místo empty($_POST['jmeno']) mohlo být preg_match('~^\s*$~'). Totiž empty ověřuje, jestli proměnná není prázdná, takže např. když zadám jen mezeru, tak se mail odešle. Kdežto tím regulárem by se odchytil i formulář, který bude obsahovat pouze bílé znaky (mezery, zalomení řádku). Btw opravila jsem regulár v [#11], zkuste nejdřív to.
Mates111
Profil
Vyzkoušel jsem další možnosti, ale zatím se mi to rozchodit nepovedlo


Tak už mi to funguje, děkuju
Tori
Profil
Mates111:
A kde teda nakonec byla chyba?
Mates111
Profil
Tori:
Udělal jsem to podle toho jak jste mi říkala, až na jedno, ověřování správné formy emailu jsem použil !ereg
Jan Tvrdík
Profil
Mates111:
Funkce ereg je zastaralá a spoléhání na ni je velmi nedoporučováno.

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: