mediengestalter.info
FAQ :: Mitgliederliste :: MGi Team

Willkommen auf dem Portal für Mediengestalter

Aktuelles Datum und Uhrzeit: Sa 20.04.2024 10:17 Benutzername: Passwort: Auto-Login

Thema: E-Mail Validierung in PHP vom 27.02.2005


Neues Thema eröffnen   Neue Antwort erstellen MGi Foren-Übersicht -> Programmierung -> E-Mail Validierung in PHP
Autor Nachricht
Njelo
Threadersteller

Dabei seit: 18.07.2003
Ort: Leonberg
Alter: 43
Geschlecht: Männlich
Verfasst So 27.02.2005 14:26
Titel

E-Mail Validierung in PHP

Antworten mit Zitat Zum Seitenanfang

Hallo an alle Sonntagsschaffer,

zerreist mich wegen des dilletantischen Codes und der Sauklauen-Syntax...aber ich hab das Script ja auch nur als freeware übernommen. Das Einzige, was mir zu meinem Glück noch fehlt, ist eine akzeptable E-Mail-Adress-Validierung. Kein DNS-Check-Schnick-Schnack. Nur ne reguläre Syntax-Abfrage. Wäre toll, wenn mir jemand helfen könnte....#
Ich hab da zwar was reingebastelt (fett) - aber das will net so recht.
Immerhin haben jetzt die PHP-Cracks was zum Lachen... Ooops

nvform.php
Zitat:
<?php


/* $sendto is the email where form results are sent to */
$sendto = "info@tralalalaa.de";

/* $ccto is the email where form results can be carbon copied to */
$ccto = "admin@meinedomain.de";

/*
O P T I O N A L V A R I A B L E S
*/


$setokurls = "1";

$okurls = "http://www.tralalalaa.de";

/*

N O N E E D T O E D I T A N Y V A R I A B L E S B E L O W

*/


$backbutton = "<br><br><b>Bitte geben Sie Ihre Daten erneut ein.</b>";



/* check to see if posted */
if ($HTTP_GET_VARS || ! $HTTP_POST_VARS || $_GET || ! $_POST) {
include("nverror.php");
no_pst();

}else{


/* IF OLDER VERSION OF PHP CONVERT TO NEWER VARIABLES */
if (! $_POST) {
$_POST = "$HTTP_POST_VARS";
}

if (! $_SERVER) {
$_SERVER = "$HTTP_SERVER_VARS";
}


$year = date("Y");
$month = date("m");
$day = date("d");
$hour = date("h");
$min = date("i");
$tod = date("a");


$ip=$_SERVER["REMOTE_ADDR"];

$SEND_prnt = "Diese e-Mail wurde abgeschickt von" . $_POST{"email"} . "mit der IP Addresse: $ip am $monthnameactual $month/$day/$year um $hour:$min $tod \n";
$SEND_prnt .= "-------------------------------------------------------------------------\n\n";


/* CHECK TO SEE IF $_POST{"required"} IS SET */
if ($_POST{"required"}){


$post_required = $_POST{"required"};
$required = split(",", $post_required);
$reqnum = count($required);

for ($req=0; $req < $reqnum; $req++) {

$REQ_name = $required[$req];
$REQ_value = $POST{"$REQ_name"};


if ($REQ_name == "email") {
$goodem = preg_match("/^( [a-zA-Z0-9] )+( [a-zA-Z0-9\._-] )*@( [a-zA-Z0-9_-] )+( [a-zA-Z0-9\._-] +)+$/" , $trashed);


if (! $goodem) {
include("nverror.php");
msng_email();
} /* end ! $goodem */

}
elseif (! $_POST{"$REQ_name"}) {
$isreqe = "1";
$REQ_error .= "<li> $REQ_name ";
} /* end ! req val */

} /* end REQ for loop */


/* IF THERE ARE ANY REQUIRED FIELDS NOT FILLED IN */

if ($isreqe == "1") {
include("nverror.php");
msng_required();
}

} /* END CHECK TO SEE IF $_POST{"required"} IS SET */


/* END IF THERE ARE ANY REQUIRED FIELDS NOT FILLED IN */


/* GET POSTED VARIABLES */


foreach ($_POST as $NVPOST_name => $NVPOST_value) {

/* GET LEADS EMAIL */

$email_lower = strtolower($NVPOST_name);

if ($email_lower == "email") {
$SEND_email = "$NVPOST_value";
}

/* END GET LEADS EMAIL */

if (! $_POST{"sort"}) {


/* CHECK TO SEE IF CONFIG FIELD */
if ($NVPOST_name == "subject" || $NVPOST_name == "sort" || $NVPOST_name == "required" || $NVPOST_name == "success_page"){}else{
$SEND_prnt .= "$NVPOST_name: $NVPOST_value \n";
}
} /* end ! sort */


} /* end foreach */


/* END GET POSTED VARIABLES */




if ($_POST{"sort"}) {

/* SORT VARIABLES */

$sortvars = split(",", $_POST{"sort"});
$sortnum = count($sortvars);

for ($num=0; $num < $sortnum; $num++) {
$SEND_prnt .= "$sortvars[$num]: " . $_POST{"$sortvars[$num]"} . " \n";
}

} /* END SORT VARIABLES */




/* send mail */


if (! $ccto) {
$header = "From: $SEND_email\r\nReply-to: $SEND_email";
}else{
$header = "From: $SEND_email\r\nReply-to: $SEND_email\r\nCc: $ccto";
}


mail($sendto, $_POST{"subject"}, $SEND_prnt, $header);

/* END sendmail */

/* CHECK TO SEE IF FORM SPECIFYS A SUCCESS PAGE */
if (! $_POST{"success_page"}) {

include("nverror.php");
default_success();

}else{
$successpage=$_POST{"success_page"};
header("Location: $successpage"); /* redirect */
exit;
}



} /* END IF POSTED */


?>


und nverror.php
Zitat:
<?php
/* START ERROR FUNCTIONS */

function default_success() {
?>

<html>
<head>
<title>Vielen Dank!</title>
<style type="text/css">
body
{
background-image:
url(/Pics/bg.gif);
background-repeat:
no-repeat;
background-position:
center 40px;
}
</style>
</head>
<body>
<BR><BR><CENTER>
<h2><font size="3" face="Verdana, Arial, Helvetica, sans-serif"><b>Vielen Dank!<br>
Wir haben Ihre Anfrage entgegengenommen.</b></font></h2>

</CENTER>

exit;
} /* end function: "default_success" */




function no_pst() {
?>

<html>

<head>
<br><br>
</td></tr></table>
</center>

</body></html>

<?php
exit;
} /* end function: "no_pst" */



function msng_email() {

$title = "<title>Fehlende oder fehlerhafte E-Mail-Adresse</title>";
$errormessage = "<h2>Fehlende oder fehlerhafte E-Mail-Adresse</h2><b>Um die Anfrage bearbeiten zu können, wird eine korrekte E-Mail-Adresse benötigt</b>";

echo "$title";
echo "$errormessage";
echo "$backbutton";
exit;

} /* end function: "msng_email" */




function msng_required() {

$title = "<title>Es wurden nicht alle notwendigen Angaben gemacht.</title>";
$errormessage = "<h2>Fehlende Angaben</h2><b>Bitte ergänzen Sie Ihre Angaben auf der vorigen Seite</b><br><br>$REQ_error";

echo "$title";
echo "$errormessage";
echo "$backbutton";
exit;

} /* end function: "msng_required" */

?>



Vielan Dank - Njelo
  View user's profile Private Nachricht senden
eye-fx

Dabei seit: 24.10.2002
Ort: -
Alter: 48
Geschlecht: Männlich
Verfasst So 27.02.2005 15:39
Titel

Antworten mit Zitat Zum Seitenanfang

Du hast recht sieht etwas chaotisch aus. Hier eine Abfrage-Variante die so auf jeden Fall bei
mir funktioniert.

Code:
if( (!ereg("^[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@([a-zA-Z0-9-]+\.)+([a-zA-Z]{2,4})$",$email)) && $email){ //   
 ... hier kommt Dein weitere Code rein ...
}
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
Anzeige
Anzeige
rob

Dabei seit: 11.12.2003
Ort: ~/
Alter: 46
Geschlecht: Männlich
Verfasst Mo 28.02.2005 13:38
Titel

Antworten mit Zitat Zum Seitenanfang

schon wieder die POSIX-kompatiblen RegEx. Die sind viel langsamer als die PERL-kompatiblen und sollten deswegen besser nicht verwendet werden.
  View user's profile Private Nachricht senden
eye-fx

Dabei seit: 24.10.2002
Ort: -
Alter: 48
Geschlecht: Männlich
Verfasst Mo 28.02.2005 16:53
Titel

Antworten mit Zitat Zum Seitenanfang

rob hat geschrieben:
schon wieder die POSIX-kompatiblen RegEx. Die sind viel langsamer als die PERL-kompatiblen und sollten deswegen besser nicht verwendet werden.


Für die meisten Seiten ist das wohl nicht gerade zeitkritisch.
Aber poste doch trotzdem mal ein Beispiel zu Deiner Perl-Kompatiblen Syntax. Würd mich auch interessieren.
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
rob

Dabei seit: 11.12.2003
Ort: ~/
Alter: 46
Geschlecht: Männlich
Verfasst Mo 28.02.2005 17:17
Titel

Antworten mit Zitat Zum Seitenanfang

Also PHP kann die POSIX-kompatiblen RegEx-Funktionen und die PERL-kompatiblen (PREC = Perl Regular Expression Compatiblity) (obwohl es da trotz des Namens in einigen Feinheiten Unterschiede zu PERL gibt).
Bei einfachen RegExen unterscheiden sich die Ausdrücke in der Syntax meist gar nicht. Erst wenn es was komplexer wird, fallen die Unterschiede auf...
Die POSIX-Funktionen sind die mit ereg(), eregi(), ... und die Funktionen, die mit preg_ beginnen, z.B. preg_match(), sind die PREC-Funktionen. Die arbeiten schneller als die POSIX-Funktionen und sollten deswegen wenn möglich den anderen vorgezogen werden.
Natürlich hast du jetzt Recht, wenn du meinst, daß man keinen Unterschied bemerken wird, wenn es sich nur um eine einzige Abfrage handelt. Insofern ist der RegEx schon OK. aber ich wollte drauf hinweisen, daß es generell besser wäre, es sich anzugewöhnen mit den preg_-Funktionen zu arbeiten.

Und darüber hinaus gilt: was man ohne RegEx erledigen kann, das sollte man auch ohne RegEx machen. Reguläre Ausdrücke können alles und sind alles - nur eben nicht schnell...
Besonders Perl-Programmierer neigen dazu in PHP-Code überall mit RegExen zu arbeiten, wo es einfache String-Funktionen tun würden. Und diese sind dann halt vielleicht 40 mal schneller oder so...


So, mal schauen...
joa, hier in dem Projekt an dem ich gerade arbeite habe ich sogar auch ereg() zum Mail-Check eingesetzt. Aber eigentlich gut, daß ich mal wieder in dieses File geschaut hab... Die Datei kopiere ich sonst immer nur...
Sollte ich auch mal abändern. Momentan sieht es noch so aus:
Code:

function check_adress( $email )
{
   $expression = "^[_a-zA-Z0-9-](\.{0,1}[_a-zA-Z0-9-])*@([a-zA-Z0-9-]{2,}\.){0,}[a-zA-Z0-9-]{3,}(\.[a-zA-Z]{2,4}){1,2}$";

   if ( ereg( $expression, $email ) )
      return TRUE;
   else
      return FALSE;
}


Zuletzt bearbeitet von rob am Mo 28.02.2005 17:18, insgesamt 1-mal bearbeitet
  View user's profile Private Nachricht senden
 
Ähnliche Themen Validierung von E-Mail-Adressen
Hilfe bei Validierung
RegEx - Rufnummer Validierung
xhtml-Validierung Joomla 1.5
Formular wartebild bei onsubmit geht nicht wegen validierung
HTML Form nach JavaScript-Validierung in neuem Fenster
Neues Thema eröffnen   Neue Antwort erstellen
MGi Foren-Übersicht -> Programmierung


Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst an Umfragen in diesem Forum nicht mitmachen.