Odesílání emailu z php formuláře
17 příspěvků
Archiv diskusního fóra
Fórum je uzavřené a slouží pouze ke čtení. Některé informace mohou být zastaralé.
-
Dobrý den, chtěl bych se zeptat zda a jak propojit php formulář s odesláním emailu na seznam. Kontakty - poupatko.wz.cz Děkuji za radu. html: <form name="contactform" method="post" action="send_form_email.php"> <table width="450px"> <tr> <td valign="top"> <label for="first_name">JmĂ©no *</label> </td> <td valign="top"> <input type="text" name="first_name" maxlength="50" size="30"> </td> </tr> <tr> <td valign="top""> <label for="last_name">PĹ™Ăjmeni *</label> </td> <td valign="top"> <input type="text" name="last_name" maxlength="50" size="30"> </td> </tr> <tr> <td valign="top"> <label for="email">Email adresa *</label> </td> <td valign="top"> <input type="text" name="email" maxlength="80" size="30"> </td> </tr> <tr> <td valign="top"> <label for="telephone">TelefonĂ ÄŤĂslo</label> </td> <td valign="top"> <input type="text" name="telephone" maxlength="30" size="30"> </td> </tr> <tr> <td valign="top"> <label for="comments">Komentář *</label> </td> <td valign="top"> <textarea name="comments" maxlength="1000" cols="27" rows="6"></textarea> </td> </tr> <tr> <td colspan="2" style="text-align:center"> <input type="submit" value="Submit"> </td> </tr> </table> </form> Edit send_form_email.php <?php if(isset($_POST['email'])) { // EDIT THE 2 LINES BELOW AS REQUIRED $email_to = "vlsvo@seznam.cz"; $email_subject = "Your email subject line"; function died($error) { // your error code can go here echo "We are very sorry, but there were error(s) found with the form you submitted. "; echo "These errors appear below.<br /><br />"; echo $error."<br /><br />"; echo "Please go back and fix these errors.<br /><br />"; die(); } // validation expected data exists if(!isset($_POST['first_name']) || !isset($_POST['last_name']) || !isset($_POST['email']) || !isset($_POST['telephone']) || !isset($_POST['comments'])) { died('We are sorry, but there appears to be a problem with the form you submitted.'); } $first_name = $_POST['first_name']; // required $last_name = $_POST['last_name']; // required $email_from = $_POST['email']; // required $telephone = $_POST['telephone']; // not required $comments = $_POST['comments']; // required $error_message = ""; $email_exp = '/^[A-Za-z0-9._%-]+@[A-Za-z0-9.-]+.[A-Za-z]{2,4}$/'; if(!preg_match($email_exp,$email_from)) { $error_message .= 'The Email Address you entered does not appear to be valid.<br />'; } $string_exp = "/^[A-Za-z .'-]+$/"; if(!preg_match($string_exp,$first_name)) { $error_message .= 'The First Name you entered does not appear to be valid.<br />'; } if(!preg_match($string_exp,$last_name)) { $error_message .= 'The Last Name you entered does not appear to be valid.<br />'; } if(strlen($comments) < 2) { $error_message .= 'The Comments you entered do not appear to be valid.<br />'; } if(strlen($error_message) > 0) { died($error_message); } $email_message = "Form details below.nn"; function clean_string($string) { $bad = array("content-type","bcc:","to:","cc:","href"); return str_replace($bad,"",$string); } $email_message .= "First Name: ".clean_string($first_name)."n"; $email_message .= "Last Name: ".clean_string($last_name)."n"; $email_message .= "Email: ".clean_string($email_from)."n"; $email_message .= "Telephone: ".clean_string($telephone)."n"; $email_message .= "Comments: ".clean_string($comments)."n"; // create email headers $headers = 'From: '.$email_from."rn". 'Reply-To: '.$email_from."rn" . 'X-Mailer: PHP/' . phpversion(); @mail($email_to, $email_subject, $email_message, $headers); ?> <!-- include your own success html here --> Thank you for contacting us. We will be in touch with you very soon. <?php } ?>
-
Nechápu otázku. Co propojit? Vždyť přiložený kód všechno řeší. Nevím, odkud jsi to zkopíroval, ale chtělo by to začít u řádku začínajícím: // EDIT THE 2 LINES BELOW AS REQUIRED..
-
V adresáři kontaky na wz na příslušné stránce http://www.poupatko.wz.cz/kontakt/?p=5 mám v html formulář, který by měl odesílat email. Nicméně, se mi nic neodesílá. Nevíte v čem by mohl býtí problém. Email by měl chodit na seznam. Nechybí mi ještě neco v tom adresáři, krom toho html s názvem index.html a php skriptu - send_form_email.php, který jsem si někde stáhnul a snažil nakonfigurovat ?
-
Možná kdyby sis odstranil ten "@" před funkcí mail(), tak bys na to přišel. Nejprve si zablokuješ chybová hlášení a pak se divíš, že to nefunguje a nevíš proč. Také bys mohl provizorně místo funke mail() použít funkci echo() se stejnými parametry a vypsat si, co se vlastně snažíš odeslat.
-
zkusil jsem to předělat ale emaily mi stejně nechodí v čem by mohl být problém ? Děkuji za radu <?php if(isset($_POST['email'])) { // EDIT THE 2 LINES BELOW AS REQUIRED $email_to = "vlsvo@seznam.cz"; $email_subject = "Email from WEB"; function died($error) { // your error code can go here echo "We are very sorry, but there were error(s) found with the form you submitted. "; echo "These errors appear below.<br /><br />"; echo $error."<br /><br />"; echo "Please go back and fix these errors.<br /><br />"; die(); } // validation expected data exists if(!isset($_POST['first_name']) || !isset($_POST['last_name']) || !isset($_POST['email']) || !isset($_POST['telephone']) || !isset($_POST['comments'])) { died('We are sorry, but there appears to be a problem with the form you submitted.'); } $first_name = $_POST['first_name']; // required $last_name = $_POST['last_name']; // required $email_from = $_POST['email']; // required $telephone = $_POST['telephone']; // not required $comments = $_POST['comments']; // required $error_message = ""; $email_exp = '/^[A-Za-z0-9._%-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}$/'; if(!preg_match($email_exp,$email_from)) { $error_message .= 'The Email Address you entered does not appear to be valid.<br />'; } $string_exp = "/^[A-Za-z .'-]+$/"; if(!preg_match($string_exp,$first_name)) { $error_message .= 'The First Name you entered does not appear to be valid.<br />'; } if(!preg_match($string_exp,$last_name)) { $error_message .= 'The Last Name you entered does not appear to be valid.<br />'; } if(strlen($comments) < 2) { $error_message .= 'The Comments you entered do not appear to be valid.<br />'; } if(strlen($error_message) > 0) { died($error_message); } $email_message = "Form details below.\n\n"; function clean_string($string) { $bad = array("content-type","bcc:","to:","cc:","href"); return str_replace($bad,"",$string); } $email_message .= "First Name: ".clean_string($first_name)."\n"; $email_message .= "Last Name: ".clean_string($last_name)."\n"; $email_message .= "Email: ".clean_string($email_from)."\n"; $email_message .= "Telephone: ".clean_string($telephone)."\n"; $email_message .= "Comments: ".clean_string($comments)."\n"; // create email headers $headers = 'From: '.$email_from."\r\n". 'Reply-To: '.$email_from."\r\n" . 'X-Mailer: PHP/' . phpversion(); $zprava="first_name: $first_name\r\nlast_name: $last_name\r\nemail: $email_from\r\ntelephone: $telephone\r\ncomments: $comments\r\n"; if (isset($_POST['first_name'])&& isset($_POST['last_name']) && isset($_POST['email']) && isset($_POST['telephone']) && isset($_POST['comments']) ) {$result = mail ($email_to, $email_subject, $email_message, $headers ); if ($result) echo "E-mail byl úspěšně odeslán na vaši adresu s objednávkou."; else echo "E-mail nebyl odeslán, nastala chyba."; } else { echo "E-mail nebyl odeslán, nebyla vyplněna všechna potřebná pole .<br/>"; echo "Text e-mailu:<br/>".nl2br($zprava); } } ?>
-
Zkusil jsi tu funkci echo()? Co vypsala? K čemu vlastně používáš funkci clean_string()? Je k něčemu potřebná? Když budu někomu psát o content-type, tak mi to z té zprávy vymaže? Proč? Proč 2x testuješ existenci proměnných $_POST['xx']? Vždyť je to zbytečné. Zatím jsi nenapsal, jaká hlášení ti to vypisuje. To máme používat věšteckou kouli? Proč tam vkládáš hlavičku 'Reply-To:'? Asi netušíš, jaké problémy s ní bývají. Proč 2x sestavuješ zprávu? Jednou do $email_message, podruhé do $zprava?
-
Zkusil jsem to opravit. Nicméně mi to nic nevipisuje žádné hlášení ani po úpravě php scirptu. <?php if(isset($_POST['email'])) { // EDIT THE 2 LINES BELOW AS REQUIRED $email_to = "vlsvo@seznam.cz"; $email_subject = "Email from WEB"; $first_name = $_POST['first_name']; // required $last_name = $_POST['last_name']; // required $email_from = $_POST['email']; // required $telephone = $_POST['telephone']; // not required $comments = $_POST['comments']; // required // create email headers $headers = 'From: '.$email_from."\r\n". $zprava="first_name: $first_name\r\nlast_name: $last_name\r\nemail: $email_from\r\ntelephone: $telephone\r\ncomments: $comments\r\n"; if (isset($_POST['first_name'])&& isset($_POST['last_name']) && isset($_POST['email']) && isset($_POST['telephone']) && isset($_POST['comments']) ) {$result = mail ($email_to, $email_subject, $email_message, $headers ); if ($result) echo "E-mail byl úspěšně odeslán na vaši adresu s objednávkou."; else echo "E-mail nebyl odeslán, nastala chyba."; } else { echo "E-mail nebyl odeslán, nebyla vyplněna všechna potřebná pole .<br/>"; echo "Text e-mailu:<br/>".nl2br($zprava); } } ?>
-
Bavíme se stále o http://www.poupatko.wz.cz/kontakt/?p=5? Protože odkazovaný formulář totiž vůbec nevede na (celou dobu probíraný) skript send_form_email.php. Místo toho je směrovaný na /kontakt/?p=5 (což je mimochodem identická stránka). Opět, nevím odkud jsi to zkopíroval tentokrát, ale co tam sakra dělá toto: <script type="text/javascript">document.write('<fo');document.write('rm act');document.write('ion="?p=5" me');document.write('thod="po');document.write('st" na');document.write('me="contac');document.write('t-form" enctype="multi');document.write('part/form-data" id="fo');document.write('rm-5">'); (Pozn. pokud se zo nezobrazí tady na fóru správně, tak je tam vložený javascriptový kód, který vytvoří otevírací tag pro formulář.)
-
Těch blbostí je tam víc. Proč jsou například kolem @ v mailových adresách mezery? Aby se na to nedalo kliknout, když ti někdo chce poslat mail? Někdo tam zase místo toho rve (at) a jiné hovadiny. To už není ochrana proti spammerům, ale proti zákazníkům, kteří chtějí nakoupit.
-
Děkuji. Už mi to posílá emaily. :-)
-
Nevím co myslíš "@ v mailových adresách mezery"? Můžeš mi to nějak blíže popsat. Díky za info.
-
Když napíšeš "obchod @ nasefirma.cz". Správně je "obchod@nasefirma.cz", tedy bez mezer. Také je dobré z toho udělat odkaz, aby se na to dalo kliknout.
-
Zkusil jsem dodělat do php scritpu nějaký ošetření proti spamům, ale vypisuje mi to, že nebyly všechny potřebné položky vyplněny. Můžu poprosit o radu v čem je problém ? <?php if(isset($_POST['email'])) { // EDIT THE 2 LINES BELOW AS REQUIRED $email_to = "vlsvo@seznam.cz"; $email_subject = "Email from WEB"; $first_name = $_POST['first_name']; // required $last_name = $_POST['last_name']; // required $email_from = $_POST['email']; // required $telephone = $_POST['telephone']; // not required $comments = $_POST['comments']; // required $spam = $_POST['spam']; // required // create email headers $headers = 'From: '.$email_from."\r\n". $zprava="first_name: $first_name\r\nlast_name: $last_name\r\nemail: $email_from\r\ntelephone: $telephone\r\ncomments: $comments\r\nspam: $spam\r\n" ; if (isset($_POST['first_name'])&& isset($_POST['last_name']) && isset($_POST['email']) && isset($_POST['telephone']) && isset($_POST['comments']) && isset($_POST['spam'=="12"]) ) {$result = mail ($email_to, $email_subject, $zprava, $headers ); if ($result) echo "E-mail byl úspěšně odeslán na vaši adresu s objednávkou."; else echo "E-mail nebyl odeslán, nastala chyba."; } else { echo "E-mail nebyl odeslán, nebyla vyplněna všechna potřebná pole .<br/>"; echo "Text e-mailu:<br/>".nl2br($zprava); } } ?>
-
Tak takto opravdu nee: isset($_POST['spam'=="12"]) Pokud ti to připadá v pořádku, zapoměň na jakékoliv další úpravy a začni prosím alespoň se základy PHP (nebo jakéhokoliv jiného programovacího jazyka).
-
Použil jsem ukázku z jaksedelaweb. h1>Odesílání emailu</h1> <? $predmet = $_POST['predmet']; $email = $_POST['email']; $spam = $_POST['spam']; $zprava = $_POST['zprava']; if ($predmet!="" and $email!="" and $zprava!="" and $spam=="2") { Mail("nekdo@seznam.cz", $predmet, $zprava, "From: " . $email); echo "<p><strong>Váš e-mail byl úspěšně odeslán</strong>.</p>"; } else { echo "<p>Váš e-mail se <strong>nepodařilo odeslat</strong> pravděpodobně jste nevyplnili všechny údaje, nebo nevíte kolik je 1 + 1.</p>"; } ?> </body> Prosím tedy o radu. Dekuji
-
Už jsem ti ji dal. Zapoměň na další úpravy a začni prosím alespoň se základy PHP (nebo jakéhokoliv jiného programovacího jazyka). Hned v prvních lekcích by ses dozvěděl, že zápis $_POST[] je pole a hodnota v hranatých závorkách je index v poli (celočíselný, v PHP taky jako řetězec). Správně to tedy má být asi takto: if(isset($_POST['spam'])) { if($_POST['spam'] == '12') { echo 'Ok'; } else { echo 'Failure'; } } Mimochodem, zmíněný postup opravdu nemá s ochranou proti spamu nic společného (protože správná odpověď pro součet je vždycky stejná). Pouze otravuješ uživatele s nutností vyplnit jedno pole navíc. A myslím si, že autor původního kódu to jistě zmínil v doprovodném komentáři. Na další otázky z úrovně "nikdy jsem neviděl manuál" odpovídat nebudu ;)
-
Naopak se občas vyplatí přidat do formuláře neviditelné políčko s názvem např. "nickname". Robot ho automaticky vyplní, ale člověk ho nevidí a tedy nechá prázdné.