Eregi werkt niet...

  • Onderwerp starter Onderwerp starter Gregg
  • Startdatum Startdatum
Status
Niet open voor verdere reacties.

Gregg

Gebruiker
Lid geworden
8 okt 2008
Berichten
68
Hallo iedereen,
mijn functie check mail blijkt niet te werken.
de fouten op lege velden geeft hij wel maar als ik een email intyp die niet voldoet volgens "eregi" verzend hij toch ook de gegevens.
dit kan uiteraard niet de bedoeling zijn.
Kan er mij iemand helpen?
alvast bedankt

PHP:
<?php
include('connect.php');
if($_SERVER['REQUEST_METHOD'] == 'POST'){
	$voornaam = $_POST['voornaam'];
	$naam = $_POST['naam'];
	$email = $_POST['email'];
	$sub = $_POST['sub'];
			function checkmail($mail){ 
    			$email_host = explode("@", $mail);
    			$email_host = 1;
   				$email_resolved = gethostbyname($email_host) ;
    				if ($email_resolved != $email_host && eregi("^[0-9a-z]([-_.~]?[0-9a-z])*@[0-9a-z]([-.]?[0-9a-z])*\\.[a-z]{2,4}$",$mail));
    				return 1;
			}
	if($sub == 'inschrijven'){
		if($voornaam != '' AND $naam != '' AND $email != '' AND checkmail($email) == 1){
			$query ="INSERT INTO `nieuwsbrief` (`voornaam`, `naam`, `email`) VALUES ('$voornaam', '$naam', '$email')";
			mysql_query($query) or die (mysql_error());
			echo '<div class="phpsuccess"><center>Dank u voor uw inschrijving!</center></div>';
			//include ("nieuwsbrief.php");
		}else{
			echo '<div class="phperror"><center>Gelieve alle gegevens correct in te vullen!</center></div>';
			//include ("nieuwsbrief.php");
	}
		}elseif($sub == 'uitschrijven'){
		if($voornaam != '' AND $naam != '' AND $email != '' AND checkmail($email) == T1){
			$query ="DELETE FROM nieuwsbrief WHERE voornaam = '$voornaam' AND naam = '$naam' AND email = '$email'; ";
			mysql_query($query) or die (mysql_error());
			echo '<div class="phpsuccess"><center>U bent succesvol uitgeschreven!</center></div>';
			//include ("nieuwsbrief.php");
		}else{
					echo '<div class="phperror"><center>Gelieve alle gegevens correct in te vullen!</center></div>';
			//include ("nieuwsbrief.php");
		}
	}
}
?>
 
PHP.net:
If the optional parameter regs was not passed or the length of the matched string is 0, this function returns 1.

Oftewel, deze functie doet niet wat je wilt. Je kunt overigens beter de preg functies gebruiken dan de ereg functie. Het is een betere regex engine.

dus:
Code:
eregi("^[0-9a-z]([-_.~]?[0-9a-z])*@[0-9a-z]([-.]?[0-9a-z])*\\.[a-z]{2,4}$",$mail)

wordt:
Code:
preg_match("#^[0-9a-z]([-_.~]?[0-9a-z])*@[0-9a-z]([-.]?[0-9a-z])*\\.[a-z]{2,4}$#i",$mail)

De # openen de regex en sluiten hem, ze doen dus niet mee in de match. de "i" achter de laatste # maakt de match case-insensitive. De regex zelf heb ik niet gecontroleerd, maar email regexen zijn redelijk lastig. Niet omdat ze te weinig uitsluiten, meestal omdat ze te weinig toestaan.
:thumb:
 
Laatst bewerkt:
hoe doet het nog steeds..
zonder " @ " en zonder "." ... erin :confused:
 
je functie zou altijd een waarde moeten teruggeven, dus eindig de functie met "return 0;". Ookal is dat niet de fout hier, functies die een waarde returnen horen dit altijd te doen, welk pad de functie ook volgt.

De fout is dat er een puntkomma achter je if statement staat:
Code:
if ($email_resolved != $email_host && preg_match("#lalala#i",$mail))[COLOR="Red"];  <---- HIER[/COLOR]
return 1;

De puntkomma daar moet weg :)
 
de " ; " is weg en de functie werkt... maar té goed

als ik een valid email ingeef wordt het formulier niet verzonden... :confused:
 
Hier gaat het nu fout:
PHP:
$email_host = explode("@", $mail);
$email_host = 1;

$email_host is nu het nummer 1. Je wilt het tweede element uit de array $email_host. Dat gaat zo:
PHP:
$email_host = explode("@", $mail);
$email_host = $email_host[1];

Dan zou het nu moeten werken denk ik :P
 
"undefined offset: 1" geeft hij nu als ik op verzenden druk :)
 
Dat zou betekenen dat er geen @ in de tekst voor komt. Het zou geen fatal error moeten zijn, maar goed, anders doe je het zo:
PHP:
function checkmail($mail)
{
  if (!preg_match("#^[0-9a-z]([-_.~]?[0-9a-z])*@[0-9a-z]([-.]?[0-9a-z])*\\.[a-z]{2,4}$#i",$mail))
  {
    return 0;
  }

  $email_host = explode("@", $mail);
  $email_host = $email_host[1];
  $email_resolved = gethostbyname($email_host) ;
  if ($email_resolved == $email_host)
  {
    return 0;
  }
  return 1;
}

Nu stopt de functie meteen als er geen @ in de mail zit, dan moet $email_host[1] wel gedefinieerd zijn.
 
EUREKA!!!
het werkt... :D

hartelijk dank voor de hulp.
ben nog niet zo lang bezig met php en functies enzo.. en geraakte er niet aan uit.

nogmaals bedankt

:thumb::thumb:
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan