# Gepost op 06-09-2009 21:14
Bewerkt door vlerknozem op 07-09-2009 19:05
Bewerkt door vlerknozem op 07-09-2009 19:05
Veel mensen willen graag een mailform op hen site. Maar dit kan niet met alleen html. Vandaar deze tutorial over hoe het in php kan. Om te beginnen, de uitleg van deze tutorial staat vooral als comments in de php.
1) De pagina met het formulier
Ik heb dit allen nu in een pagina gedaan omdat dit voor mij makkelijker is. Zorg wel dat alle php (boven de html) dus ook boven de html blijft.
2) De templates
Om het overzichtelijk te houden heb ik de mails verdeeld in twee templates.
mail_template.html
mail_bedankt_template.html
De variabele worden automatisch omgezet in de tekst die er moet komen te staan.
3) uitbreidingen
Natuurlijk kan je het ook uitbreiden. Wil je een ip adres weergeven in de mail? Dan voeg je de variabele '${IP}' toe aan de template op de plek waar het ip adres moet komen te staan. Wil je een nieuw formulier veld toevoegen? Dan kan dat gemakkelijk. Voeg gewoon het veld toe aan het formulier en voeg de variabele '${NAAM_FORM_VELD}' toe aan de template. Om dit veld te controleren voeg je toe:
De 10 staat voor de minimale - en de 500 voor de maximale stringlengte.
1) De pagina met het formulier
Ik heb dit allen nu in een pagina gedaan omdat dit voor mij makkelijker is. Zorg wel dat alle php (boven de html) dus ook boven de html blijft.
- <?php
- // Mail in html versturen? (true/false)
- // Email waar mail naartoe gaat
- // Onderwerp van mail
- // Stuur een bedanktje? (true/false)
- // Email adres van wie het bedanktje komt
- // Onderwerp van de bedank email
- // Functie om de templates te parsen
- function parse_template($naam) {
- foreach($_POST as $key => $value) {
- }
- return $template;
- }
- // Is er een post request?
- $fouten = "";
- $verzonden = false;
- if($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['actie']) && $_POST['actie'] == 'verzendmail') {
- // HTML input filteren en escapes weghalen
- foreach($_POST as $key=>$value) {
- }
- // Controle of de mail niet al is verzonden?
- $fouten = 'De mail is al verzonden.';
- } else {
- // Controle email
- $fouten .= "- Email adres is onjuist<br />";
- }
- // Kijken of het bericht niet te lang of te kort is
- $fouten .= "- Het bericht is te lang of te kort<br />";
- }
- // Kijken of er fouten zijn
- if(!$fouten) {
- // Headers opstellen
- $headers_from = "From: ".$_POST['email']."\r\n";
- if(MAILFORM_HTML === True) {
- $headers .= "MIME-Version: 1.0\r\n";
- }
- $headers .= "Content-Type: text/html; charset=utf-8\r\n";
- $headers .= "Content-Transfer-Encoding: 8bit\r\n\r\n";
- // Bericht opstellen
- $bericht = parse_template('mail_template.html');
- if(!$resultaat) {
- $fouten = "Er is een fout opgetreden.";
- } else {
- if(MAILFORM_BEDANKT) {
- // Stuur bedankje
- $bericht = parse_template('mail_bedankt_template.html');
- $headers_from = "From: ".MAILFORM_BEDANKT_EMAIL."\r\n";
- }
- $_SESSION['bericht'] = $_POST['bericht'];
- $verzonden = true;
- }
- }
- }
- }
- ?>
- <html>
- <head>
- <title>Mailform</title>
- </head>
- <body>
- <?php
- if($fouten) {
- ?>
- <p>
- De volgende fouten zijn opgetreden: <br />
- <?php echo $fouten; ?>
- </p>
- <?php
- }
- if($verzonden) {
- ?>
- <p>Bedankt voor uw reactie!</p>
- <?php
- } else {
- ?>
- <form action="<?php echo $_SERVER['REQUEST_URI'];?>" method="post">
- <p>
- Email <input type="text" name="email" value="<?php echo (isset($_POST['email'])) ? $_POST['email'] : "" ;?>" />
- </p>
- <p>
- Bericht <br />
- <textarea name="bericht"><?php echo (isset($_POST['bericht'])) ? $_POST['bericht'] : "" ;?></textarea>
- </p>
- <p>
- <input type="hidden" name="actie" value="verzendmail" />
- <input type="submit" value="verzenden" />
- </p>
- </form>
- <?php
- }
- ?>
- </body>
- </html>
2) De templates
Om het overzichtelijk te houden heb ik de mails verdeeld in twee templates.
mail_template.html
mail_bedankt_template.html
- Bedankt voor uw reactie!
De variabele worden automatisch omgezet in de tekst die er moet komen te staan.
3) uitbreidingen
Natuurlijk kan je het ook uitbreiden. Wil je een ip adres weergeven in de mail? Dan voeg je de variabele '${IP}' toe aan de template op de plek waar het ip adres moet komen te staan. Wil je een nieuw formulier veld toevoegen? Dan kan dat gemakkelijk. Voeg gewoon het veld toe aan het formulier en voeg de variabele '${NAAM_FORM_VELD}' toe aan de template. Om dit veld te controleren voeg je toe:
- <?php
- // Valideren
- $fouten .= "- Het form veld is te lang of te kort<br />";
- }
- ?>
De 10 staat voor de minimale - en de 500 voor de maximale stringlengte.
Lees de forum regels
