Php formulier mailen
Via PHPtutsDOTnl http://www.phptuts.nl/view/39/8/ heb ik een tutorial gevolgd om een contactformulier te maken. Dit is de code geworden:
Nu wil ik graag een mailfunctie inbouwen, zodat de ingevulde velden via de mail verstuurd worden. Heeft iemand hier een tutorial of tip voor?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
<?php
// Controle of een formulier gepost is
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
// Arrays declareren voor opslag van fouten en data
$aErrors = array();
$aData = array();
// Velden die in het formulier aanwezig moeten zijn
$aFormulierenVelden = array ("firstname", "street", "email", "surname", "place", "phonenumber", "licenseplate", "comment");
// Alle formuliervelden doorlopen
foreach($aFormulierenVelden as $sVeld)
{
// Controleren of er een waarde voor het formulierveld bestaat
if(isset($_POST[$sVeld]))
{
// Spaties aan begin en eind weghalen
$sValue = trim($_POST[$sVeld]);
// Controle of variabele gevuld is
if($sValue == '')
{
// Foutmelding toevoegen
$aErrors[] = 'Je bent vergeten om '.$sVeld.' in te vullen';
}
// Ingevulde waarden aan data array toevoegen
$aData[$sVeld] = $sValue;
}
else
{
$aErrors[] = 'Het veld '.$sVeld.' is niet gepost!';
}
}
// Controleren of er geen fouten opgetreden zijn
if(empty($aErrors))
{
// Formulier succes!
echo '<p>Bedankt, uw aanvraag is verstuurd.</p>';
}
else
{
// Fouten opgetreden: weergeven en terug naar home
header('Refresh: 3; url=afspraak_maken.html');
foreach($aErrors as $sError)
{
echo '<p style="color:red">'.$sError.'</p>';
}
}
}
else
{
// Verwerk.php mag nog niet bezocht worden, terug naar het formulier
header('Location: afspraak_maken.html');
}
?>[/CODE]
// Controle of een formulier gepost is
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
// Arrays declareren voor opslag van fouten en data
$aErrors = array();
$aData = array();
// Velden die in het formulier aanwezig moeten zijn
$aFormulierenVelden = array ("firstname", "street", "email", "surname", "place", "phonenumber", "licenseplate", "comment");
// Alle formuliervelden doorlopen
foreach($aFormulierenVelden as $sVeld)
{
// Controleren of er een waarde voor het formulierveld bestaat
if(isset($_POST[$sVeld]))
{
// Spaties aan begin en eind weghalen
$sValue = trim($_POST[$sVeld]);
// Controle of variabele gevuld is
if($sValue == '')
{
// Foutmelding toevoegen
$aErrors[] = 'Je bent vergeten om '.$sVeld.' in te vullen';
}
// Ingevulde waarden aan data array toevoegen
$aData[$sVeld] = $sValue;
}
else
{
$aErrors[] = 'Het veld '.$sVeld.' is niet gepost!';
}
}
// Controleren of er geen fouten opgetreden zijn
if(empty($aErrors))
{
// Formulier succes!
echo '<p>Bedankt, uw aanvraag is verstuurd.</p>';
}
else
{
// Fouten opgetreden: weergeven en terug naar home
header('Refresh: 3; url=afspraak_maken.html');
foreach($aErrors as $sError)
{
echo '<p style="color:red">'.$sError.'</p>';
}
}
}
else
{
// Verwerk.php mag nog niet bezocht worden, terug naar het formulier
header('Location: afspraak_maken.html');
}
?>[/CODE]
Gewijzigd op 05/04/2016 08:30:04 door Jan Graneker
Deze kan je met implode() samenlijmen tot een bijv. Met komma gescheiden string.
Ook kan je deze met foreach uitlezen en de inhoud samenvoegen tot één string. Die string is dan de body van de mail.
Zou de volgende code kloppen?
- Ariën - op 05/04/2016 08:37:13:
In de $aData array staan de waardes.
Deze kan je met implode() samenlijmen tot een bijv. Met komma gescheiden string.
Ook kan je deze met foreach uitlezen en de inhoud samenvoegen tot één string. Die string is dan de body van de mail.
Deze kan je met implode() samenlijmen tot een bijv. Met komma gescheiden string.
Ook kan je deze met foreach uitlezen en de inhoud samenvoegen tot één string. Die string is dan de body van de mail.
Gewijzigd op 05/04/2016 09:08:33 door - Ariën -
Op lijn 41 moet je de mail()-functie plaatsen. Je wilt immers dat alle validaties zijn goedgekeurd, en er dus geen errors zijn.
Ik kwam de volgende fucntie tegen: http://phpmailer.worxware.com/index.php?pg=examplebmail
Kan ik deze gebruiken, of is deze voor een beginner te uitgebreid?
- Ariën - op 05/04/2016 09:10:06:
Op lijn 41 moet je de mail()-functie plaatsen. Je wilt immers dat alle validaties zijn goedgekeurd, en er dus geen errors zijn.
phpMailer zou ik zeker aanbevelen. met mailen gaat een stuk gemakkelijker en minder foutgevoeliger waardoor het minder sneller als spam kan worden aangemerkt vanwege foute/missende headers.
Alvast bedankt voor de hulp, super :D
- Ariën - op 05/04/2016 09:16:40:
phpMailer zou ik zeker aanbevelen. met mailen gaat een stuk gemakkelijker en minder foutgevoeliger waardoor het minder sneller als spam kan worden aangemerkt vanwege foute/missende headers.
Je kan het natuurlijk ook zelf uittesten ;-)
Meldingen:
Warning: file_get_contents(Test): failed to open stream: No such file or directory in C:\xampp\htdocs\formulier.php on line 55
//De body lees ik dus nog niet goed uit.
Deprecated: Function eregi_replace() is deprecated in C:\xampp\htdocs\formulier.php on line 56
//Geen idee
Fatal error: Call to undefined method PHPMailer::SetFrom() in C:\xampp\htdocs\oefening\formulier.php on line 60
//Geen idee
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
<?php
// Controle of een formulier gepost is
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
// Arrays declareren voor opslag van fouten en data
$aErrors = array();
$aData = array();
// Velden die in het formulier aanwezig moeten zijn
$aFormulierenVelden = array ("firstname", "street", "email", "surname", "place", "phonenumber", "licenseplate", "comment");
// Alle formuliervelden doorlopen
foreach($aFormulierenVelden as $sVeld)
{
// Controleren of er een waarde voor het formulierveld bestaat
if(isset($_POST[$sVeld]))
{
// Spaties aan begin en eind weghalen
$sValue = trim($_POST[$sVeld]);
// Controle of variabele gevuld is
if($sValue == '')
{
// Foutmelding toevoegen
$aErrors[] = 'Je bent vergeten om '.$sVeld.' in te vullen';
}
// Ingevulde waarden aan data array toevoegen
$aData[$sVeld] = $sValue;
}
else
{
$aErrors[] = 'Het veld '.$sVeld.' is niet gepost!';
}
}
//
foreach($aData as $gegevens) {
echo $gegevens . '<br />';
}
// Controleren of er geen fouten opgetreden zijn
if(empty($aErrors))
{
// PHPmailer
require_once('_lib/class.phpmailer.php');
$mail = new PHPMailer(); // defaults to using php "mail()"
$body = file_get_contents($gegevens);
$body = eregi_replace("[\]",'',$body);
$mail->AddReplyTo("[email protected]","First Last");
$mail->SetFrom('[email protected]', 'First Last');
$mail->AddReplyTo("[email protected]","First Last");
$address = "[email protected]";
$mail->AddAddress($address, "John Doe");
$mail->Subject = "Aanvraag afspraak maken";
$mail->AltBody = "To view the message, please use an HTML compatible email viewer!"; // optional, comment out and test
$mail->MsgHTML($body);
if(!$mail->Send()) {
echo "Mailer Error: " . $mail->ErrorInfo;
} else {
echo "Message sent!";
}
// Formulier succes!
echo '<p>Bedankt, uw aanvraag is verstuurd.</p>';
}
else
{
// Fouten opgetreden: weergeven en terug naar home
header('Refresh: 3; url=afspraak_maken.html');
foreach($aErrors as $sError)
{
echo '<p style="color:red">'.$sError.'</p>';
}
}
}
else
{
// Verwerk.php mag nog niet bezocht worden, terug naar het formulier
header('Location: afspraak_maken.html');
}
?>
[/CODE]
Code (php)
De variabele $inhoud kan je dan gebruiken om die in je mail te plaatsen.
Over de melding over eregi: Deze functie is verouderd en moet worden herschreven naar preg_*():
SetFrom is nog niet zo'n heel oude functie in PHPMailer.
Welke versie van PHPMailer heb je gebruikt?
Probeer de laatste eens
De Preg_replace heeft nog niet het gewenste resultaat. Ook krijg ik nog een melding op lijn 56: $body = file_get_contents($inhoud);
Toevoeging op 05/04/2016 11:50:18:
De laatste versie: FE v4.11
Ivo P op 05/04/2016 11:31:10:
Fatal error: Call to undefined method PHPMailer::SetFrom() in C:\xampp\htdocs\oefening\formulier.php on line 60
SetFrom is nog niet zo'n heel oude functie in PHPMailer.
Welke versie van PHPMailer heb je gebruikt?
Probeer de laatste eens
SetFrom is nog niet zo'n heel oude functie in PHPMailer.
Welke versie van PHPMailer heb je gebruikt?
Probeer de laatste eens
En welke melding krijg je?
Meldingen:
Warning: file_get_contents(De ingevoerde gegevens zijn: Firstname: Voornaam Street: Test 12 Email: [email protected] Surname: TestNijveldt Place: test Phonenumber: 0612345678 Licenseplate: 83-ie-93 Comment: Test ): failed to open stream: Invalid argument in C:\xampp\htdocs\oefening\formulier.php on line 55
Warning: preg_replace(): Compilation failed: missing terminating ] for character class at offset 3 in C:\xampp\htdocs\oefening\formulier.php on line 56
Fatal error: Call to undefined method PHPMailer::setFrom() in C:\xampp\htdocs\oefening\formulier.php on line 60
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
<?php
// Controle of een formulier gepost is
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
// Arrays declareren voor opslag van fouten en data
$aErrors = array();
$aData = array();
// Velden die in het formulier aanwezig moeten zijn
$aFormulierenVelden = array ("firstname", "street", "email", "surname", "place", "phonenumber", "licenseplate", "comment");
// Alle formuliervelden doorlopen
foreach($aFormulierenVelden as $sVeld)
{
// Controleren of er een waarde voor het formulierveld bestaat
if(isset($_POST[$sVeld]))
{
// Spaties aan begin en eind weghalen
$sValue = trim($_POST[$sVeld]);
// Controle of variabele gevuld is
if($sValue == '')
{
// Foutmelding toevoegen
$aErrors[] = 'Je bent vergeten om '.$sVeld.' in te vullen';
}
// Ingevulde waarden aan data array toevoegen
$aData[$sVeld] = $sValue;
}
else
{
$aErrors[] = 'Het veld '.$sVeld.' is niet gepost!';
}
}
// Controleren of er geen fouten opgetreden zijn
if(empty($aErrors))
{
$inhoud = "De ingevoerde gegevens zijn:".PHP_EOL;
foreach($aData as $veld=>$waarde) {
$inhoud .= ucfirst($veld).": ".$waarde.PHP_EOL;
}
// PHPmailer
require_once('_lib/class.phpmailer.php');
$mail = new PHPMailer(); // defaults to using php "mail()"
$body = file_get_contents($inhoud);
$body = preg_replace("#[\]#",'',$body);
$mail->AddReplyTo("[email protected]","First Last");
$mail->setFrom('[email protected]', 'First Last');
$mail->AddReplyTo("[email protected]","First Last");
$address = "[email protected]";
$mail->AddAddress($address, "John Doe");
$mail->Subject = "Aanvraag afspraak maken";
$mail->AltBody = "To view the message, please use an HTML compatible email viewer!"; // optional, comment out and test
$mail->MsgHTML($body);
if(!$mail->Send()) {
echo "Mailer Error: " . $mail->ErrorInfo;
} else {
echo "Bedankt, uw aanvraag is verstuurd.";
}
// Formulier succes!
echo '<p>Bedankt, uw aanvraag is verstuurd.</p>';
}
else
{
// Fouten opgetreden: weergeven en terug naar home
header('Refresh: 3; url=afspraak_maken.html');
foreach($aErrors as $sError)
{
echo '<p style="color:red">'.$sError.'</p>';
}
}
}
else
{
// Verwerk.php mag nog niet bezocht worden, terug naar het formulier
header('Location: afspraak_maken.html');
}
?> [/CODE]
// Controle of een formulier gepost is
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
// Arrays declareren voor opslag van fouten en data
$aErrors = array();
$aData = array();
// Velden die in het formulier aanwezig moeten zijn
$aFormulierenVelden = array ("firstname", "street", "email", "surname", "place", "phonenumber", "licenseplate", "comment");
// Alle formuliervelden doorlopen
foreach($aFormulierenVelden as $sVeld)
{
// Controleren of er een waarde voor het formulierveld bestaat
if(isset($_POST[$sVeld]))
{
// Spaties aan begin en eind weghalen
$sValue = trim($_POST[$sVeld]);
// Controle of variabele gevuld is
if($sValue == '')
{
// Foutmelding toevoegen
$aErrors[] = 'Je bent vergeten om '.$sVeld.' in te vullen';
}
// Ingevulde waarden aan data array toevoegen
$aData[$sVeld] = $sValue;
}
else
{
$aErrors[] = 'Het veld '.$sVeld.' is niet gepost!';
}
}
// Controleren of er geen fouten opgetreden zijn
if(empty($aErrors))
{
$inhoud = "De ingevoerde gegevens zijn:".PHP_EOL;
foreach($aData as $veld=>$waarde) {
$inhoud .= ucfirst($veld).": ".$waarde.PHP_EOL;
}
// PHPmailer
require_once('_lib/class.phpmailer.php');
$mail = new PHPMailer(); // defaults to using php "mail()"
$body = file_get_contents($inhoud);
$body = preg_replace("#[\]#",'',$body);
$mail->AddReplyTo("[email protected]","First Last");
$mail->setFrom('[email protected]', 'First Last');
$mail->AddReplyTo("[email protected]","First Last");
$address = "[email protected]";
$mail->AddAddress($address, "John Doe");
$mail->Subject = "Aanvraag afspraak maken";
$mail->AltBody = "To view the message, please use an HTML compatible email viewer!"; // optional, comment out and test
$mail->MsgHTML($body);
if(!$mail->Send()) {
echo "Mailer Error: " . $mail->ErrorInfo;
} else {
echo "Bedankt, uw aanvraag is verstuurd.";
}
// Formulier succes!
echo '<p>Bedankt, uw aanvraag is verstuurd.</p>';
}
else
{
// Fouten opgetreden: weergeven en terug naar home
header('Refresh: 3; url=afspraak_maken.html');
foreach($aErrors as $sError)
{
echo '<p style="color:red">'.$sError.'</p>';
}
}
}
else
{
// Verwerk.php mag nog niet bezocht worden, terug naar het formulier
header('Location: afspraak_maken.html');
}
?> [/CODE]
Gewijzigd op 05/04/2016 12:09:20 door Jan Graneker
Gebruik verder bij voorkeur de GitHub versie: https://github.com/PHPMailer/PHPMailer
En kijk dan eens naar deze example.
PHPMailer heeft volgens mij nooit een versie 4 gehad....
De recentste versie is 5.2.14
Warning: file_get_contents(De ingevoerde gegevens zijn: Firstname: Voornaam Street: Test 12 Email: [email protected] Surname: dfasdf Place: test Phonenumber: 0612345678 Licenseplate: sdasd Comment: asds ): failed to open stream: Invalid argument in C:\xampp\htdocs\oefening\formulier.php on line 65
Mailer Error: Message body empty
Gewijzigd op 05/04/2016 13:09:12 door Jan Graneker
Dat betekent dat $inhoud naar een file moet wijzen.
$inhoud bevat bij jouw script echter een stuk tekst mbt de ingevoerde gegevens
zie regel 46
$mail->msgHTML($body = $inhoud; );
Ivo P op 05/04/2016 13:12:34:
$body = file_get_contents($inhoud);
Dat betekent dat $inhoud naar een file moet wijzen.
$inhoud bevat bij jouw script echter een stuk tekst mbt de ingevoerde gegevens
zie regel 46
Dat betekent dat $inhoud naar een file moet wijzen.
$inhoud bevat bij jouw script echter een stuk tekst mbt de ingevoerde gegevens
zie regel 46
Gewijzigd op 05/04/2016 13:31:20 door Jan Graneker
Ja, maar het is nog beter om gewoon geen inhoud uit variabelen te kopiëren, en dus gewoon $inhoud te gebruiken in je mail.
zit me alleen af te vragen wat die preg_replace() nu precies zou moeten doen.
Alle \ vervangen? maar dan zou het mi. \\ moeten zijn.
En dan zou str_replace() een goedkopere functie zijn.