webzdarma.cz
>info>registrace>katalog>podminky>podpora>forum>reklama>kontakt
 Nové téma | Témata | Strukturovaně | Přihlášení 
 Diskuze | Následující téma | Předcházející téma 
  >forum

 Odesílání emailu z php formuláře
Autor: Vlada (poupatko.wz.cz)
Datum:  30. 03. 2012 20:12

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
}
?>

Reagovat 
 
 Re: Odesílání emailu z php formuláře
Autor: Freeze (dreamer.kvalitne.cz)
Datum:  30. 03. 2012 23:44

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..

Reagovat 
 
 Re: Odesílání emailu z php formuláře
Autor: Vlada (poupatko.wz.cz)
Datum:  31. 03. 2012 12:35

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 ?

Reagovat 
 
 Re: Odesílání emailu z php formuláře
Autor: Kit (ekobrikety.vyrobce.cz)
Datum:  31. 03. 2012 12:59

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.

Reagovat 
 
 Re: Odesílání emailu z php formuláře
Autor: Vlada (poupatko.wz.cz)
Datum:  01. 04. 2012 12:05

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);
}
}

?>

Reagovat 
 
 Re: Odesílání emailu z php formuláře
Autor: Kit (ekobrikety.vyrobce.cz)
Datum:  01. 04. 2012 12:30

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?

Reagovat 
 
 Re: Odesílání emailu z php formuláře
Autor: Vlada (poupatko.wz.cz)
Datum:  01. 04. 2012 17:37

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);
}
}

?>

Reagovat 
 
 Re: Odesílání emailu z php formuláře
Autor: Freeze (dreamer.kvalitne.cz)
Datum:  01. 04. 2012 17:54

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ář.)

Reagovat 
 
 Re: Odesílání emailu z php formuláře
Autor: Kit (ekobrikety.vyrobce.cz)
Datum:  01. 04. 2012 18:18

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.

Reagovat 
 
 Re: Odesílání emailu z php formuláře
Autor: Vlada (poupatko.wz.cz)
Datum:  01. 04. 2012 18:25

Děkuji. Už mi to posílá emaily. :-)

Reagovat 
 
 Re: Odesílání emailu z php formuláře
Autor: Vlada (poupatko.wz.cz)
Datum:  01. 04. 2012 18:30

Nevím co myslíš "@ v mailových adresách mezery"? Můžeš mi to nějak blíže popsat.
Díky za info.

Reagovat 
 
 Re: Odesílání emailu z php formuláře
Autor: Kit (ekobrikety.vyrobce.cz)
Datum:  01. 04. 2012 18:35

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.

Reagovat 
 
 Re: Odesílání emailu z php formuláře
Autor: Vlada (poupatko.wz.cz)
Datum:  01. 04. 2012 19:30

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);
}
}

?>

Reagovat 
 
 Re: Odesílání emailu z php formuláře
Autor: Freeze (dreamer.kvalitne.cz)
Datum:  01. 04. 2012 19:46

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).

Reagovat 
 
 Re: Odesílání emailu z php formuláře
Autor: Vlada (poupatko.wz.cz)
Datum:  01. 04. 2012 21:43

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

Reagovat 
 
 Re: Odesílání emailu z php formuláře
Autor: Freeze (dreamer.kvalitne.cz)
Datum:  01. 04. 2012 21:53

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 ;)

Reagovat 
 
 Re: Odesílání emailu z php formuláře
Autor: Kit (ekobrikety.vyrobce.cz)
Datum:  01. 04. 2012 22:04

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é.

Reagovat 
 Nové téma | Témata | Strukturovaně | Přihlášení   Diskuze | Následující téma | Předcházející téma 

 Diskuze | Zaregistrujte se zde 
 Přihlášení Uživatele
 Uživatelské jméno:
 Heslo:
   

Dovolená se ZÁJEZDY.CZ - Egypt, Tunisko, Řecko, Chorvatsko, Bulharsko, Itálie, Španělsko, Turecko, Francie, ...
Jen renomované cestovní kanceláře! LAST MINUTE nabídky zdarma na e-mail. Lyžování. Letenky. SR - Zájazdy.sk.
(c) 2002 - 2013 AYA s.r.o. prověřený webhosting