Inleiding
In deze tut leg ik de basics van een PHP-mailform uit.
Er is ook een HTMl-manier, maar die opent het standaard mailprogramma van de gebruiker (Outlook, gmail.com, ...).
Uitleg werking
Met dit basis-formulier, laten we de gebruiker enkele velden invullen, die dan direct worden doorgestuurd als de gebruiken op 'Zenden' klikt.
Wat moet er allemaal komen?
- Het PHP-document moet geopend worden en afgesloten. Net zoals HTML, heeft dit hiervoor een vaste waarde (zie hier onder).
- In ons script willen we natuurlijk ook dat er een formulier is.
- Het document moet natuurlijk ook doorgestuurd worden.
Indeling script
Script openen en sluiten
We openen en sluiten het PHP-script met onze
vaste waarden
<? php
// hier komt de inhoud
?>
Het formulier
Bij het maken van een formulier, heb je verschillende opties om informatie te verkrijgen.
Je kan je bezoeker alles laten intypen of je kan hem een meerkeuze vraag stellen met 1 of meerde antwoorden.
Een formulier wordt geopend en gesloten met een vaste waarde:
<form action='PhpBasisMailform.php' method='POST'>
...
</form>
action: Naam (+ locatie indien niet in dezelfde folder) van het document met het script. Hier is dit gewoon de naam van dit document zelf
method: Manier van gegevens doorsturen. Kan POST of GET zijn
POST: geeft de gegevens onzichtbaar mee
www.mijndomein.be/formulier.php
GET: zet alle gegevens in de adresbalk (max. 100 tekens)
Kan handig zijn, maar ten zeerste af te raden bij wachtwoorden of lange/veel gegevens.
www.mijndomein.be/formulier.php?naam=Stijn&email=geheim.wegen@privacy.be&username=Ground Zero
De mogelijkheden:
Text
1 regel met een breedte die je zelf in kan stellen. Wordt gebruikt voor o.a. Naam, E-mailadres, ...
Textarea
Een vak waar er tekst in kan getypt worden, de hoogte en de breedte zijn in te stellen. Wordt gebruikt voor commentaar of een bericht.
Radiobutton
Een 'bolletje'. Wordt gebruikt om de bezoeker 1 keuze te laten maken uit verschillende dingen.
Checkbox
Het 'vinkje'. Wordt gebruikt om de bezoeker 1 of meerdere keuze(s) te laten maken uit verschillende dingen.
Select
Een lijst met mogelijkheden. Een beetje zoals radiobutton maar dan met een lijst die opent als je op het pijltje klikt (keuzemenu).
Ik zal ze eens allemaal tonen.
We zullen een soort van enquête maken.
Vergeet niet, we werken met
echo's, ik laat ze hier even weg.
<form action='PhpBasisMailform.php' method='POST'>
<h1>Enquête</h1>
<h2>Persoonlijke gegevens</h2>
<p>
Achternaam: <input type='text' name='achternaam' id='achternaam' size='20'>
Voornaam: <input type='text' name='voornaam' id='voornaam' size='20'>
Adres: <input type='textarea' name='adres' id='adres' cols='20' rows='2'>
E-mailadres: <input type='text' name='email' id='email' size='20'>
</p>
<h2>Vragen</h2>
<p>
Lievelingseten:<br />
<input type='radio' name='eten' id='eten' value='fastfood'> Fastfood
<input type='radio' name='eten' id='eten' value='uitgebreid'> uitgebreid eten
</p>
<p>
Favoriete sport(en)<br/>
<input type='checkbox' name='sport' id='sport' value='sport' value='balsport'> Balsport
<input type='checkbox' name='sport' id='sport' value='sport' value='teamsport'> Teamsport
<input type='checkbox' name='sport' id='sport' value='sport' value='denksport'> Denksport
</p>
<p>
Leukste vakantieplek:<br />
<select name='vakantieplek' id='vakantieplek'>
<option value='Madrid'>Madrid</option>
<option value='Londen'>Londen</option>
<option value='Parijs'>Parijs</option>
<option value='Andere'>Andere</option>
</select>
</p>
</form>
type='text'
De mogelijkheden van daarnet.
name='achternaam'
name zorgt dat alle bij-elkaar-horende dingen bij elkaar blijven (niet letterlijk).
SUPERBELANGRIJK bij radiobuttons en checkboxen.
id='achternaam'
moet hetzelfde zijn als
name
cols='20' rows='2'
cols = breedte van tekstveld
rows = hoogte
value='fastfood'
PHP leest enkel de value van iets, niet de uitleg er rond.
daarom MOET je bij checkboxes en radiobuttons de value (waarde) meegeven.
Dit kan ook bij invulvelden/-lijnen, die value is dan zichtbaar in het veld. (bv. value='vul hier uw naam in')
Doorsturen
Om de gegevens door te sturen, maken we gewoon een knop aan.
2 zelfs, want we zullen voor de zekerheid ook een reset knop aanmaken.
Zet dit net boven
<input type='submit' value='doorsturen' name='mail'><input type='reset' value='Reset' name='reset'>
Hier is vooral de value en de name belangrijk.
value: de tekst op de knop
name: vooral belangrijk bij de 'doorsturen' knop, dat zie je later.
Het script
Nu komen we aan het belangrijkste deel: het script.
Deze dingen wil de server weten voor hij het formulier doorstuurt.
- Naar waar moet het?
- Wat is het onderwerp?
- Wat zit er allemaal in?
- Van wie komt het?
- Naar wie moet je kunnen antwoorden?
De ontvanger zullen we in een variabele stoppen (zie andere tuts)
Het onderwerp zullen we gewoon invullen in het script
De inhoud zullen we ook in een variabele stoppn.
De laatste 2 komen in de zogenaamde
headers
In principe heb je maar 1 lijntje nodig:
mail("ontvanger","onderwerp","inhoud","extra info");
Maar met dit weet de server niet genoeg.
Ontvanger
Zoals gezegd, steek ik dit in een variabele.
Een variabele maak je als volgt:
$naam_van_variabele = "inhoud";
Dus dat wordt:
$ontvanger = "jou.mail@iets.com";
Onderwerp
Dit kan je gewoon invullen (tussen aanhalingstekens) of in een variabele steken
Inhoud
Dit steken we in een variabele omdat het zo groot is:
De variabele zal
$body heten.
Omdat het uit meerdere lijnen zal bestaan zullen we werken met
= en
.=.
Als je met
= werkt, geef je de info. Maar als je dan een 2de keer
= gebruikt, zou PHP die info gewoon vervangen.
.= toont PHP/de server dat dit extra info is. Als je meerdere lijnen wil geven moet je elke lijn afsluiten met \r\n
In deze variabele zullen we de
name's moeten gebruiken van het formulier. Deze zullen we ophalen met:
$POST['name']; ofwel $GET['name];
// je gebruikt POST of GET volgens de manier van doorsturen
Dus dat wordt:
$body = "Persoonlijke gegevens\r\n";
$body .= "Naam: ".$POST['achternaam']." ".$POST['voornaam']."\r\n";
$body .= "Adres: ".$POST['adres']."\r\n";
$body .= "Enquête\r\n";
$body .= "Lievelingseten: ".$POST['eten']."\r\n";
$body .= "Favoriete sport: ".$POST['sport']."\r\n";
$body .= "Leukste vakantieplek: ".$POST['vakantieplek']."\r\n";
Als het oproepen van een waarde (zie info boven code) voorafgegaan wordt of gevolgd wordt door tekst (tussen " "), moet je er een . voor of na zetten.
Extra info
De zogenaamde headers.
Hier komt:
- afzender (From)
- reageren naar: (Reply-To)
- eventuele extra info
$headers = "From: ".$_POST['achternaam']." ".$_POST['voornaam']." <".$_POST['email'].">\r\n";
$headers .= "Reply-To: ".$_POST['email']."\r\n";
$headers .= "Content-Type: text/plain\r\n"; // deze lijn is niet verplicht, maar wel handig
Dit geeft als resultaat:
Afzender: Achternaam Voornaam
Resultaat verzendlijn
Het verzendlijntje
mail("ontvanger","onderwerp","inhoud","extra info");
wordt nu
mail($ontvanger,"Enquête",$body,$headers);
Zorgen dat het formulier doorgestuurd wordt
We hebben het formulier en het script. Nu moeten we ze nog enkel linken.
Dit kan met een eenvoudige if-statement (zie andere tuts)
if (verzend-knop wordt ingedrukt)
{
formulier verzenden
}
else
{
formulier gewoon tonen
}
Dit script toont dus het formulier, totdat de knop wordt ingedrukt.
RESULTAAT
Als we alles samensteken hebben we dit zeer 'basic' script.
Het toont het formulier en kan het verzenden.
In het resultaat heb ik ook een ontvangstbevestiging gestoken, om de gebruiker toch een teken van leven te geven.
<? php
// controleren of de verzend-knop is ingedrukt
if ($_POST['mail'])
{
// Ja, de knop is ingedrukt, dus het formulier mag verzonden worden
$ontvanger = "jou.mail@iets.com";
$body = "Persoonlijke gegevens\r\n";
$body .= "Naam: ".$POST['achternaam']." ".$POST['voornaam']."\r\n";
$body .= "Adres: ".$POST['adres']."\r\n";
$body .= "Enquête\r\n";
$body .= "Lievelingseten: ".$POST['eten']."\r\n";
$body .= "Favoriete sport: ".$POST['sport']."\r\n";
$body .= "Leukste vakantieplek: ".$POST['vakantieplek']."\r\n";
$headers = "From: ".$_POST['achternaam']." ".$_POST['voornaam']." <".$_POST['email'].">\r\n";
$headers .= "Reply-To: ".$_POST['email']."\r\n";
$headers .= "Content-Type: text/plain\r\n"; // deze lijn is niet verplicht, maar wel handig
mail($ontvanger,"Enquête",$body,$headers);
//ontvangstbevestiging
echo "De enquête werd succesvol doorgestuurd.\r\n";
}
else
{
// Nee, dus we tonen het formulier
// vergeet de echo's niet
echo "<form action='PhpBasisMailform.php' method='POST'>";
echo "<h1>Enquête</h1>";
echo "<h2>Persoonlijke gegevens</h2>";
echo "<p>";
echo "Achternaam: <input type='text' name='achternaam' id='achternaam' size='20'><br />";
echo "Voornaam: <input type='text' name='voornaam' id='voornaam' size='20'><br />";
echo "Adres: <input type='textarea' name='adres' id='adres' cols='20' rows='2'><br />";
echo "E-mailadres: <input type='text' name='email' id='email' size='20'>
echo "</p>";
echo "<h2>Vragen</h2>";
echo "<p>";
echo "Lievelingseten:<br />";
echo "<input type='radio' name='eten' id='eten' value='fastfood'> Fastfood<br />";
echo "<input type='radio' name='eten' id='eten' value='uitgebreid'> uitgebreid eten";
echo "</p>";
echo "<p>";
echo "Favoriete sport(en)<br/>";
echo "<input type='checkbox' name='sport' id='sport' value='sport' value='balsport'> Balsport<br />";
echo "<input type='checkbox' name='sport' id='sport' value='sport' value='teamsport'> Teamsport<br />";
echo "<input type='checkbox' name='sport' id='sport' value='sport' value='denksport'> Denksport";
echo "</p>";
echo "<p>";
echo "Leukste vakantieplek:<br />";
echo "<select name='vakantieplek' id='vakantieplek'>";
echo "<option value='Madrid'>Madrid</option>";
echo "<option value='Londen'>Londen</option>";
echo "<option value='Parijs'>Parijs</option>";
echo "<option value='Andere'>Andere</option>";
echo "</select>";
echo "</p>";
echo "</form>";
}
Gemaakt door ground zero