Hallo,
deze email validation code werkt goed:



<?php
// define variables and set to empty values
$nameErr = $emailErr = $phoneErr = "";
$name = $email = $phone = $message =$success="";

if ($_SERVER["REQUEST_METHOD"] == "POST") {
  if (empty($_POST["name"])) {
    $nameErr = "Name is required";
  } else {
    $name = test_input($_POST["name"]);
    // check if name only contains letters and whitespace
    if (!preg_match("/^[a-zA-Z-' ]*$/",$name)) {
      $nameErr = "Only letters and white space allowed";
    }
  }
  
  if (empty($_POST["email"])) {
    $emailErr = "Email is required";
  } else {
    $email = test_input($_POST["email"]);
    // check if e-mail address is well-formed
    if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
      $emailErr = "Invalid email format";
    }
  }
    
  if (empty($_POST["phone"])) {
    $phoneErr = "phone is required";
  } else {
    $phone = test_input($_POST["phone"]);
    // check if phone only contains Invalid phone number
    if(preg_match("/^[0-9]{3}-[0-9]{4}-[0-9]{4}$/", $phone)) {      
      $phoneError = "Invalid phone number";

    }
  }
}
	
	function test_input($data) {
  $data = trim($data);
  $data = stripslashes($data);
  $data = htmlspecialchars($data);
  return $data;
}

?>




ik heb het van w3schools gevonden en bestudeert.

maar wanneer ik deze synax toevoegen :



<?php

if ($name_error=='' and $email_error=='' and $phone_error=='') {
		$message_body='';
		unset($_POST['submit']);
		foreach($POST as $key => $value) {
			$message_body .= "$key:$value\n";
			
		}	
		$to='[email protected]'
		$subject='Contact For Submit'
		if ($mail($to,$subject,$message)) {			
			
			$success="Message Sent,thank you for contacting us!" ;
			$name=$email=$phone=$message=''
		}
	
	}
	
?>




ik krijg deze melding: Er heeft zich een kritieke fout voorgedaan op deze site.

ik heb alleen de eerste lijn van syntax geplakt

</php
if ($name_error=='' and $email_error=='' and $phone_error=='') {
		$message_body='';
		unset($_POST['submit']);
		foreach($POST as $key => $value) {
			$message_body .= "$key:$value\n";
			
		}
?>



en ik zie dat de fout ligt hier . wat het kan de fout zijn?

ik heb in mij html code:



<fieldset>
      <input placeholder="Your name" type="text" name="name" value="name" tabindex="1" autofocus=""></fieldset>
<fieldset>  <input placeholder="Your Email Address" type="text" name="email" value="$email" tabindex="2"></fieldset>
<fieldset>      <input placeholder="Your phone" type="text" name="phone" value="phone" tabindex="3"></fieldset>
<fieldset>
 <textarea placeholder="Type your Message Here...." type="text" name="message" value="message" tabindex="4"></textarea></fieldset>


ik heb al key value gezet boven in html.en ik ook 2 klassen gemaakt voor error en success.

ik ga deze syntax weghalen dan kunt u mij website zien.
url is : https://webdesignleren.com/contact/
hoe ik kan deze probleem oplossen of mischien iemand kan corrigeren voor mij deze code?
dank u wel
De mail gaat via de mailer van Wordpress.
Ik raad aan om geen validatie op de invoerwijze te doen van namen. Enkel of het wel of niet in ingevuld.
Validatie van een naam:
Eigenlijk kun je er vanuit gaan dat de persoon in kwestie het best weet hoe hij zijn naam (wil) schrijven.
Jij kunt wel vinden dat "alle letters" de reeks "a-z" is, maar in Zweden hebben ze na de Z nog 3 letters in hun alfabet: ä ö en Å.
En dan hebben we het nog niet over de vele letters met accenten. De "mwa, dan schrijf je toch een e ipv een é" voldoet vooral voor mensen die zelf niet zo'n letter in hun naam hebben.

Je krijgt eingelijk niet alle letter-tekens die in een naam kunnen voorkomen in een uitdrukking om te filteren.
Je zou een aantal leestekens kunnen uitsluiten, maar ook dat is tricky: waarom wel een - toelaten maar geen / ?
En sommigen (dhr Musk) lijken er een sport van te maken om zo raar mogelijke namen te kiezen voor hun kinderen. Al verbieden sommige landen wel cijfers. Maar de vraag is of dat wereldwijd zo is.

Enige wat je zou kunnen checken: staat er minstens 1 teken (en dan geen spatie).

--
telefoon.
Op PFZ hadden we vroegen een wiki pagina met validaties.
Uit mijn hoofd geldt voor een telefoonnummer in Nederland: het begint met een 0. Daarna volgt een cijfer ongelijk aan 0 en dan nog 8 cijfers.

<?php preg_match('~^0[1-9][0-9]{8}$~', $invoer); ?>

Dan zou je daar nog 0900 (betaal)nummers kunnen uitsluiten. Maar die zijn sowieso vaak niet 10-tekens lang.

Maar ook hier liggen valkuilen op de loer: Waarom kan iemand alleen een NL telefoonnummer invoeren? Ik ken zat mensen die over de grens werken (niet vreemd als je vanuit mijn straat zowel Duitsland als België kunt zien liggen).

Tip: probeer een nummer wel genormaliseerd op te slaan.
Een backend waar ik ooit aan werkte had veel telefoonnummers opgeslagen als "0612345678 (moeder)" of "0612345678 / 0451234545" dan wel "volgt nog"
Dat is niet handig als je vervolgens die database ook aan je telefooncentrale koppelt voor uitbellen of voor nummer/klant herkenning. Dat werd vervolgens operatie "telefoonnummers opschonen" Daarhebben we toen de +31... (en +32... en +49....) variant voor gebruikt.

Maar hoe je opslaat is weer onafhankelijk van wat de klant invoert (al dan niet met extra - tekens of ( )
>> Uit mijn hoofd geldt voor een telefoonnummer in Nederland: het begint met een 0. Daarna volgt een cijfer ongelijk aan 0

Dat hoeft niet ... ipv +31 kan men ook 0031 gebruiken. Een 06-nummer kan dan zoiets worden als 0031(0)612345678.
Servicenummers van Nederlandse gemeenten beginnen met 14, bijvoorbeeld 14 020 voor de gemeente Amsterdam en 14 030 voor de gemeente Utrecht.

Zo zijn er alleen al in Nederland meer uitzonderingen.

Reageren