Beste forumleden,

Ik heb een PHP script van iemand gekregen voor een contactformulier op de website.
Omdat ik een echte beginner ben, heb ik maar weinig aangepast. Het script werkt overigens wel.
Op een paar dingen na.
Als de bezoeker zijn voor- en achternaam invult en daarna het verzend, krijgt hij de foutmelding dat de invoer niet correct is.
De reden is dat hij de namen met een hoofdletter begint. Als het in kleine letters wordt ingevoerd gaat het goed.
Hoe kan ik dat veranderen?

Laat ik mijn glazen bol er eens bij pakken...
Nee, dat wordt niks. Welk script gebruik je? Plaats eens wat relevante code.
Blijkbaar is de controle ergens niet goed. Misschien iets met strtolower, ucfirst of mb_string().
Als je de relevante code code kan tonen kunnen we er meer over zeggen.
Dank voor jullie snelle reactie. Hier de code:

<?php
session_start(); 

	#**********************************************
	#***** Contactformulier van DSR Cleaning *****
	#**********************************************

if(isset($_POST['email'])) {
	
	// Pas deze twee regels aan. E-mailadres van de ontvanger
	$email_to = "**mailknip**";
	$email_subject = "E-mailbericht";
	
	
	function died($error) {
		// je foutbericht staat hier
		echo "Het spijt ons, vanwege een fout is het formulier niet verzonden. ";
		echo "Deze fout(en) tonen zich hieronder.<br /><br />";
		echo $error."<br /><br />";
		echo "Ga a.u.b. terug om de velden correct in te vullen.<br /><br />";
		die();
	}
	
	// validation expected data exists
	if(!isset($_POST['voornaam']) ||
		!isset($_POST['achternaam']) ||
		!isset($_POST['email']) ||
		!isset($_POST['telefoon']) ||
		!isset($_POST['bericht'])) {
		died('Het spijt ons, er is een probleem opgetreden bij het verzenden van het formulier.');		
	}
	
	$first_name = $_POST['voornaam']; // verplicht
	$last_name = $_POST['achternaam']; // verplicht
	$email_from = $_POST['email']; // verplicht
	$telephone = $_POST['telefoon']; // niet verplicht
	$comments = $_POST['bericht']; // verplicht
	
	$error_message = "";
	$email_exp = "^([a-zA-Z0-9]+[a-zA-Z0-9._%\-\+]*@(?:[a-zA-Z0-9-]+\.)+[a-zA-Z]{2,4})$";
  if(!mb_ereg($email_exp,$email_from)) {
  	$error_message .= 'Het e-mailadres is niet geldig.<br />';
  } 
  
	$string_exp = "^[a-z .'-]+$";
  if(!mb_ereg($string_exp,$first_name)) {
  	$error_message .= 'De voornaam is niet geldig.<br />';
  }
  if(!mb_ereg($string_exp,$last_name)) {
  	$error_message .= 'De achternaam is niet geldig.<br />';
  }
  if(strlen($comments) < 2) {
  	$error_message .= 'Het bericht is niet geldig.<br />';
  }
  $string_exp = "^[0-9 .-]+$";
  if(!mb_ereg($string_exp,$telephone)) {
  	$error_message .= 'Het telefoonnummer is niet geldig.<br />';
  }
  if(strlen($error_message) > 0) {
  	died($error_message);
  }
	$email_message = "Gegevens formulier.\n\n";
	
	function clean_string($string) {
	  $bad = array("content-type","bcc:","to:","cc:","href");
	  return str_replace($bad,"",$string);
	}
	
	$email_message .= "voornaam: ".clean_string($first_name)."\n";
	$email_message .= "achternaam: ".clean_string($last_name)."\n";
	$email_message .= "email: ".clean_string($email_from)."\n";
	$email_message .= "telefoon: ".clean_string($telephone)."\n";
	$email_message .= "bericht: ".clean_string($comments)."\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);  
?>

<!-- Creeer je eigen succes pagina hier -->

Bedankt voor uw bericht. U krijgt zo spoedig mogelijk een reactie.

<?
}
?>

Ik zou liever gewoon kijken i.p.v. een reguliere expressie of er iets is ingevuld.
Want wat als iemand nou een exotische naam heeft met diakritische tekens?
<?php
if(trim($_POST['naam'])=="") {
echo "Er is geen naam ingevuld!";
}
?>

Verder zijn reguliere expressies voor e-mailadres controles ook niet handig, omdat je prima met filter_var() al prima kan controleren of een mailadres bestaat. Met jouw reguliere expressie zou [email protected] niet eens geldig zijn.

De beste oplossing is:

<?php
if (filter_var($_POST['mail'], FILTER_VALIDATE_EMAIL)) {
echo "Dit mailadres is geldig!";
} else {
echo "Dit mailadres is ongeldig!";
}
?>

Het komt er op neer dat je het niet te moeilijk voor gebruikers moet maken bij controles.
Beste Ariën,

Dank voor je reactie.

Ik zal kijken of ik het aan kan passen.
Zoals gemeld ben ik een beginner en heb nog geen sikkepit verstand van PHP.

Met vriendelijke groet,
Henk Drenth
Ik zou zeggen: Probeer het eerst eens, want aldoende leert men ;-)
Je probleem in de huidige opzet bevindt zich op regel 45.
Door hier $string_exp = "^[a-zA-Z .'-]+$"; van te maken worden hoofdletters wel geaccepteerd. Voor e-mailadressen zou ik de route die Ariën uitstippelt inslaan.
Maar met die regexp geldt de naam Ariën helaas weer niet. Dus daarom kan je beter enkel gewoon controleren of er iets ingevuld is.
Beste Ben en Ariën,

Heel erg bedankt voor jullie bijdrage. Ik ben goed geholpen.

Ik wil me wat meer verdiepen in PHP. Ben een beginner en weet er niets van.
Kunnen jullie mij een tip geven over een aan te kopen boek?

Reageren