Hi,

Ik heb een database met daarin een lijst met email naw gegevens incl email adresse.
Nu is het zo dat er een aantal email adressen in de lijst zijn waar bv geen @ of .nl/com enzl achter staat. Ik heb iets nodig dat de gehele database doorloopt en checkt of de email adressen kloppen. Zou iemand me hier mee kunnen helpen alvast bedankt!

GR O_R
Kijk eens tussen de mail scripts in de scripts sectie hier. De beveiligde varianten hebben al een check voor e-mail ingebouwd. Deze check kan je dan prima gebruiken.
Het gaat om een regex voor email (google) dan vind je genoeg resultaten om te kunnen controleren of het een email adres is.
je zou een regex kunnen combineren met een SQL loopje... ik gheb geen verstand van regexen maar ik kan je wel een voorbeeld geven.


<?php
$query = "SELECT email, id FROM tabel";

if(!$result = mysql_query($query)){

echo 'Query mislukt.';

}else{
while($row = mysql_fetch_assoc($result)){

if(!eregi("^[a-zA-Z0-9_]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-\.]+$]", $row['result'])){

echo 'niet valid';

}else{
echo 'valid';

}

}
}
?>

edit: even regex opgezocht.
Bedankt voor de snelle reactie!


<?php
$start=$_GET['start'];
$end=$_GET['end'];
include( '../db.inc.php' );
mysql_connect($host,$username,$password);
@mysql_select_db($database) or die( "Unable to select database");
$query="SELECT * FROM $table LIMIT $start,$end";
$result=mysql_query($query);
$num=mysql_num_rows($result); 
mysql_close();

$i=0;
while ($i < $num) {
$veld0=mysql_result($result,$i,"id");
$veld1=mysql_result($result,$i,"veld1");
$veld2=mysql_result($result,$i,"veld2");
$veld3=mysql_result($result,$i,"veld3");
$veld4=mysql_result($result,$i,"veld4");
$veld5=mysql_result($result,$i,"veld5"); #email adres
$veld6=mysql_result($result,$i,"veld6");
$veld7=mysql_result($result,$i,"veld7");
$veld8=mysql_result($result,$i,"veld8");
$veld9=mysql_result($result,$i,"veld9");
$veld10=mysql_result($result,$i,"veld10");
$veld11=mysql_result($result,$i,"veld11");



if(!eregi("^[a-zA-Z0-9_]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-\.]+$]", $veld5)){

##############
#Print tabel en daarin de gebruikers code heb ik al maar is anders beetje veel om hier te zetten
##############

}else{
#niks doen

}

++$i;
} 
?>


ik heb nu het bovenstaande,maar dit werkt niet.
waarom doe je dit? voor elke veld hoef je niet elke keer een result op te vragen. Doe eens zoiets als ik heb gemaakt voor je.\

bovendien kan je scriptt niet eens, je sluit mysql en vraagt daarna weer resultaten aan
maar dan kan ik toch niet me hele database door lopen en alle mail adressen controlleren. en ik moet ook de informatie uit de database halen (naam id)
Moet ik het script zo gebruiken?
Nu geeft hij een niet valid terwijl het adres wel klopt.
Het kan zijn dat ik het script verkeerd begrijp.


<? if(!eregi("^[a-zA-Z0-9_]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-\.]+$]","[email protected]")){

echo 'niet valid';

}else{
echo 'valid';

}
?>
ik heb nog een ander script gebruikt, deze heb ik werkend gekregen:


<?
function check_email_mx($email)
{
    if((preg_match('/(@.*@)|(\.\.)|(@\.)|(\.@)|(^\.)/', $email)) || (preg_match('/^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,3}|[0-9]{1,3})(\]?)$/',$email)))
    {
        $host = explode('@', $email);
        if(checkdnsrr($host[1].'.', 'MX') ) return true;
        if(checkdnsrr($host[1].'.', 'A') ) return true;
        if(checkdnsrr($host[1].'.', 'CNAME') ) return true;
    }
    return false;
}
if(!function_exists('checkdnsrr'))
{
    function checkdnsrr($host, $type = '')
    {
        if(!empty($host))
        {
            if($type == '') $type = "MX";
            @exec("nslookup -type=$type $host", $output);
            while(list($k, $line) = each($output))
            {
                if(eregi("^$host", $line))
                {
                    return true;
                }
            }
            return false;
        }
    }
}
?>
MAAK TABEL AAN (ROW'S WORDEN BENEDEN TOEGEVOEGD)
<?
$start=$_GET['start'];
$end=$_GET['end'];
include( '../db.inc.php' );
mysql_connect($host,$username,$password);
@mysql_select_db($database) or die( "Unable to select database");
$query="SELECT * FROM $table LIMIT $start,$end";
$result=mysql_query($query);
$num=mysql_num_rows($result); 
mysql_close();


$i=0;
while ($i < $num) {
$veld0=mysql_result($result,$i,"id");
$veld1=mysql_result($result,$i,"veld1");
$veld2=mysql_result($result,$i,"veld2");
$veld3=mysql_result($result,$i,"veld3");
$veld4=mysql_result($result,$i,"veld4");
$veld5=mysql_result($result,$i,"veld5"); #email adres
$veld6=mysql_result($result,$i,"veld6");
$veld7=mysql_result($result,$i,"veld7");
$veld8=mysql_result($result,$i,"veld8");
$veld9=mysql_result($result,$i,"veld9");
$veld10=mysql_result($result,$i,"veld10");
$veld11=mysql_result($result,$i,"veld11");



if(!check_email_mx($veld5)){





?>

VUL TABEL MET EEN ROW (ENTRY WAARVAN EMAIL NIET KLOPT, TABEL WORDT BOVEN AANGEMAAKT) 

<?

}

++$i;
} 

?>


Gebruik i.p.v. MySQL een database die zélf controleert of een emailadres wel een emailadres is. In bv. PostgreSQLkun je zelf een datatype aanmaken:

CREATE DOMAIN emailaddress
  AS varchar
   CONSTRAINT emailaddress_check CHECK (((VALUE)::text ~ E'^[a-z0-9]+([_\\.-][a-z0-9]+)*@([a-z0-9]+([.-][a-z0-9]+)*)+\\.[a-z]{2,}$'::text));

Vervolgens maak je een tabel aan waarin je ook een kolom van het datatype 'emailaddress'. Hierin zet je alle emailadressen en klaar ben je. Geef je een ongeldig emailadres op, zal de database keurig een foutmelding geven op de query.
Deze functie zal best werken maar heel omslachtig.


$veld0=mysql_result($result,$i,"id");
$veld1=mysql_result($result,$i,"veld1");
$veld2=mysql_result($result,$i,"veld2");
$veld3=mysql_result($result,$i,"veld3");
$veld4=mysql_result($result,$i,"veld4");
$veld5=mysql_result($result,$i,"veld5"); #email adres
$veld6=mysql_result($result,$i,"veld6");
$veld7=mysql_result($result,$i,"veld7");
$veld8=mysql_result($result,$i,"veld8");
$veld9=mysql_result($result,$i,"veld9");
$veld10=mysql_result($result,$i,"veld10");
$veld11=mysql_result($result,$i,"veld11");


Dit slaat gewoon nergens op.

edit:
gogo frank Postgres promotie.. Dadelijk gaan we nog denken dat je klanten probeert te werven voor Postgres :P
Frank schreef op 16.03.2007 13:24
Gebruik i.p.v. MySQL een database die zélf controleert of een emailadres wel een emailadres is. In bv. PostgreSQLkun je zelf een datatype aanmaken:

CREATE DOMAIN emailaddress
  AS varchar
   CONSTRAINT emailaddress_check CHECK (((VALUE)::text ~ E'^[a-z0-9]+([_\\.-][a-z0-9]+)*@([a-z0-9]+([.-][a-z0-9]+)*)+\\.[a-z]{2,}$'::text));

Vervolgens maak je een tabel aan waarin je ook een kolom van het datatype 'emailaddress'. Hierin zet je alle emailadressen en klaar ben je. Geef je een ongeldig emailadres op, zal de database keurig een foutmelding geven op de query.


Hoort zoiets niet in de code zélf te gebeuren, in plaats van dat je de logica op de database afschuift ? Omgekeerde wereld lijkt me.

Reageren