Script wat in mysql db checkt of email adressen vaild zijn

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

OMEGA_ReD

OMEGA_ReD

16/03/2007 11:22:00
Quote Anchor link
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
 
PHP hulp

PHP hulp

20/11/2024 12:21:40
 
Robert Deiman

Robert Deiman

16/03/2007 11:25:00
Quote Anchor link
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.
 
Jurgen assaasas

Jurgen assaasas

16/03/2007 11:28:00
Quote Anchor link
je zou een regex kunnen combineren met een SQL loopje... ik gheb geen verstand van regexen maar ik kan je wel een voorbeeld geven.


Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?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.
Gewijzigd op 01/01/1970 01:00:00 door Jurgen assaasas
 
OMEGA_ReD

OMEGA_ReD

16/03/2007 12:25:00
Quote Anchor link
Bedankt voor de snelle reactie!

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
<?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.
Gewijzigd op 01/01/1970 01:00:00 door OMEGA_ReD
 
Jurgen assaasas

Jurgen assaasas

16/03/2007 12:34:00
Quote Anchor link
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
 
OMEGA_ReD

OMEGA_ReD

16/03/2007 12:44:00
Quote Anchor link
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)
 
OMEGA_ReD

OMEGA_ReD

16/03/2007 12:44:00
Quote Anchor link
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.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<? if(!eregi("^[a-zA-Z0-9_]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-\.]+$]","[email protected]")){

echo 'niet valid';

}
else{
echo 'valid';

}

?>
Gewijzigd op 01/01/1970 01:00:00 door OMEGA_ReD
 
OMEGA_ReD

OMEGA_ReD

16/03/2007 13:18:00
Quote Anchor link
ik heb nog een ander script gebruikt, deze heb ik werkend gekregen:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
<?
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;
}


?>
Gewijzigd op 01/01/1970 01:00:00 door OMEGA_ReD
 
Frank -

Frank -

16/03/2007 13:24:00
Quote Anchor link
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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
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.
Gewijzigd op 01/01/1970 01:00:00 door Frank -
 
Jurgen assaasas

Jurgen assaasas

16/03/2007 13:25:00
Quote Anchor link
Deze functie zal best werken maar heel omslachtig.

Quote:
$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
Gewijzigd op 01/01/1970 01:00:00 door Jurgen assaasas
 
Willem-Aart

Willem-Aart

16/03/2007 13:31:00
Quote Anchor link
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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
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.
 
OMEGA_ReD

OMEGA_ReD

16/03/2007 13:37:00
Quote Anchor link
Hoe zou jij het dan doen?
Ben er wel benieuwd naar, kan ik van leren :>

Bedankt!!
 
Jurgen assaasas

Jurgen assaasas

16/03/2007 13:37:00
Quote Anchor link
Eigenlijk niet. De database is veel beter in het controleren van zijn velden dan PHP.


edit:
Als je er van wil leren zou ik eerst maar eens in basisfuncties gaan verdiepen zoals eenvoudige tellers, en als dat lukt iets van nieuwsystemen gevolgd door loginsystemen.

Als je dat allemaal snapt komt je hier moeiteloos uit denk ik zo. mijn code dat ik gemaakt hebt(Niet getest!) heb ik zo ff in 2 minuten getypt.
Gewijzigd op 01/01/1970 01:00:00 door Jurgen assaasas
 
Frank -

Frank -

16/03/2007 13:46:00
Quote Anchor link
@Willem-Aart: Hoezo omgekeerde wereld? Jij wilt toch een emailadres opslaan, of niet dan? Sla dit dan op in een kolom van het datatype 'emailaddress'.

Waarom roep je met een datum wel dat je dit in een DATE moet opslaan en niet in een VARCHAR, maar zeg je met een emailadres dat dit gewoon in een VARCHAR moet komen? Dát lijkt mij pas de omgekeerde wereld.

Dat jij zelf een datatype aanmaakt, doet niets af aan de vorm van de data. Zo zou je bv. ook een datatype 'postcode_nl' kunnen maken om nederlandse postcodes in op te slaan. Je weet dan 100% zeker dat daar een code in komt te staan die valide is. Of de postcode bestaat is een ander verhaal, dát is een check die je elders uitvoert, dat heeft namelijk niets te maken met het datatype.

Voordeel is ook dat wanneer meerdere systemen van dezelfde database gebruik maken, er helemaal niemand is die corrupte data in de database kan wegschrijven. Een emailaddress is een emailaddress en een postcode_nl is een postcode_nl. Ongeacht wat de programmeurs van de diverse systemen in gedachten hebben.
 
OMEGA_ReD

OMEGA_ReD

16/03/2007 16:19:00
Quote Anchor link
Jurgen schreef op 16.03.2007 13:37:
Eigenlijk niet. De database is veel beter in het controleren van zijn velden dan PHP.


edit:
Als je er van wil leren zou ik eerst maar eens in basisfuncties gaan verdiepen zoals eenvoudige tellers, en als dat lukt iets van nieuwsystemen gevolgd door loginsystemen.

Als je dat allemaal snapt komt je hier moeiteloos uit denk ik zo. mijn code dat ik gemaakt hebt(Niet getest!) heb ik zo ff in 2 minuten getypt.


Oke begrijp ik maar ik zou wel willen weten hoe ik mijn mysql dmv een query moet zeggen dat hij velden met niet corecte email adressen moet selecteren.

Ik gebruik normaal ook query's om dit soort dingen te doen, maar in dit geval weet ik geen andere oplossing.
 
Jurgen assaasas

Jurgen assaasas

16/03/2007 16:47:00
Quote Anchor link
Mijn script geeft een deelse oplossing dit is PHPhulp en niet PHPkauwmijcodevoor dus zou je zelf ook wel beetje moeten gaan stoeien met de code.
 
OMEGA_ReD

OMEGA_ReD

16/03/2007 17:01:00
Quote Anchor link
Jurgen schreef op 16.03.2007 16:47:
Mijn script geeft een deelse oplossing dit is PHPhulp en niet PHPkauwmijcodevoor dus zou je zelf ook wel beetje moeten gaan stoeien met de code.


ja dat snap ik ook, ik waardeer het ook enorm dat jij/jullie me gehoplen heb(ben).

Maar uiteindelijk heb ik toch door zoeken en zelf coden een oplossing gevonden. (uiteraard met jullie hulp) En ik heb ook echt lang met codes geklooid geoof me haha.

En jij zegt uiteindelijk dat wat ik gemaakt heb een "lelijke oplossing" is. Dan maak je mij en misschien andere die deze post lezen natuurlijk nieuwschierig naar jouw oplossing. En van jouw oplossing kan ik en misschien andere leren.

bedankt!
Gewijzigd op 01/01/1970 01:00:00 door OMEGA_ReD
 
Mr D

Mr D

16/03/2007 17:20:00
Quote Anchor link
de check of een email adres valid is kan mysql ook uitvoeren. kijk hiervoor in de handleiding bij REGEXP
 
OMEGA_ReD

OMEGA_ReD

16/03/2007 22:40:00
Quote Anchor link
Iets in deze richting?
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
SELECT * FROM `table_name` WHERE Email REGEXP '^[A-Z0-9._%-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$')

Toch is het wel mooi dat het php script kijkt of de domein namen bestaan, duurt even maar werkt wel!
 
Frank -

Frank -

17/03/2007 13:30:00
Quote Anchor link
@Mr D: Je kunt in MySQL geen constraint aanmaken die bij het invoeren van data automatisch checkt of de data wel bv. een emailadres is.

Het is weinig zinvol om eerst een query naar de database te sturen die controleert of de input correct is en op basis van dit resultaat een andere query naar de database sturen om de data ook op te gaan slaan. Wanneer je het op deze manier aanpakt, ben je wel verplicht om een functie in MySQL te schrijven (geen probleem, ik doe in PostgreSQL niet anders) maar desondanks blijft het erg eenvoudig om de data te vernaggelen. Je kunt namelijk altijd met een INSERT INTO de hele boel om zeep helpen. Dat is in PostgreSQL met het gebruik van een check-constraint onmogelijk.

PostgreSQL is dus in staat om de data op de juiste manier te beschermen. En dat is precies wat je verwacht van een dbms!
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.