Ben bezig met een uitgebreid contactformulier.
Echter wanneer ik deze test krijg ik een witte pagina.
Ook geen foutmeldingen wanneer ik ze leeg laat.
kan iemand me misschien zeggen wat ik fout doe?
<?php
if(isset($_POST['email'])) {
// EDIT THE 2 LINES BELOW AS REQUIRED
$email_to = "email verwijdert om privacy redenen";
$email_subject = "Recruitment Form";
function died($error) {
// your error code can go here
echo "Er zijn nog enkele fouten gevonden. ";
echo "De fouten worden hieronder weergegeven.<br /><br />";
echo $error."<br /><br />";
echo "Gelieve deze fouten op te lossen en het formulier op.<br /><br />";
3 die();
}
// validation expected data exists
if(!isset($_POST['naam']) ||
!isset($_POST['straat']) ||
!isset($_POST['stad']) ||
!isset($_POST['postcode']) ||
!isset($_POST['provincie']) ||
!isset($_POST['geslacht']) ||
!isset($_POST['aantal']) ||
!isset($_POST['email']) ||
!isset($_POST['fblink']) ||
!isset($_POST['instalink']) ||
!isset($_POST['subject'])) {
died('We are sorry, but there appears to be a problem with the form you submitted.');
}
$naam = $_POST['naam']; // required
$straat = $_POST['straat']; // required
$stad = $_POST['stad']; // required
$postcode = $_POST['postcode']; // required
$provincie = $_POST['provincie']; // required
$geslacht = $_POST['geslacht']; // required
$aantal = $_POST['aantal']; // required
$email_from = $_POST['email']; // required
$fblink = $_POST['fblink']; // not required
$instalink = $_POST['instalink']; // not required
$subject = $_POST['subject']; // required
$error_message = "";
$email_exp = '/^[A-Za-z0-9._%-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}$/';
if(!preg_match($email_exp,$email_from)) {
$error_message .= 'Het emailadres dat u ingegeven hebt is niet correct.<br />';
}
$string_exp = "/^[A-Za-z .'-]+$/";
if(!preg_match($string_exp,$naam)) {
$error_message .= 'Geen Naam opgegeven.<br />';
}
if(!preg_match($string_exp,$straat)) {
$error_message .= 'Geen Straat ingegeven.<br />';
}
if(!preg_match($string_exp,$stad)) {
$error_message .= 'Geen Stad opgegeven.<br />';
}
if(!preg_match($string_exp,$postcode)) {
$error_message .= 'Geen Postcode ingegeven.<br />';
}
if(!preg_match($string_exp,$provincie)) {
$error_message .= 'Geen Provincie opgegeven.<br />';
}
if(!preg_match($string_exp,$email_from)) {
$error_message .= 'Geen Email ingegeven.<br />';
}
if(strlen($subject) < 2) {
$error_message .= 'The Comments you entered do not appear to be valid.<br />';
}
if(strlen($error_message) > 0) {
died($error_message);
}
$email_message = "Form details below.\n\n";
function clean_string($string) {
$bad = array("content-type","bcc:","to:","cc:","href");
return str_replace($bad,"",$string);
}
$email_message .= "Naam: ".clean_string($naam)."\n";
$email_message .= "Straat: ".clean_string($straat)."\n";
$email_message .= "Stad: ".clean_string($stad)."\n";
$email_message .= "Postcode: ".clean_string($postcode)."\n";
$email_message .= "Provincie: ".clean_string($provincie)."\n";
$email_message .= "Geslacht: ".clean_string($geslacht)."\n";
$email_message .= "Aantal keer vissen per maand: ".clean_string($aantal)."\n";
$email_message .= "Email: ".clean_string($email_from)."\n";
$email_message .= "fblink: ".clean_string($fblink)."\n";
$email_message .= "instalink: ".clean_string($instalink)."\n";
$email_message .= "Waarom wil je joinen?: ".clean_string($subject)."\n";
// create email headers
$headers = 'From: '.$email_from."\r\n".
'Reply-To: '.$email_from."\r\n" .
'X-Mailer: PHP/' . phpversion();
@mail($email_to, $email_subject, $email_message, $headers);
?>
<!-- include your own success html here -->
Dank u voor uw interesse.<br>
We nemen spoedig contact met u op.
<?php
}
?>
[size=xsmall]Toevoeging op 21/03/2020 11:35:22:[/size]
Alsook hoe zorg ik dat dit niet in de link verschijnt :/test/send.php?naam=&straat=&stad=&postcode=&provincie=&geslacht=man&aantal=1&email=&fblink=&instalink=&subject=
Ik heb een vermoeden dat je in je formulier vergten bent aan te geven dat je method="POST" gebruikt. Anders gaat die over op GET, en stuurt hij de waardes via GET en dus via de URL's door naar het script.
Daarnaast een paar opmerkingen:
- Lijn 35 t/m 45 is overbodig, omdat je bestaande variabelen zomaar kopieert zonder dat je wat toevoegt. Je kan je $_POST variabelen prima in het vervolg gebruiken.
- Iemand met als mailadres ikben@pietjeuit.amsterdam sluit je nu buiten. Het is beter om gebruik te maken van deze structuur:
<?php
if (filter_var($email, FILTER_VALIDATE_EMAIL)) {
echo $email." is geldig";
} else {
echo $email." is niet geldig";
}
?>
- Een isset is niet bepaalde een validatie of iets in ingevuld. Zelf een spatie is gewoon mogelijk.
Een controle op deze manier is effectiever, en met name met trim() omdat die overtollige spaties verwijderd.
<?php
if(trim($var) == "") {
// er is niks ingevuld
} else {
// er is wel wat ingevuld
}
?>
Zelfs al heb ik alle velden ingevuld dan krijg ik :
Er zijn nog enkele fouten gevonden. De fouten worden hieronder weergegeven.
Het emailadres dat u ingegeven hebt is niet correct.
Geen Naam opgegeven.
Geen Straat ingegeven.
Geen Stad opgegeven.
Geen Postcode ingegeven.
Geen Provincie opgegeven.
Geen Email ingegeven.
The Comments you entered do not appear to be valid.
Gelieve deze fouten op te lossen en het formulier op.