Formulier afhandeling met template
Graag had ik wat advies van jullie over het volgende.
Via een formulier wil ik een email kunnen sturen met een vaste opmaak (template).
In het formulier word gebruik gemaakt van een input email adres (waar de email naar toe moet) en nog een variabele waarde die terug moet komen in de template. Daarnaast wil ik een terug koppeling op de pagina dat het gelukt is.
Het formulier en de ajax call functie heb ik volledig af en wil nu graag weten wat nu de handigste afhandeling is.
Met vriendelijke groet,
Jop
output buffering +
include(_once()) van template waarin variabelen worden verwerkt?
Vervolgens zou je simpelweg met mail() + enige headers je mail kunnen versturen, of je maakt gebruik van PHPMailer als je dat leuk vindt.
Quote:
Daarnaast wil ik een terug koppeling op de pagina dat het gelukt is.
Dit staat verder los van enige werkwijze die je gebruikt. Vang de returnwaarde van mail() op in een variabele, of van de send() methode indien je PHPMailer gebruikt.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
$var = 'Jouw variabele';
$content = file_get_contents('mytemplate.txt'); // zou ook html kunnen zijn
if(FALSE === $content)
{
throw new Exception('Template not found.');
}
// vervang %VAR% voor de waarde in jouw variabele
$content = str_replace("%VAR%", $var, $content);
// verzend de email
mail($to, $subject, $content);
?>
$var = 'Jouw variabele';
$content = file_get_contents('mytemplate.txt'); // zou ook html kunnen zijn
if(FALSE === $content)
{
throw new Exception('Template not found.');
}
// vervang %VAR% voor de waarde in jouw variabele
$content = str_replace("%VAR%", $var, $content);
// verzend de email
mail($to, $subject, $content);
?>
mytemplate.txt:
Dit is wat ik nu heb
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
<form id="forma" method="post" action="formmailer.php">
<input name="cust_e-mail" type="text" id="cust_e-mail" placeholder="E-mailadres"></input>
<select name="choise" type="select" id="choise">
<option value="koffie">Koffie</option>
<option value="thee">Thee</option>
<option value="Fris">Fris</option>
</select>
<button name="submit" class="" id="send" type="submit">Send</button>
</form>
<input name="cust_e-mail" type="text" id="cust_e-mail" placeholder="E-mailadres"></input>
<select name="choise" type="select" id="choise">
<option value="koffie">Koffie</option>
<option value="thee">Thee</option>
<option value="Fris">Fris</option>
</select>
<button name="submit" class="" id="send" type="submit">Send</button>
</form>
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
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
<?php
session_start();
//init variables
$emailcustomer = "";
$choise ="";
$to = "";
$subject = "";
//check if form is posted
if($_SERVER['REQUEST_METHOD'] == 'POST'){
//input to variable
$emailcustomer = $_POST['cust_e-mail'];
$choise = $_post['choise'];
$content = file_get_contents('mytemplate.txt'); // zou ook html kunnen zijn
if(FALSE === $content)
{
throw new Exception('Template not found.');
}
// vervang %VAR% voor de waarde in jouw variabele
$content = str_replace("$choise", $var, $content);
$to = "$emailcustomer";
$subject = "Uw voorkeur";
$headers = 'From: [email protected]';
// verzend de email
mail($headers, $to, $subject, $content);
}
?>
session_start();
//init variables
$emailcustomer = "";
$choise ="";
$to = "";
$subject = "";
//check if form is posted
if($_SERVER['REQUEST_METHOD'] == 'POST'){
//input to variable
$emailcustomer = $_POST['cust_e-mail'];
$choise = $_post['choise'];
$content = file_get_contents('mytemplate.txt'); // zou ook html kunnen zijn
if(FALSE === $content)
{
throw new Exception('Template not found.');
}
// vervang %VAR% voor de waarde in jouw variabele
$content = str_replace("$choise", $var, $content);
$to = "$emailcustomer";
$subject = "Uw voorkeur";
$headers = 'From: [email protected]';
// verzend de email
mail($headers, $to, $subject, $content);
}
?>
Hebben jullie nog tips ?
Gewijzigd op 03/03/2016 11:49:23 door Jop B
Regels 27 en 29: Om een $var hoeven geen quotes.
Regel 36: Parameters staan in de verkeerde volgorde.
http://phpwiki.santhe.nl/index.php?title=De_juiste_mailheaders
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<form id="forma" method="post">
<input name="cust_e-mail" type="text" id="cust_e-mail" placeholder="E-mailadres"></input>
<select name="choise" type="select" id="choise">
<option value="koffie">Koffie</option>
<option value="thee">Thee</option>
<option value="fris">Fris</option>
</select>
<button name="submit" class="" id="send" type="submit">Send</button>
</form>
<script>
$(document).ready(function(){
$("#forma").submit(function(e) {
e.preventDefault();
$.ajax({
type: "POST",
'url': 'formmailer.php',
'success': function(return) {
alert (return);
});
});
});
</script>
<input name="cust_e-mail" type="text" id="cust_e-mail" placeholder="E-mailadres"></input>
<select name="choise" type="select" id="choise">
<option value="koffie">Koffie</option>
<option value="thee">Thee</option>
<option value="fris">Fris</option>
</select>
<button name="submit" class="" id="send" type="submit">Send</button>
</form>
<script>
$(document).ready(function(){
$("#forma").submit(function(e) {
e.preventDefault();
$.ajax({
type: "POST",
'url': 'formmailer.php',
'success': function(return) {
alert (return);
});
});
});
</script>
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
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
<?php
session_start();
//init variables
$emailcustomer = "";
$emailus = "";
$choise ="";
$to = "";
$subject = "";
//check if form is posted
if($_SERVER['REQUEST_METHOD'] == 'POST'){
//input to variable
$emailcustomer = $_POST['cust_e-mail'];
$choise = $_POST['choise'];
$content = file_get_contents('mytemplate.txt'); // zou ook html kunnen zijn
if(FALSE === $content)
{
throw new Exception('Template not found.');
}
// vervang %VAR% voor de waarde in jouw variabele
$content = str_replace($choise, $var, $content);
$to = $emailcustomer;
$subject = "Uw voorkeur";
$headers = 'From: [email protected]';
// verzend de email
mail($to, $subject, $content, $headers);
$return = "Mail succesvol verstuurd";
}
?>
session_start();
//init variables
$emailcustomer = "";
$emailus = "";
$choise ="";
$to = "";
$subject = "";
//check if form is posted
if($_SERVER['REQUEST_METHOD'] == 'POST'){
//input to variable
$emailcustomer = $_POST['cust_e-mail'];
$choise = $_POST['choise'];
$content = file_get_contents('mytemplate.txt'); // zou ook html kunnen zijn
if(FALSE === $content)
{
throw new Exception('Template not found.');
}
// vervang %VAR% voor de waarde in jouw variabele
$content = str_replace($choise, $var, $content);
$to = $emailcustomer;
$subject = "Uw voorkeur";
$headers = 'From: [email protected]';
// verzend de email
mail($to, $subject, $content, $headers);
$return = "Mail succesvol verstuurd";
}
?>
Edit:
Spam verwijderd!
Gewijzigd op 03/03/2016 16:08:50 door - Ariën -
toevoegt na de 'url': ... regel?
Ook retourneert je script niets, er staat enkel:
Je zou ook JSON kunnen retourneren met een status (true of false) die aangeeft of het versturen van de mail is geslaagd:
Code (php)
(en anders retourneer je standaard false op eenzelfde wijze)
Ook kun je in je AJAX-request aangeven wat voor type data je terugverwacht, in dit geval dus JSON. Hiertoe kun je de volgende regel ook nog toevoegen aan je JavaScript:
Gewijzigd op 03/03/2016 15:41:45 door Thomas van den Heuvel
Dank voor het meedenken :) even los van de return melding, op een of andere manier zend hij geen mail naar het opgegeven email adres.
De parameter zoals je boven aangaf heb ik bij de ajax call gezet.
Quote:
op een of andere manier zend hij geen mail naar het opgegeven email adres.
Hm :/.
Waar blijkt dit uit? Retourneert mail() false? Of krijg je niets binnen?
Succesvol verzenden staat niet garant voor succesvol ontvangen (net zoals de reguliere post :)).
Je zult eerst even precies moeten uitzoeken waar het schip nu strandt.
Maak anders eens een heel simpel/plat script die simpelweg een test-onderwerp en test-bericht mailt naar een statisch e-mailadres en kijk vanuit daar verder wat er misgaat. Maak voor jezelf alles inzichtelijk door een en ander op het scherm af te drukken. Overweeg om in eerste instantie de extra abstractie middels AJAX achterwege te laten, je bent dan in feite een beetje "blind" aan het ontwikkelen en dat is niet handig als je niet precies weet waar iets misgaat (EDIT: dit had ik deels ondervangen door het retourneren van de statuscode die aangaf of het mailen was geslaagd)
Gewijzigd op 03/03/2016 17:37:18 door Thomas van den Heuvel
Bedankt voor de tip. Heb een functie gemaakt die ik kan uitvoeren en zo stap voor stap dingen erbij kan zetten.
Nu zit ik nog met een probleem en dat is dat mijn template (HTML) als tekst word weergegeven.
Mijn template heb ik nog simpel gehouden door alleen de achtergrond een kleur te geven.
Nu zie ik op diversen sites staan dat ze een html toevoegen door dit te doen:
Maar het moet toch ook kunnen om een html file in te voegen zoals Frank dat boven beschreef?
http://php.net/manual/en/function.mail.php, en dan naar Example #4, dan zie je daar de headers die je moet gebruiken voor een HTML-mail.
Als je hier kijkt: Indien je een HTML e-mail verstuurt, gelden hier (en eigenlijk in elke context) dezelfde regels: zorg ervoor dat je je invoer escaped binnen de context waarin je werkt. Je wilt waarschijnlijk niet dat mensen HTML of JavaScript in kunnen vullen en dat dat dan ook als zodanig behandeld wordt wanneer het wordt getoond aan een lezer.
Nu heb ik de html gekoppeld met de ajax functie en daar gaat het weer mis. Zodra submit is geklikt gebeurt er niets.
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
<from id="forma">
<input type="email" name="email"></input>
<button name="submit" class="" id="send" type="submit">Send</button>
</form>
$.ajax({
type: "POST",
'url': 'test.php',
'data': $('#forma').serialize(),
}
});
<input type="email" name="email"></input>
<button name="submit" class="" id="send" type="submit">Send</button>
</form>
$.ajax({
type: "POST",
'url': 'test.php',
'data': $('#forma').serialize(),
}
});
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
//init variables
$to = "";
$subject = "";
$to = $_POST["cust_e-mail"];
$subject = 'onderwerp';
$content = file_get_contents("template.html");
$content = str_replace("%brand%", $brand, $content);
$headers = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
$headers .= 'From: Afzender <[email protected]>' . "\r\n";
mail($to, $subject, $content, $headers);
}
?>
//init variables
$to = "";
$subject = "";
$to = $_POST["cust_e-mail"];
$subject = 'onderwerp';
$content = file_get_contents("template.html");
$content = str_replace("%brand%", $brand, $content);
$headers = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
$headers .= 'From: Afzender <[email protected]>' . "\r\n";
mail($to, $subject, $content, $headers);
}
?>
Er staat <from id="..."> in plaats van <form id="...">.
Iets te lang met mail bezig geweest? ^^
Of is dit een typefout in je snippet?
Er is ook geen veld cust_e-mail, in het bovenstaande formulier staat enkel name="email".
Je hoeft overigens voor self-closing tags zoals input geen </input> toe te voegen (en misschien is dat zelfs wel fout).
EDIT: ook moet er geen komma achter het laatste argument van je ajax call, dit is mogelijk een syntax fout.
EDIT: en de AJAX call moet overigens pas uitgevoerd worden als je het formulier submit... en niet direct...
Neem ff een rustpauze en drink een stevige kop koffie :).
Gewijzigd op 04/03/2016 16:50:58 door Thomas van den Heuvel
<from id="forma">
From was een type fout :).
Na een kop koffie en een goede nachtrust heb ik nog eens gekeken maar kan geen error achterhalen.
Hier is de complete code:
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<html>
<head>
<link rel="stylesheet" href="css/stylesheet.css"></link>
<script type="text/javascript" src="js/jquery 2.1.0 .js"></script>
</head>
<body>
<form id="forma" method="post">
<input name="email" type="text" id="cust_e-mail" placeholder="E-mailadres">
<button name="submit" class="" id="send" type="submit">Send</button>
</form>
<script>
$(document).ready(function(){
$("#forma").submit(function(e) {
e.preventDefault();
$.ajax({
type: "POST",
'url': 'test.php',
'data': $('#forma').serialize()
});
});
});
</script>
<head>
<link rel="stylesheet" href="css/stylesheet.css"></link>
<script type="text/javascript" src="js/jquery 2.1.0 .js"></script>
</head>
<body>
<form id="forma" method="post">
<input name="email" type="text" id="cust_e-mail" placeholder="E-mailadres">
<button name="submit" class="" id="send" type="submit">Send</button>
</form>
<script>
$(document).ready(function(){
$("#forma").submit(function(e) {
e.preventDefault();
$.ajax({
type: "POST",
'url': 'test.php',
'data': $('#forma').serialize()
});
});
});
</script>
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
//init variables
$to = "";
$subject = "";
$to = $_POST["email"];
$subject = 'Het onderwerp';
$content = file_get_contents("template.html");
$headers = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
$headers .= 'From: Afzender <[email protected]>' . "\r\n";
mail($to, $subject, $content, $headers);
?>
//init variables
$to = "";
$subject = "";
$to = $_POST["email"];
$subject = 'Het onderwerp';
$content = file_get_contents("template.html");
$headers = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
$headers .= 'From: Afzender <[email protected]>' . "\r\n";
mail($to, $subject, $content, $headers);
?>
Gewijzigd op 05/03/2016 15:29:08 door Jop B
Heb je al gedebugged met bijv. Firebug en gekeken naar je AJAX-request?
Ik zie dit nergens: #form_waranty
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
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
//init variables
$to = "";
$subject = "";
$to = $_POST["email"];
$subject = 'Het onderwerp';
$content = file_get_contents("template.html");
$headers = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
$headers .= 'From: Afzender <[email protected]>' . "\r\n";
mail($to, $subject, $content, $headers);
}//deze stond er teveel
?>
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
//init variables
$to = "";
$subject = "";
$to = $_POST["email"];
$subject = 'Het onderwerp';
$content = file_get_contents("template.html");
$headers = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
$headers .= 'From: Afzender <[email protected]>' . "\r\n";
mail($to, $subject, $content, $headers);
}//deze stond er teveel
?>
Dank voor het meedenken. Ben er te lang mee bezig geweest denk ik.
Als je aan het ontwikkelen bent moeten die gewoon aanstaan.