# Formular Prüfen auf Emailadresse



## LexusTheSecond (10. Oktober 2004)

Hi.
Ich habe die suche schon benutzt aber nichts passendes gefunden.
Also. Ich habe eine Startseite in PHP. Dort gibt es ein Formular wodrin man seine Emailadresse eingeben muss (für den Newsletter) und dann auf Abschicken (Absenden) Button klickt. Klappt alles einsa, die Adresse wird in die Datenbank eingetragen und es wird auch kontrolliert ob nicht die Adresse eingetragen ist.
Jetzt wollte ich dass man nicht irgendein ,,Mist" reinschreiben kann.
Also bräuchte ich einen kurzen Code (kann ein ganz einfacher sein) der überprüft ob ein @ und ein . in der Eingabe vorhanden ist. Wenn nein soll er den User darauf aufmerksam machen (Also mit Echo das könnte ich aber auch selbst   ).


----------



## SilentWarrior (10. Oktober 2004)

Ich glaube, da habe ich genau das richtige für dich: http://www.tutorials.de/forum/showthread.php?t=8823.


----------



## LexusTheSecond (10. Oktober 2004)

Danke für deine Schnelle Antwort, aber das funtzt leider nicht mir meinen Formular weiss leider nicht warum, es erscheint aber auch keine Fehlermeldung.


----------



## redlama (11. Oktober 2004)

Versuchs mal damit:

```
function verifyemail($email)
{
  if (eregi("^[0-9a-z]([-_.]?[0-9a-z])*@[0-9a-z]([-.]?[0-9a-z])*\\.[a-z]{2,3}$", $email, $check))
    return TRUE;
  else
    return FALSE;
}

//Absender-Emailadresse prüfen - "EMail" ist dabei der Name vom E-Mail <input>
if($_REQUEST_ENTL[EMail])
  if(verifyemail($_REQUEST_ENTL[EMail]) != TRUE)
    $error[] = "Ihre E-Mailadresse <b>$_REQUEST_ENTL[Email]</b> ist ungültig.";
```

redlama


----------



## Nils Hitze (11. Oktober 2004)

LexusTheSecond hat gesagt.:
			
		

> Danke für deine Schnelle Antwort, aber das funtzt leider nicht mir meinen Formular weiss leider nicht warum, es erscheint aber auch keine Fehlermeldung.




Es *funktioniert* nicht .. nicht es *funtzt* nicht.

Bitte bitte .. mein Gehirn leidet so unter diesem Wort.


----------



## SilentWarrior (11. Oktober 2004)

> Es funktioniert nicht .. nicht es nicht.
> 
> Bitte bitte .. mein Gehirn leidet so unter diesem Wort.


Tja, dann ersetzt 'funzt' und funtzt' doch einfach durch 'funktioniert', und schon ist das Problem erledigt.


----------



## meilon (11. Oktober 2004)

Könnte man nicht in das Board einen BBCode einbauen, der dieses und viele andere böse Wörter automatisch in die Duden-Konformen Übersetzungen umwandelt?


----------



## Dj_PD (11. Oktober 2004)

Hi,

ich habe irgendwo mal ein OpenSource-Script gefunden womit man in 3 Stufen eine e-Mail prüfen kann. Da jetzt hier zufällig dieses Thread eröffnet wurde wollte ich ganz gerne mal Fragen ob mir jemand helfen könnte. Ich habe nämlich immer noch das Problem das ich "function" sehr kompliziert finde. Ich weiß absolut nicht wie ich die "function" vernüftig ausgeben lassen kann.

Ich möchte den Code genau so haben wie auf der Seite wo es den Code gibt.
www.ljweb.com
Ich habe der Person schon eine eMail geschrieben, aber da mein English so schlecht ist, habe ich das Gefühl als wenn er mich nicht verstanden hätte.
Das Script heißt: verifyemail_lib.php Direcktlink

Hier erst einmal der Code:

```
function verifyemail_validateemail($email) {
		if (!preg_match("/^([\w|\.|\-|_]+)@([\w||\-|_]+)\.([\w|\.|\-|_]+)$/i", $email)) {
			return false;
			exit;
		}

		return true;
	}


	function verifyemail_validatehost($email, $return_mxhost=0) {
		if (!verifyemail_validateemail($email)) {
			return false;
			exit;
		}

		list($local,$domain) = explode("@",$email,2);

		$mxhosts = array();
		if(!checkdnsrr($domain, "MX") || !getmxrr($domain, $mxhosts)) {
			return false;
			exit;
		}

		if ($return_mxhost) {
			return $mxhosts;
			exit;
		}

		return true;
	}


	function verifyemail_validateexists($email) {
		$mxhosts = verifyemail_validatehost($email, true);

		if (!is_array($mxhosts)) {
			return false;
			exit;
		}

		$found = false;
		$localhost = verifyemail_localhost();

		$mxsize = sizeof($mxhosts);
		for($i=0; $i<$mxsize; $i++)	{
			$socket = fsockopen($mxhosts[$i], 25);

			if(!$socket) continue;

			$foo = fgets($socket, 4096);

			# 220 <domain> Service ready
			if(!preg_match("/^220/i", $foo)) {
				verifyemail_closesocket($socket);
				continue;
			}

			fputs($socket, "HELO ".$localhost."\r\n");
			$foo = fgets($socket);
			while (preg_match("/^220/i", $foo)) {
				$foo = fgets($socket, 4096);
			}

			fputs($socket, "VRFY ".$email."\r\n");
			$foo = fgets($socket, 4096);

			# 250 Requested mail action okay, completed
			if(preg_match("/^250/i", $foo)) {
				$found = true;
				verifyemail_closesocket($socket);

				break;
			}

			# 550 Requested action not taken: mailbox unavailable [E.g., mailbox not found, no access]
			if(preg_match("/^550/i", $foo)) {
				verifyemail_closesocket($socket);
				continue;
			}

			fputs($socket, "MAIL FROM: <".$email.">\r\n");
			$foo = fgets($socket, 4096);

			fputs($socket, "RCPT TO: <".$email.">\r\n");
			$foo = fgets($socket, 4096);

			# 250 Requested mail action okay, completed
			# 251 User not local; will forward to <forward-path>
			if(preg_match("/^[250|251]/i", $foo)) {
				$found = true;
				verifyemail_closesocket($socket);

				break;
			}

			verifyemail_closesocket($socket);
		}

		return $found;
	}


	function verifyemail_closesocket($socket) {
		fputs($socket, "QUIT\r\n");
		fclose($socket);

		return true;
	}


	function verifyemail_localhost() {
		$localhost = getenv("SERVER_NAME");
		if (!strlen($localhost)) $localhost = getenv("HOST");

		return $localhost;
	}
?>
```


Dann habe ich eine Frage. Auf der Seite steht ja folgendes:
Notice :
Level 2 and 3 checking uses UNIX specific commands

Kann ich das auch auf einen ApacheServer ausführen lassen?
Ich könnte es ja noch nicht testen, da ich ja nicht weiß wie man die "function" ausführt.

Vielleicht hilft mir ja jemand, der sich damit auskennt.
Und vielleicht findet ja jemand dieses Script auch interessant und kann es gebrauchen.

Gruss
Dj_PD


----------



## LexusTheSecond (11. Oktober 2004)

redlama hat gesagt.:
			
		

> Versuchs mal damit:
> 
> ```
> function verifyemail($email)
> ...



Danke es hat geklappt *hurra*   
Und @Nils Hitze. Entschuldigung ich werde mir jetzt vornemen das ,,böse" Wort aus meinen Wortschatz zu streichen.


----------



## metty (12. Oktober 2004)

Ich habe auch mal eine email Adressen Validierung programmiert, die ich euch natürlich nicht vorenthalten will 


```
<?php
$checkemail = eregi( "^" .
               "[a-z0-9]+([_\\.-][a-z0-9]+)*".   	//user
               "@".					//@ zeichen
               "([a-z0-9]+([\.-][a-z0-9]+)*)+".  	//domain
         "\\.([a-z]{2}|aero|arpa|biz|com|coop|edu|gov|info|int|mil|museum|name|nato|net|org|pro)" .	//sld, tld
               "$", $_POST['email']);

if (!$checkemail)
{
	echo "<p>Bitte eine korrekte Email Adresse eingeben.</p>";
}
?>
```



Viel Erfolg


----------



## LexusTheSecond (12. Oktober 2004)

@kniedel

Und wie kann ich wenn er jetzt geprüft hat den User wieder auf die Homepage umleiten ohne dass der nachfolgende PHP Code (Also die weiter anmeldung) weitergeführt wird.


----------



## metty (12. Oktober 2004)

```
//...validierung....

if (!$checkemail)
{
    echo "<p>Bitte eine korrekte Email Adresse eingeben.</p>";
    // Email Adresse wird nicht in die Datenbank eingetragen
    // eventuell ein zurücklink
} else
{
     // Email Adresse wird in die Datenbank eingetragen, header auf "Danke" Seite oder so
}
```


oder was meinst du jetzt?


----------



## D-LuX (12. Juli 2007)

kniedel hat gesagt.:


> Ich habe auch mal eine email Adressen Validierung programmiert, die ich euch natürlich nicht vorenthalten will
> 
> 
> ```
> ...


Genau das hab ich gesucht!
Funktioniert einwandfrei, top!!

Danke!


----------



## CIX88 (12. Juli 2007)

Dann nimm wenigsten die veraltete eregi-Funktion raus, ersetze es mit preg_match() und Modifer i.


----------

