PHP: controleren email adres

Uit een boek van Ward van der Put 'Dynamische websites met PHP' probeer ik het volgende script uit wat dient ter controle van een email adres.

Het is gekopieerd uit de TUT en op een of andere manier krijg ik alleen maar een “FALSE” als output.
Na diverse controles verwacht ik dat het zit ná het stukje “// Daarna een controle met een reguliere expressie uitvoeren:” inhoudelijk is hetgeen dat daarna komt mij even te complex.

Wie ziet de oplossing? Of kan het simpeler…?

[code:1:e1893153ad]
IF (isset ($_POST[‘emailadres’]))
{
$emailadres = $_POST[‘emailadres’];

		// Deze functie controleert of een string de vorm van een een e-mailadres heeft.
		function is_email($emailadres)
		{
		 // Eerst een snelle controle uitvoeren: een e-mailadres moet uit minimaal 7 tekens bestaan:
		    if (strlen($emailadres) < 7) 
		    {
		        return false;
		    }

		    // Daarna een controle met een reguliere expressie uitvoeren:
		    if (ereg("^[_a-zA-Z0-9-]+(.[_a-zA-Z0-9-]+)*@([a-zA-Z0-9-]+.)+([a-zA-Z]{2,4})$", $emailadres)) 
		    {
		        return true;
		    } 

		    else 
		    {
		        return false;
		    }
		}


	IF (!is_email)
			{
				print ("<p>Het veld emailadres=<b>$emailadres</b></p>");				
			}
	ELSE
			{
				print ("<p>$email Het veld <b>email</b> is onjuist ingevuld. Dit is een verplicht veld. Ga terug en probeer het opnieuw.</p>");
			}
}

[/code:1:e1893153ad]

ik zag iets heel raars in je script of dit het is weet ik niet maar viel me gewoon op

je heb in je script dit staan [b:6522b66cc8]IF (!is_email)[/b:6522b66cc8] maak er eens [b:6522b66cc8]IF ($is_email)[/b:6522b66cc8]

Het moet betekenen : IF(functie'is_email' is true)

wat is de uitkomst van: IF ($is_email) volgens jou?

Ik heb het aangepast naar: [code:1:5e11f86efa] IF (isset ($_POST['emailadres'])) { $emailadres = $_POST['emailadres']; // Deze functie controleert of een string de vorm van een een e-mailadres heeft.

	IF (!ereg("^[_a-zA-Z0-9-]+(.[_a-zA-Z0-9-]+)*@([a-zA-Z0-9-]+.)+([a-zA-Z]{2,4})$", $emailadres))
			{
				print ("<p>Het veld emailadres=<b>$emailadres</b></p>");				
			}
	ELSE
			{
				print ("<p>emailadres=<b>$emailadres</b> Het veld <b>emailadres</b> is onjuist ingevuld. Dit is een verplicht veld. Ga terug en probeer het opnieuw.</p>");
			}
}

[/code:1:5e11f86efa]
Met nog steeds hetzelfde resultaat…

Dat de functie is_email true retourneerd.

En if($is_email) is hetzelfde als if($is_email == true)

Je moet het e-mailadres 'in de functie stoppen'.

[code:1:dd1e485f30]IF(!is_email($emailadres)) {
…[/code:1:dd1e485f30]

[quote:1908ccdad7="Sambo"]Ik heb het aangepast naar: [code:1:1908ccdad7] IF (isset ($_POST['emailadres'])) { // Deze functie controleert of een string de vorm van een een e-mailadres heeft.

	IF (!ereg("^[_a-zA-Z0-9-]+(.[_a-zA-Z0-9-]+)*@([a-zA-Z0-9-]+.)+([a-zA-Z]{2,4})$", $emailadres))
			{
				print ("<p>Het veld emailadres=<b>$emailadres</b></p>");				
			}
	ELSE
			{
				print ("<p>emailadres=<b>$emailadres</b> Het veld <b>emailadres</b> is onjuist ingevuld. Dit is een verplicht veld. Ga terug en probeer het opnieuw.</p>");
			}
}

[/code:1:1908ccdad7]
Met nog steeds hetzelfde resultaat…[/quote:1908ccdad7]

Je controleert of $_POST[‘emailadres’] bestaat, maar gaat vervolgens verder met de variable $emailadres.

/edit: Dat zou op zich niets uit moeten maken.

Voor je regular expression staat een uitroepteken (!ereg). Dat wil zeggen: als de regex NIET voldoet, dan. Je zou dat uitroepteken es weg kunnen halen…

@aquarius: Ik had wat (teveel) code weggehaald in de 2de post. Goed opgemerkt dus maar het regeltje staat er in werkelijkheid wel in. Code in de laatste post is dus even ge-update.

[quote:b0d2a0cf9b="Sambo"]@aquarius: Ik had wat (teveel) code weggehaald in de 2de post. Goed opgemerkt dus maar het regeltje staat er in werkelijkheid wel in. Code in de laatste post is dus even ge-update.[/quote:b0d2a0cf9b]

Je was me net voor. Zie edit op mijn voorgaande bericht.

Terug naar eerste code met aanpassing in de IF: Tevens even het gehele stukje.

[code:1:382a160968] IF (isset ($_POST[‘emailadres’]))
{
$emailadres = $_POST[‘emailadres’];
//Check emailadres
$emailadres = strip_tags ($emailadres); //html tags verwijderen
$emailadres = trim ($emailadres); //witruimte verwijderen

		// Deze functie controleert of een string de vorm van een een e-mailadres heeft.

		function is_email($emailadres)
		{
			 // Eerst een snelle controle uitvoeren: een e-mailadres moet uit minimaal 7 tekens bestaan:
		    if (strlen($emailadres) < 7) 
		    {
		        return false;
		    }

		    // Daarna een controle met een reguliere expressie uitvoeren:
		    if (ereg("^[_a-zA-Z0-9-]+(.[_a-zA-Z0-9-]+)*@([a-zA-Z0-9-]+.)+([a-zA-Z]{2,4})$", $emailadres)) 
		    {
		        return true;
		    } 

		    else 
		    {
		        return false;
		    }
		}

	IF ($is_email)
			{
				print ("<p>Het veld emailadres=<b>$emailadres</b></p>");				
			}
		ELSE
			{
				print ("<p>$email Het veld <b>email</b> is onjuist ingevuld. Dit is een verplicht veld. Ga terug en probeer het opnieuw.</p>");
			}
}

[/code:1:382a160968]

Als ik een uitroepteken toevoeg keurt hij ook onvolledige adressen goed, dat is het denk niet…

[quote:a7cab4cafd="Sambo"]Als ik een uitroepteken toevoeg keurt hij ook onvolledige adressen goed, dat is het denk niet...[/quote:a7cab4cafd]

Zie mijn reactie van 17h04. Je moet het emailadres ‘in de functie stoppen’. In de aangepaste code stond een uitroepteken. In je oorspronkelijke code stond dit niet. In je oorspronkelijke code was er dus geen uitroepteken weg te halen.

Juist dat is het! Bedankt voor het scherpe oog!

Een script dat ik vaak gebruik (komt van php.net geloof ik )

[code:1:ab370fbe36]
function check_email_mx($email) {

// controleert aan de hand van regex
if( (preg_match(’/(@.*@)|(…)|(@.)|(.@)|(^.)/’, $email)) || (preg_match(’/^.+@([?)[a-zA-Z0-9-.]+.([a-zA-Z]{2,3}|[0-9]{1,3})(]?)$/’,$email)) )
{
// controleert of de server ‘ok’ respons geeft op het opgegeven email adres ( werkt niet op M$ machines )
$dom = explode(’@’, $email);
if(checkdnsrr($dom[1].’.’, ‘MX’) ) return true;
if(checkdnsrr($dom[1].’.’, ‘A’) ) return true;
if(checkdnsrr($dom[1].’.’, ‘CNAME’) ) return true;
}
return false;
}
[/code:1:ab370fbe36]

Het aanspreken:

[code:1:ab370fbe36]
$email = $_POST[‘emailadres’];

if(check_email_mx($email) )
{
// doe je mail ding
mail();
}
[/code:1:ab370fbe36]

Als ik jullie nog een keer mag storen....

[code:1:d765f53bea] //check emailadres
IF (isset ($_POST[‘emailadres’]))
{
$emailadres = $_POST[‘emailadres’];
$emailadres = strip_tags ($emailadres); //html tags verwijderen
$emailadres = trim ($emailadres); //witruimte verwijderen
$emailadres = htmlentities($emailadres); //text converteren naar html

		// Deze functie controleert of een string de vorm van een een e-mailadres heeft.

		function is_email($emailadres)
		{
			 // Eerst een snelle controle uitvoeren: een e-mailadres moet uit minimaal 7 tekens bestaan:
		    if (strlen($emailadres) < 7) 
		    {
		        return false;
		    }

		    // Daarna een controle met een reguliere expressie uitvoeren:
		    if (ereg("^[_a-zA-Z0-9-]+(.[_a-zA-Z0-9-]+)*@([a-zA-Z0-9-]+.)+([a-zA-Z]{2,4})$", $emailadres)) 
		    {
		        return true;
		    } 

		    else 
		    {
		        return false;
		    }
		}
	}


//Verwerken van de gegevens en mailen/posten	
IF(!is_email($emailadres))
			{
				print ("<p><b>'$emailadres'</b> is geen geldig <b>emailadres</b>. <br>
				Dit is een verplicht veld. Ga terug en probeer het opnieuw.</p>");
			}[/code:1:d765f53bea]

Werkt nu perfect maar een soorgelijke truck voor een 2de veld krijg ik niet aan de praat. Volgens mij is het bijna identiek.

[code:1:d765f53bea]
//check naam
IF (isset ($_POST[‘naam’]))
{
$naam = $_POST[‘naam’];
$naam = strip_tags ($naam); //html tags verwijderen
$naam = trim ($naam); //witruimte verwijderen
$naam = htmlentities($naam); //text converteren naar html

		// Deze functie controleert of een string de vorm van een een naam heeft.

		function is_naam($naam)
		{
			 // Eerst een snelle controle uitvoeren: een naam moet uit minimaal 2 tekens bestaan:
		    if (strlen($naam) < 2) 
		    {
		        return false;
		    }
		    else 
		    {
		        return true;
		    }
		}
	}

//Verwerken van de gegevens en mailen/posten	
IF(!is_naam($naam))
			{
				print ("<p>$naam Het veld <b>naam</b> is onjuist ingevuld. <br>
				Dit is een verplicht veld. Ga terug en probeer het opnieuw.</p>");
			&#125;[/code:1:d765f53bea]</p>