Archief - PHP: Contact form validatie

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

NAGD

Legacy Member
Ik ben niet echt een php kenner maar had graag een contact formulier gebruikt waar een validatie inzit van bepaalde velden. Eigenlijk zouden alle velden verplicht in te vullen moeten zijn.

Ik heb een php bestand dat ofwel niet controleerd en de mail verstuurd ofwel wel controleerd maar altijd een fout geeft.

Dit is de php-code:

<?php

// get posted data into local variables
$EmailTo = "[email protected]";
$Sitenaam = "www.assuban.be";
$Naam = Trim(stripslashes($_POST['Naam']));
$Voornaam = Trim(stripslashes($_POST['Voornaam']));
$Straat = Trim(stripslashes($_POST['Straat']));
$Nummer = Trim(stripslashes($_POST['Nummer']));
$Postcode = Trim(stripslashes($_POST['Postcode']));
$Gemeente = Trim(stripslashes($_POST['Gemeente']));
$Tel = Trim(stripslashes($_POST['Tel.']));
$Email = Trim(stripslashes($_POST['Email']));
$Boodschap = Trim(stripslashes($_POST['Boodschap']));

// validation
$validationOK=true;

if (Trim($Naam)=="") $validationOK=false;
if (Trim($Voornaam)=="") $validationOK=false;
if (Trim($Straat)=="") $validationOK=false;
if (Trim($Nummer)=="") $validationOK=false;
if (Trim($Postcode)=="") $validationOK=false;
if (Trim($Gemeente)=="") $validationOK=false;
if (Trim($Tel)=="") $validationOK=false;
if (Trim($Email)=="") $validationOK=false;

if (!$validationOK) {
print "<meta http-equiv=\"refresh\" content=\"0;URL=error.html\">";
exit;
}

// prepare email body text
$Body = "Een bezoeker van $Sitenaam heeft volgend bericht achtergelaten";
$Body .= "\n";
$Body .= "\n";
$Body .= "Naam: ";
$Body .= $Naam;
$Body .= "\n";
$Body .= "Voornaam: ";
$Body .= $Voornaam;
$Body .= "\n";
$Body .= "Straat: ";
$Body .= $Straat;
$Body .= "\n";
$Body .= "Nummer: ";
$Body .= $Nummer;
$Body .= "\n";
$Body .= "Postcode: ";
$Body .= $Postcode;
$Body .= "\n";
$Body .= "Gemeente: ";
$Body .= $Gemeente;
$Body .= "\n";
$Body .= "Tel.: ";
$Body .= $Tel;
$Body .= "\n";
$Body .= "Email: ";
$Body .= $Email;
$Body .= "\n";
$Body .= "\n";
$Body .= "Boodschap: ";
$Body .= "\n";
$Body .= $Boodschap;
$Body .= "\n";

// send email
$success = mail($EmailTo, "info aanvraag Assuban website", $Body, "From: <$Email>");

// redirect to success page
if ($success){
print "<meta http-equiv=\"refresh\" content=\"0;URL=ok.html\">";
}
else{
print "<meta http-equiv=\"refresh\" content=\"0;URL=error.html\">";
}
?>

Alvast bedankt voor wie me kan helpen.
Grtz!

Tyfius

Legacy Member
Tip: trim() is een PHP functie en die worden met een kleine letter geschreven. Dit houd het toch een pak overzichtelijker voor ons.

Probeer je controle eens anders te doen:
PHP:
$validation_ok = true;
if (empty($_POST['naam'])) {
    $validation_ok = false;
}

NAGD

Legacy Member
Thanks voor de syntax tips :)

Ik heb het met de empty aanpassing gedaan maar heb nog steeds hetzelfde probleem. Hij blijft hangen in de validation.

Moet ik dan trouwens voor elk veld die if (empty(... herhalen of kan je alle velden specifiëren in die 1ne if?

Als ik iets weizig in dit stukje:

if (!$validation_ok) {
print "<meta http-equiv=\"refresh\" content=\"0;URL=error.html\">";
exit;
}

dan gaat hij de ok.html tonen en de mail versturen. Als ik de exit weglaat bijvoorbeeld.
Ik ken héél weinig van php dus ik los problemen meestal met de trial and error methode op ;)

Nogmaals dank voor de fast reply :)

Tyfius

Legacy Member
Kan inderdaad in 1 enkele if-statement.

Probeer anders eens header("location: error.html"); te gebruiken. Ook zien dat er geen enkele andere html code op die pagina staat of die header geeft problemen.

NAGD

Legacy Member
Dit is wat ik nu heb maar nog steeds zelfde probleem :s

<?php

// get posted data into local variables
$EmailTo = "[email protected]";
$Sitenaam = "www.assuban.be";
$Naam = trim(stripslashes($_POST['Naam']));
$Voornaam = trim(stripslashes($_POST['Voornaam']));
$Straat = trim(stripslashes($_POST['Straat']));
$Nummer = trim(stripslashes($_POST['Nummer']));
$Postcode = trim(stripslashes($_POST['Postcode']));
$Gemeente = trim(stripslashes($_POST['Gemeente']));
$Tel = trim(stripslashes($_POST['Tel']));
$Email = trim(stripslashes($_POST['Email']));
$Boodschap = trim(stripslashes($_POST['Boodschap']));

// validation
$validation_ok=true;

if (empty($_POST['Naam, Voornaam, Straat, Nummer, Postcode, Gemeente, Tel, Email'])) {
$validation_ok = false;
}

if (!$validation_ok) {
print header("location: error.html");
exit;
}

//if (trim($Naam)=="") $validationOK=false;
//if (trim($Voornaam)=="") $validationOK=false;
//if (trim($Straat)=="") $validationOK=false;
//if (trim($Nummer)=="") $validationOK=false;
//if (trim($Postcode)=="") $validationOK=false;
//if (trim($Gemeente)=="") $validationOK=false;
//if (trim($Tel)=="") $validationOK=false;
//if (trim($Email)=="") $validationOK=false;

// prepare email body text
$Body = "Een bezoeker van $Sitenaam heeft volgend bericht achtergelaten";
$Body .= "\n";
$Body .= "\n";
$Body .= "Naam: ";
$Body .= $Naam;
$Body .= "\n";
$Body .= "Voornaam: ";
$Body .= $Voornaam;
$Body .= "\n";
$Body .= "Straat: ";
$Body .= $Straat;
$Body .= "\n";
$Body .= "Nummer: ";
$Body .= $Nummer;
$Body .= "\n";
$Body .= "Postcode: ";
$Body .= $Postcode;
$Body .= "\n";
$Body .= "Gemeente: ";
$Body .= $Gemeente;
$Body .= "\n";
$Body .= "Tel: ";
$Body .= $Tel;
$Body .= "\n";
$Body .= "Email: ";
$Body .= $Email;
$Body .= "\n";
$Body .= "\n";
$Body .= "Boodschap: ";
$Body .= "\n";
$Body .= $Boodschap;
$Body .= "\n";

// send email
$success = mail($EmailTo, "info aanvraag Assuban website", $Body, "From: <$Email>");

// redirect to success page
if ($success){
print "<meta http-equiv=\"refresh\" content=\"0;URL=ok.html\">";
}
else{
print "<meta http-equiv=\"refresh\" content=\"0;URL=error.html\">";
}

NAGD

Legacy Member
IT WORKS!!! :)

Dit is hoe de code er nu uitziet:

// validation
$validation_ok=true;
if (trim($Naam)=="") $validation_ok=false;
if (trim($Voornaam)=="") $validation_ok=false;
if (trim($Straat)=="") $validation_ok=false;
if (trim($Nummer)=="") $validation_ok=false;
if (trim($Postcode)=="") $validation_ok=false;
if (trim($Gemeente)=="") $validation_ok=false;
if (trim($Tel)=="") $validation_ok=false;
if (trim($Email)=="") $validation_ok=false;
if (!$validation_ok) {
print "<meta http-equiv=\"refresh\" content=\"0;URL=error.html\">";
exit;
}

thanks voor de info, ik heb het op die manieren geprobeerd en aangepast maar het werkt nu dus zo.
Thanks en Grtzzzzzz!

dendaak

Legacy Member
KUnde mij is uitleggen wat:
print "<meta http-equiv=\"refresh\" content=\"0;URL=error.html\">";
exit;


juist doen? pagina refreshen ? En dan de "0; ?

EagleEye

Legacy Member
0 is het aantal seconden voor hij redirect naar de URL, dus gene refresh maar een goto

Tyfius

Legacy Member
Je hebt de empty() fout gebruikt.
PHP:
if (empty($_POST['naam']) || empty($_POST['adres'])) {
    $validate_ok = false;
}

Lord Kveldulv

Legacy Member
Als ge veel forms gebruikt, ne keer kijken naar HTML_QuickForm. Te installeren via PEAR. Kost wat moeite om mee te beginnen (als ge non-standard forms wilt toch). Maar eens ge er mee weg zijt schrijft ge hier vele sneller een propere php class of function mee in dezelfde tijd dat ge anders in html nog maar uw form hebt aangemaakt, zonder aan de afhandeling nog maar gedacht te hebben.

EagleEye

Legacy Member
die meta tags kunde altijd gebruiken, headers enkel als er nog geen output is gebeurd in de php

EagleEye

Legacy Member
Haja, maar wie zegt da die andere mensen hier goede code gebruiken :D

metatags zijn gewoon een easy way out :)
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan