Beste mensen,

Ik heb een jaar geleden een website gebouwd met een goed werkend php-formulier. Plotseling (tussen 24/7 en 1/9) worden de gegevens echter niet meer doorgestuurd. Hoe is dit mogelijk?

Website: www.fysio-osdorp.nl
Formulier op de homepage (en ook die verderop op de site)
Gehost bij KPN

Normaal gaat de inhoud van het formulier uiteraard naar de fysiopraktijk toe, maar ik heb dat even veranderd in mijn eigen e-mailadres om de oorzaken op te kunnen sporen.

De code in het php-formulier op de homepage is:

<?php
$naam = $_POST['naam'];
$telefoonnummer = $_POST['telefoonnummer'];
$email = $_POST['email'];
$vraag = $_POST['vraag'];


if (isset($_POST['Submit'])) {
//Als men op de Submit knop heeft gedrukt van het formulier...
if ($naam == "") {
$error = "Het is de bedoeling dat u uw naam invult.<BR />";

} if ($telefoonnummer == "") {
$error = "Het is de bedoeling dat u een tiencijferig telefoonnummer invult.<BR />";

} if ($email == "") {
$error = "Wilt u een geldig emailadres invullen?<BR />";

} if ($vraag == "") {
$error .= "Wilt u in het onderste vakje wel iets invullen...";
}
//Als ... niet is ingevuld, is $error NIET leeg en dus niet aangemaakt.
//Met de operator .= voegen we een waarde toe aan een variabele
//Zo kunnen we dus controleren of alles goed is ingevuld of niet.


if (!isset($error)) {
//als de variabele $error niet is aangemaakt ...

echo "<strong>Bedankt voor het invullen van het formulier!</strong><br/><br/>Wij zullen zo spoedig mogelijk contact met u opnemen. ";



$message = '

Naam: '.$naam.'
Emailadres: '.$email.'
Telefoonnummer: '.$telefoonnummer.'
Vraag: '.$vraag.'
';

mail('[email protected]', 'Vragenformulier', $message, 'From: '.$email);

} else {

echo "Wilt u alle vragen invullen alstublieft?<BR /><BR />";
echo "<FONT COLOR=\"#F09\">".$error."</FONT><br /><br />";
echo '<input type="button" value="Terug" onClick="goHist(-1)" />';
}

}
?>

Met vriendelijke groet,

Wouter Looman
Het kan zijn dat ze bij KPN de mail functie hebben uitgeschakeld.
Controleer eens of de mail verstuurd wordt met:
<?php
if (mail(.............)) {
	echo "Gelukt"
}
else
	echo "Mislukt";
?>

Nog wat opmerkingen:
Controleren of er gepost is doe je met:
<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
?>

Het is onnodig om POST variabelen over te kopieren naar nieuwe variabelen, en als je het al doet, dan na de controle, niet ervoor.

[size=xsmall]Toevoeging op 08/09/2012 11:59:12:[/size]

PS
Verwijder je eigen emailadres even uit de code, voorkomt onnodige spam.
Je kopieert eerst variabelen en dan pas controleer je of er verzonden is.
Lijkt me onlogisch. Controleren op verzending doe je, zoals Ger aangeeft, met <?php
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
?>
In je mail-functie missen volgens mij nog de nodige headers.
Verder is het misschien verstandig om niet blindelings te vertrouwen op de invoer en in de mail de gegevens te beveiligen (bv strip_tags of htmlentities)
Tip: gebruik ' in PHP en " in HTML; hoef je niet te escapen zoals nu op regel 47.
Bedankt voor jullie snelle reacties.

Zoals je zult gaan begrijpen ben ik een echte beginner op php-gebied.

Met

<?php
if (mail(.............)) {
echo "Gelukt"
}
else
echo "Mislukt";
?>

zet ik mijn e-mailadres op de puntjes en krijg ik een dubbele foutmelding (in Dreamweaver). Zo moet dat dus blijkbaar niet. Maar hoe wel?

Overigens: bij xs4all werkt het formulier nog prima, heb ik net ontdekt.
Je moet de mail functie aanroepen zoals je hem normaal aanroept, alleen binnen een if statement.
Heel veel hostproviders hebben tegenwoordig die functie uitgeschakeld.
Bij xs4all is dat dan niet het geval, maar in dit geval kun je beter overstappen op PHPMailer of SwiftMailer, dat zijn emailclients in PHP.

Reageren