Profil | Mitglieder | Registrieren | Start | Suche


PHP-Support.de » Programmierung » PHP & MySQL » Codeschnipsel » Email bannen und überprüfen (V1.0.3)    » Hallo Gast [Login | Registrieren]

Neues Thema | Antworten   

Autor Beitrag
Teralios
Moderator
Perfekter User


Dabei seit: 18.09.2005
Herkunft: Berlin
Posts: 2542
     Email bannen und überprüfen (V1.0.3) Zitat | Bearbeiten

Ich habe eine einfache Funktion geschrieben, womit ihr Emails aus euren Gästebüchern bannen könnt.
Zusehen ist die Funktion hier:
 PHP 
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:
<?php
function isValidMail($email$banList null) {
    
//Reguläre Ausdrücke für Emails
    
$EmailPattern  '#^[a-zA-Z0-9_.-]+@([a-zA-Z0-9_.-]+\.)+[a-zA-Z]{2,4}$#si';
    
$DomainPattern '([a-zA-Z0-9_.-]+\.)+[a-zA-Z]{2,4}';
    
$NamePatter    '[a-zA-Z0-9_.-]+';
    
    
$email trim($email);

    
//Überprüft die Emailadresse
    
if (!preg_match($EmailPattern$email)) {
        return 
false;
    }
    
    
//Wenn die Email richtig war und eine bestimmte Banliste gesetzt wurde.
    
if (!is_null($banList)) {
        if (
is_array($banList)) {
            foreach(
$banList AS $banEmail) {
                
                
//Bereitet die Email auf.
                
$banEmail addcslashes($banEmail".");
                
$banEmail preg_replace('#\{name\}#si'$NamePatter$banEmail);
                
$banEmail preg_replace('#\{domain\}#si'$DomainPattern$banEmail);
                
$banEmail "#^".$banEmail."$#si";
                
                
//Prüft ob die Email gebannt wurde.
                
if (preg_match($banEmail$email)) {
                    return 
false;
                }    
            }
        }
        else {
            
//Bereitet die Email auf.
            
$banEmail addcslashes($banList".");
            
$banEmail preg_replace('#\{name\}#si'$NamePatter$banEmail);
            
$banEmail preg_replace('#\{domain\}#si'$DomainPattern$banEmail);
            
$banEmail "#^".$banEmail."$#si";
            
            
//Prüft ob die Email gebannt wurde.
            
if (preg_match($banEmail$email)) {
                return 
false;
            }
        }        
    }
    return 
true;
}
?>

Diese Funktion überprüft eine Email, ob sie überhaupt existieren kann, und dannach auf, von euch bestimmte Emails, die nicht erwünscht sind. Und das passiert in drei Typen.
1. Die ganze Email:
webmaster@test.de speert auch nur webmaster@test.de oder Webmaster@test.de usw.
2. Nur mit einem bestimmten Namen von allen Anbietern:
webmaster@{domain} speert Emails wie:
webmaster@gmx.de
webmaster@gmail.com
webmaster@web.de

3. Alle von einem bestimmten Anbieter:
{name}@gmx.de speert alle Emails die von gmx.de gesendet werden könnten.

Die Anwendung ist relativ simpel. Der erste Parameter enthält die Email, die überprüft werden soll, die Zweite enthält die Emails die gespeert wurden. Dies kann eine Einzelne sein, oder mehrer.
Ist alles Inordnung mit der Email, gibt die Funktion true (wahr/1) zurück. Ist die Email von euch gebannt worden, oder nicht korrekt, gibt die Funktion false (unwahr/0) zurück.

Beispiel für die Anwendung.
 PHP 
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
<?php
$email 
$_POST['email'];

//Eine Email speeren.
if (!isValidMail($email'{name}@ro.tk.ru')) {
    echo 
'Sie haben eine falsche oder gebannte Emailadresse angeben.';
}
//Speert alle emails die auf ro.tk.ru enden.

//Mehrer Emails speeren.
$ban = array('{name}@ro.tk.ru''spammer@{domain}''webmaster@gmx.de');
if (!
isValidMail($email$ban)) {
    echo 
'Sie haben eine falsche oder gebannte Emailadresse angeben.';
}
/* Speert alle emails die mit spammer@ anfangen oder auf @ro.tk.ru enden, oder die Email webmaster@gmx.de */
?>


An diese Funktion muss ein Parameter übergeben werden. Nämlich die Email zum überprüfen. Solltet ihr keine Emails bannen wollen, so lasst den zweiten Parameter leer. Ruft die Funktion in dem Fall in folgender Form auf:
 PHP 
1:
2:
3:
4:
5:
6:
7:
<?php
$email 
$_POST['email'];
if (!
isValidMail($email)) {
    echo 
'Ihre Email kann nicht exestieren';
}
//Die Email ist nicht existentsfähig, da es eine Spaßemail ist, oder ein Text oder sonst was, nur keine Email.
?>


--Update--
1.0.1 Hab vergessen den Punkt zu maskieren für die Regpex, dies wird jetzt gemacht und so steht der Punkt nicht mehr für ein Beliebiges Zeichen.
Unötige Variabel gelöscht.
1.0.2 Emailpattern überarbeitet so das auch - und . erkannt wird.
1.0.3 "#^$banMail$#si" in "#^".$banMail."$#si" geändert. (Kleiner Preformancesunterschied)




Post wurde schon 11x editiert, das letzte mal am 10.01.2008 um 18:08 von Teralios
30.04.2007, 19:38 Profil | PM | E-Mail  
Benny
Mitglied
Aktiver User


Dabei seit: 01.05.2007
Herkunft: Deutschland
Posts: 205
      Zitat | Bearbeiten

Hi,

sach mal kann man die E-Mailadressen nicht in ner DB abspeichern, und dann einfach in dem Script abfragen lassen? Dann könnt ich das in meinem Gb mit ins Admin Panel und Mod Panel intregrieren, und es währe leichter e-mailadressen einzutragen die gebannt werden sollen.

Benny


24.05.2007, 13:47 Profil | PM | E-Mail  
Teralios
Moderator
Perfekter User


Dabei seit: 18.09.2005
Herkunft: Berlin
Posts: 2542
      Zitat | Bearbeiten

Das ist exta eine Funktion die über Variabeln gesteuert wird, du kannst somit ein array erstellen mit den Emails die gebannt werden, woher das array kommt ist dabei egal.


24.05.2007, 15:08 Profil | PM | E-Mail  
Benny
Mitglied
Aktiver User


Dabei seit: 01.05.2007
Herkunft: Deutschland
Posts: 205
      Zitat | Bearbeiten

Hi,

aha ok werds versuchen

Benny


24.05.2007, 15:16 Profil | PM | E-Mail  
Gast


      Zitat | Bearbeiten

Du könntest die Email-Adresse auch in verschiedenen Spalten speichern lassen... also quasi das vor dem @ und nach dem @ getrennt speichern

lg


25.05.2007, 16:46  
Gast


     db based .. Zitat | Bearbeiten

hi,

wenn das ganze via db gehen würde hätt ich auch interesse daran und würd das ganze in meine community integrieren


30.05.2007, 01:19  
Teralios
Moderator
Perfekter User


Dabei seit: 18.09.2005
Herkunft: Berlin
Posts: 2542
      Zitat | Bearbeiten

Wie oft noch, es ist eine Funktion, wie ihr das Array ertellt ist doch EGAL.

 PHP 
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
<?php
$banmails 
= array();

$result mysql_query('SELECT `mails` FROM `banemails`');
while(
$row mysql_fetch_row($result)) {
    
$banmails[] = $row[0];
}

$email $_POST['email'];

if(!
isValidMail($email$banmails)) {
    echo 
'Ihre Email ist ungültig oder gebannt';
}
?>


wie ihr das Array erstellt, was als zweiten Parameter übergebt ist doch vollkommen egal. Die gebannten Emails müssen nur als Numerisches Array übergeben werden an die Funktion:

 PHP 
1:
2:
3:
4:
5:
6:
<?php
$banmail
[0] = '{name}@gmx.de';
$banmail[1] = 'test@{domain}';
$banmail[2] = 'test@nic.de';
$banmail[3] = 'webmaster@{domain}';
?>


Das ist die einige Form die eingehalten werden muss. Entweder nur eine Email => Direkt eingabe oder direkt Variabel, oder ein Array, welches all die gebannten Emails enthält. Das darf aber nicht assozativ sein.




Post wurde schon 1x editiert, das letzte mal am 05.01.2009 um 21:30 von Teralios
30.05.2007, 08:23 Profil | PM | E-Mail  
Gast


      Zitat | Bearbeiten

 PHP 
1:
2:
3:
<?php
$banmails 
mysql_fetch_assoc(mysql_query('SELECT `mails` FROM `banemails`'));
?>

hätts auch getan ^^


02.06.2007, 19:02  
Teralios
Moderator
Perfekter User


Dabei seit: 18.09.2005
Herkunft: Berlin
Posts: 2542
      Zitat | Bearbeiten

Zitat:
Orginal von Gast
 PHP 
1:
2:
3:
<?php
$banmails 
mysql_fetch_assoc(mysql_query('SELECT `mails` FROM `banemails`'));
?>

hätts auch getan ^^

nicht wenn mehr als 1 datensatz in der liste vorhanden sind.


02.06.2007, 19:16 Profil | PM | E-Mail  
Gast


      Zitat | Bearbeiten

Hallo,

erstmal danke GameR für die coole Funktion. Hat bei mir schon echt einiges gebracht.

Nun aber meine Frage:
Wenn ich z.B. die E-Mail-Adresse "beispiel@exa-mple.com" eingebe, sagt mir die Funktion, dass die E-Mail-Adresse ungültig ist. Wenn ich aber "beispiel@example.com" eingebe, dann ist sie gültig.

Wie muss ich den "EmailPattern" da verändern, dass Bindestriche in der Domain erlaubt sind?

Gruß




Post wurde schon 2x editiert, das letzte mal am 06.11.2007 um 20:48 von Andavos
16.08.2007, 11:53  
Teralios
Moderator
Perfekter User


Dabei seit: 18.09.2005
Herkunft: Berlin
Posts: 2542
      Zitat | Bearbeiten

Zitat:
Orginal von Gast
Hallo,

erstmal danke GameR für die coole Funktion. Hat bei mir schon echt einiges gebracht.

Nun aber meine Frage:
Wenn ich z.B. die E-Mail-Adresse "beispiel@exa-mple.com" eingebe, sagt mir die Funktion, dass die E-Mail-Adresse ungültig ist. Wenn ich aber "beispiel@example.com" eingebe, dann ist sie gültig.

Wie muss ich den "EmailPattern" da verändern, dass Bindestriche in der Domain erlaubt sind?

Gruß

Danke für den Hinweis, ich habs direkt überarbeitet.
in [a-zA-Z0-9_] gehört noch ein - oder .- damit das sieht dann so aus [a-zA-Z0-9_.-] dann erkennt er auch Emails mit - dazwischen.
danke für den Hinweis.




Post wurde schon 2x editiert, das letzte mal am 06.11.2007 um 20:48 von Andavos
16.08.2007, 13:11 Profil | PM | E-Mail  
Gast


      Zitat | Bearbeiten

Hallo,

ich möchte NUR überprüfen ob die Endung auf der Bannliste steht, sprich erlaubt ist:

.de, .com, .org, .net, .at, .ch, .biz

alle anderen Endungen dürfen NICHT verwended werden.

Ich möchte mein Forumal etwas sicherer machen gegen Spambots, erst wird mit JavaScript geprüft und dann nochmals mit php und ein Capcha, alles funzt bis auf das mit der e-mailendungen in php


05.06.2008, 17:04  
Gast


      Zitat | Bearbeiten

Zitat:
Orginal von Gast
Hallo,

ich möchte NUR überprüfen ob die Endung auf der Bannliste steht, sprich erlaubt ist:

.de, .com, .org, .net, .at, .ch, .biz

alle anderen Endungen dürfen NICHT verwended werden.

Ich möchte mein Forumal etwas sicherer machen gegen Spambots, erst wird mit JavaScript geprüft und dann nochmals mit php und ein Capcha, alles funzt bis auf das mit der e-mailendungen in php


Wurde schon drauf geantwortet: klick mich!


06.06.2008, 00:49  
grillmeister
Mitglied
Neuling


Dabei seit: 04.01.2009
Herkunft: Schweiz
Posts: 1
      Zitat | Bearbeiten

Hallo, besten dank für ein gutes Tutorial.

Habe den Schnipsel bei meinem Projekt eingebaut: www.ch-cms.ch

Der Tutorial Autor hat sich einen Platz im Quellcode verdient mit seinem Copyright, das bei Version 3.0 drinnen stehen wird.

Noch ein kleiner Fehler das ich gefunden habe:

 PHP 
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
<?php
$banmails 
= array();

$result mysql_query('SELECT `mails` FROM `banemails`');
while(
$row mysql_fetch_row($result)) {
    
$banmails[] = $row[0];
}

$email $_POST['email'];

if(!function 
isValidMail($email$banmails)) {
    echo 
'Ihre Email ist ungültig oder gebannt';
}
?>


!function kann man rausnehmen, da es bei PHP5 Versionen nicht mehr braucht, musste jetzt !isValidMail(... machen.

Gruss


04.01.2009, 15:50 Profil | PM | E-Mail  
Teralios
Moderator
Perfekter User


Dabei seit: 18.09.2005
Herkunft: Berlin
Posts: 2542
      Zitat | Bearbeiten

Danke, der Fehler hat sich eingeschlichen, da ich nur kopiert habe. Es stimmt absolut: !isValidMail




05.01.2009, 21:28 Profil | PM | E-Mail  
Seiten (1):  1 
PHP-Support.de » Programmierung » PHP & MySQL » Codeschnipsel » Email bannen und überprüfen (V1.0.3)   

Neues Thema | Antworten   


Powered by Command Board 1.0 - Beta 2.0 © 2004-08 PHP-Einfach | Impressum | Datenschutz