Beste mensen,

Ik ben nieuw met PHP en heb met behulp van internet een formulier in elkaar geknutseld (mijn eerste)

Het formulier doet het prima, hij verstuurd de naam, bedrijf, mail, ip en datum naar mijn email.

Het enige wat hij niet doet is de velden controleren. Ik heb van de week 14(!) lege emails gehad omdat de velden niet ingevuld waren..
Na wat zoeken op internet en fora afgelezen te hebben ben ik de wanhoop nabij en wil ik graag jullie om een hint vragen.

Dit is mijn code:

<?php
if (!isset($_POST['naam']) || !isset($_POST['email']) || !isset($_POST['bericht'])) {

//verplichte velden.
$aVerplicht = array('naam', 'email', 'bericht');

echo 'U heeft niet alle velden ingevuld!';
exit;
}



$naam = htmlspecialchars($_POST['naam']);
$company = htmlspecialchars($_POST['company']);
$email = htmlspecialchars($_POST['email']);
$bericht = htmlspecialchars($_POST['bericht']);



$tijd = time();
$datum = strftime('%d-%m-%y %H:%M', $tijd);
$ip = getenv('REMOTE_ADDR');
$message = $naam.' van het bedrijf '.$company.', met het e-mailadres '.$email.' en het IP '.$ip.' stuurde op '.$datum.' het volgende bericht:
____________________________________
'.$bericht.'
------------------------------------';

mail('[email protected]', 'Bericht van website', $message, 'From: '.$email);

echo 'Uw bericht is verzonden. U krijgt zo snel mogelijk antwoord.';
?>

Alvast bedankt voor je tijd!

Bram
Ik raad om te controleren met:
if($_SERVER['REQUEST_METHOD'] =="POST") {, of je formulier is verstuurd. Kijk ook eens met print_r($_POST) of die formuliervelden bestaan

Verder nog een paar tips:
- Doe wat aan de foutafhandeling op de mail, en ga niet zitten gokken of de mail verzonden is.
- Gebruik geen exit() of die(), maar nette afhandeling met if-else.
Kijk ook is naar empty in plaats van isset.
en helemaal aan te raden..gebruik zoiets als phpmailer of swiftmailer..dan weet je zeker dat de headers goed staan en dat er een valid email wordt verstuurd...

empty is een goede..want bij het verzenden zijn inputvelden met uitzondering van een enkeling sowieso wel verstuurd...
empty is geen goede oplossing, sommige waardes keurt hij gewoon niet goed. het is ook niet bedoeld voor validatie.
@Bo en No
Als je empty aanraadt, wijs dan aub ook op de valkuil van het gebruik van empty().
Het idee van empty is dat het controleert of een variabele een lege waarde heeft. 'Leeg' is echter redelijk ruim gedefinieerd en kan je in de problemen brengen als je dat niet weet. null, '' (lege string), 0, '0', false worden allemaal als leeg gerekent. In dit geval zal dat waarschijnlijk geen probleem zijn, maar als je bijvoorbeeld aantallen wilt versturen is 0 al vaak een goede waarde (empty zal zeggen van niet). Ook als je een waar en niet waar spelletje in het Engels maakt, kom je al snel in de problemen.

Ik ben niet tegen het gebruik van empty, wel tegen het aanraden van empty zonder verder commentaar.
@Chi..die heeft weer als valkuil dat dat te omzeilen is en dat er als nog invalide data server side geplaatst kan worden...
@Aar welke functie gebruik jij om te controleren of een veld wel is ingevuld?
@Erwin H Dat had ik inderdaad kunnen zeggen, maar opzich staat ook in de link(op php.net) welke waarden als leeg worden beschouw.

Reageren