Les 9

In deze les gaat u leren hoe u kunt mailen door middel van PHP en een simpel formulier.

Weg met mailto, leve PHP

Met PHP is het perfect mogelijk om de inhoud van een formulier te versturen via email. Het bericht wordt verstuurd in samenhang met sendmail of een variant ervan op een unix server. We zullen in de eerste plaats leren hoe het versturen van email in elkaar steekt. Daarna zullen we zoals op professionele sites, formulieren gaan exploiteren. We gaan een mini-mailer in elkaar knutselen alsook  een maxi-mailer met alle toeters en bellen.

Wil je nu een email versturen vanuit een script in PHP ? Niets is eenvoudiger. We gebruiken daarvoor de functie mail()! De basissyntax ziet er als volgt uit :

mail("begunstigde", "onderwerp", "bericht", "From: verzender")

Je kunt die waarden rechtstreeks in het script aanbrengen. Het nadeel hiervan is, dat je telkens het script moet aanpassen als de begunstigde iemand anders is. Dus zullen we, wat had je gedacht, variabelen gebruiken.

Als de verzending correct verloopt, geeft de functie mail() de waarde true terug, indien niet, de waarde false.
We gaan nu dadelijk deze kennis toetsen aan een voorbeeld. In het geval dat de mail correct werd verzonden krijgt de bezoeker de melding, Bedankt ! Je mail werd verstuurd. In het geval het versturen niet lukte, krijg je de bijpassende foutmelding.

BELANGRIJK !

Ofwel heb je lokaal een goed geconfigureerde mailserver draaien, of je wenst gebruik te maken van de mailserver van je provider. Zelf een mailserver draaien en configureren is niet van de poes voor de gewone computer gebruiker. Daarom dat we gaan gebruik maken van onze smtp server van onze provider om mails te versturen.

Klik op het wampserver icoontje en in Config files kies je voor php.ini. Kladbok gaat zich nu openen en je zoekt naar :

[mail function]
; For Win32 only.
SMTP = localhost

Plaats nu een ; voor de regel SMTP = localhost. We gaan nu de variabele SMTP de waarde geven van onze smtp server van onze provider. Dat zijn gegevens die jouw verstrekt zijn door je provider. Voor mijn provider is dat smtp.scarlet.be. Onder de regel ;SMTP = localhost plaatsen we nu een nieuwe met de smtp server van onze provider :

SMTP = smtp.scarlet.be

Als je dit dan aangepast hebt, sla de file op en klik terug op het wampserver icoontje en kies voor Restart all Services.

Waarom gaan we niet eenvoudig de SMTP variabele dadelijk zo aanpassen in onze php.ini file ?
Wel om de eenvoudige redenen dat we steeds de originele file inhoud willen behouden. Door een ; voor SMTP = localhost te plaatsen, hebben we deze regel in commentaar geplaatst ( het nut van commentaar ). Eronder brengen we dan onze wijziging aan. Mocht er iets verkeerds gaan, heb je steeds de originele file en kan je hetgeen jij veranderd hebt gewoon terug verwijderen, en de file in zijn originele staat terugbrengen.

In onze editor gaan we nu volgende code opnemen :

<?php
$mail=$_POST["mail"];
$message=$_POST["message"];
$submit=$_POST["submit"];
if (isset($submit) && $mail != "" && $message != "") {
        if(mail("$mail", "You've got mail !", "$message", "From: webmaster@essetee.be")) {
                echo "<p>Er werd een e-mail bericht verstuurd naar Essetee</p>";
        }
        else {
        echo "<p>Sorry, uw bericht kon niet worden verzonden !</p>";
        }
}
else {
?>
 <div align="center"><h1>Mini-Mailer</h1></div><hr>
Stuur een mailtje naar Essetee !<br><br>
<form action="<?php echo $_SERVER['PHP_SELF'];?>" method="POST">
Uw email adres ? <input type="text" name="mail"><br><br>
Tik hier de tekst die je wilt ontvangen.<br><br>
<textarea name="message" cols="50" rows="5" wrap="soft">
</textarea><br>
<input type="submit" name="submit" value="Bericht Versturen"><br>
</form>
<?php
}
?>

Sla deze vervolgens op als minimailer.php.

Je kan nu het script runnen om een mailtje naar Essetee te sturen.

En aktie !

De mailtjes die jullie versturen komen in mijn mailbox terecht ! Als je niets zinvols te zeggen hebt, stuur dan ook geen email ! Aan mailtjes met een inhoud als test, dfdfdg, fsdts enz ... daar ben ik niets mee !


Uitleg van het script. In regel 2 tot en met 4 recupereren wij de variabelen mail, message en submit van ons formulier. In regel 5 kijken we met isset($submit) of er iemand op de submit knop heeft geklikt. Indien dit het geval is, en de variabele $mail en de variabele $message is niet ledig, dan gaan we over tot het versturen van de mail. Indien aan één van die voorwaarden niet voldaan wordt ( als je het script opstart bijvoorbeeld ) dan wordt de code uitgevoerd in de else statement op vanaf regel 13.

In regel 6 dan versturen we de eigenlijke mail. Als je nu een slecht geconfigureerde mailserver hebt, of je hebt geen goede smtp server ingesteld in je php.ini, gaat je mail niet verzonden kunnen worden. Indien dit het geval is, gaat de functie if(mail())  de waarde false terug geven en zal de else statement op regel 9 worden uitgevoerd.

De maxi-mailer

Je bent het waarschijnlijk ook al eens tegengekomen. Je verstuurde een mail en  je had daar iets verkeerds ingezet. Wat zou je ervan denken om vooraleer de mail te versturen, je de gebruiker nog eens de kans geeft om alles na te lezen voordat de mail daadwerkelijk wordt verstuurd ? Als de gebruiker een veld vergeet in te vullen moeten we hem daar attent op maken. Wat als er nu twee gebruikers terzelfdertijd een mail willen verzenden ? Onze maxi-mailer zal hier uitweg bieden.

In onze editor brengen we volgende code in :

<?php
if (isset($_POST["mail"]) && $_POST["mail"] != "") {
$message = $_POST['message'];
$mail = $_POST['mail'];
    if(mail("serge@essetee.be", "You've got mail !", "$message", "From: $mail")) {
        echo "<p>Bedankt voor jouw mail, jouw bericht werd verstuurd</p>";
    }
    else {
    echo "<p>Sorry, uw bericht kon niet worden verzonden !</p>";
    }
}
?>

Die we opslaan als mail.php. Deze code gaat er dan voor zorgen dat onze mail daadwerkelijk wordt verstuurd.

Vervolgens maken we een nieuw document aan met volgende inhoud :

<?php
$submit=$_POST["submit"];
$voornaam=$_POST["voornaam"];
$familienaam=$_POST["familienaam"];
$mail=$_POST["mail"];
$opinie=$_POST["opinie"];
echo "<h1> Een opinie formulier opmaken </h1><hr>";
    if (empty($submit)) {
    // is de submit button gelijk aan 0 of niet gedefinieerd ?
echo "<h3>1. Gelieve Uw gegevens in te vullen</h3>";
echo "<form action=\"$_SERVER[PHP_SELF]\" method=\"post\">";
echo "Uw Voornaam : <input type=\"text\" name=\"voornaam\"><br><br>";
echo "Uw Familienaam : <input type=\"text\" name=\"familienaam\"><br><br>";
echo "Email adres : <input type=\"text\" name=\"mail\"><br><br>";
echo "<h3>Wat vindt jij van deze cursus PHP ?</h3><br><br>";
echo "<textarea name=\"opinie\" cols=\"50\" rows=\"5\" wrap=\"soft\">";
echo "</textarea><br><br>";
echo "<input type=\"reset\" name=\"reset\" value=\"Alles wissen\">";
echo "<!-- belangrijk, noem de verzendknop submit ! -->";
echo "<input type=\"submit\" name=\"submit\" value=\"OK - Verzenden !\">";
echo "</form>";
}
else {
//als submit is gedefinieerd
echo "<h3> 2. Gelieve de gegevens na te zien</h3><br>";
foreach($_POST as $key => $value) {
// hier lopen we alle velden van het formulier na
if (empty($value)) {
// is er een veld ledig, nul of niet gedefinieerd ?
echo "<p> Gelieve alle velden in te vullen a.u.b. !</p><br>";
echo "<form>";
echo "<input type=\"button\" value=\"Terug naar vorige pagina\" onclick=\"javascript:history.back()\">";
echo "</form>";
echo "<!-- Voor hen die geen javascript hebben : -->";
echo "<noscript>Klik op de vorige knop in je browser om terug te keren naar de vorige pagina.</noscript>";
exit; // verlaat de lus alsook het programma !
}
}
echo "<p>Dag <strong>$voornaam $familienaam !</strong><br>\n";
echo "<p>Uw email adres is <strong>$mail</strong>!</p>\n";
echo "<p> Jij schreef :</p>\n";
echo "<i>" . stripslashes(nl2br($opinie)) . "</i><br><br>\n";
echo "<p>Zijn de gegevens correct ?</p><br>\n";
$message="$voornaam $familienaam,$mail heeft geschreven\n$opinie";
$message=htmlspecialchars($message);
echo "<form action=\"mail.php\" method=\"post\">\n";
echo "<input type=\"hidden\" name=\"mail\" value=\"$mail\">\n";
echo "<input type=\"hidden\" name=\"message\" value=\"$message\">\n";
echo "<input type=\"button\" value=\"Neen\"";
echo "onclick=\"javascript:history.back()\">\n";
echo "<noscript>Gebruik de terug toets in je browser om naar de vorige pagina terug te keren !</noscript>\n";
echo "<input type=\"submit\" name=\"mail versturen\" ";
echo "value=\"Alles is correct\"></form>\n";
}
?>

Die we opslaan als maximailer.php.


Een ganse boterham niet ? Zoals je kunt zien gebruiken we hier een beetje van alles wat we tot nu toe al hebben geleerd. Alsook een paar nieuwigheden.

De functie empty()

Variabelen testen met de functie empty(). Empty() is het tegenovergestelde van isset(). Isset controleert of een variabele is gedefinieerd, en het is enkel dan dat isset de waarde true terug geeft. Met empty() daarentegen, kun je nagaan of een variabele niet gedefinieerd is, de variabele leeg is of overeenkomt met 0 (nul). In deze gevallen geeft empty() de waarde true door.

Verzoek if en $submit
Het eerste if verzoek in ons script test of er een variabele $submit niet gedefinëerd is. Dit is inderdaad zo, aangezien $submit pas aktief wordt na het versturen van het bericht. Je moet er wel voor zorgen dat de naam van de verzendknop submit is, anders zal dit niet werken.
Het formulier wordt getoond, de gebruiker kan alles invullen en als de gebruiker dan op de knop verzenden klikt, dan pas wordt $submit gedefinïeerd. Na het verzenden wordt de else lus afgewerkt.

Verder zie je ook dat ik regelmatig gebruik maak van javascript. Dit om ervoor te zorgen dat de gegevens niet verloren gaan als je terug moet om iets te corrigeren. Voor het geval javascript niet aanstaat bij de gebruiker, wordt dan vermeld dat hij op de back button van zijn browser moet klikken om terug te gaan naar de vorige pagina.

Met exit verlaat je de lus alsook het programma. Als er een veld niet werd ingevuld, moeten we verhinderen dat de lus opnieuw wordt uitgevoerd alsook moeten we verhinderen dat de javabutton opnieuw wordt getoond. Daarom gebruiken we exit.
Als alle velden correct werden ingevuld, komt het script terecht op de plaats waar alle informatie die de gebruiker intikte worden getoond met het commando echo.De gebruiker kan de gegevens nog veranderen of aanpassen indien nodig.

We maken dan de variabele $message aan, die alle info van de gebruiker bevat en als we op de knop alles is correct klikken, worden de gegevens doorgegeven naar ons mail.php script die dan zorgt voor de verzending ervan.

Je ziet ook dat ik hier gebruik maak van stripslashes en nl2br zoals in vorige lessen al werd uiteen gedaan.
De gegevens van het formulier worden door middel van input type=hidden doorgegeven aan mail.php.

Nu we een mailer hebben op ons systeem, kunnen we verder gaan met de volgende les. Ik had jullie verwittigd, PHP is niet moeilijk, maar je moet wel bij de pinken blijven. Voor iemand die niets van programmeren afwist, kan ik best begrijpen dat het nu wat moeilijker wordt. Als je echter de vorige lessen goed onder de knie hebt, moet je dit script goed kunnen volgen.

Nu hebben we een opinieformulier aangemaakt, maar je kunt om het even welk formulier aanmaken. Je hoeft enkel de gegevens samen te brengen in de variabele $message en klaar is kees. Je kunt dan de inhoud van om het even welk formulier waarbij je gegevens vraagt van een gebruiker, naar je laten mailen.

En aktie !

De mailtjes die jullie versturen komen in mijn mailbox terecht ! Als je niets zinvols te zeggen hebt, stuur dan ook geen email ! Aan mailtjes met een inhoud als test, dfdfdg, fsdts enz ... daar ben ik niets mee !


Les 1 Les 2 Les 3 Les 4 Les 5 Les 6 Les 7 Les 8 Les 9 Les 10 Les 11 Les 12 Les 13 Home