Kontaktformular - Check auf gültige eMail - Problem!

köNICK

Grünschnabel
Also ich habe hier mein Feedbackformular geschrieben und habe jetzt ein Problem, an der Stelle wo ein möglicher Fehler durch einen Vergleich der Zeichenkette $Pattern und der eMailadresse auftreten kann macht er Probleme. Ich verstehe nicht was falsch ist, vielleicht kann mir einer helfen. Danke!

PHP:
<?php 
if($action=="senden") { 

$betreff = trim(stripslashes($betreff)); 
$inhalt = trim(stripslashes($inhalt));
$Pattern="^([0-9a-z]+)([ 0-9a-z\.-_]+)@([0-9a-z\.-_]+)\.([0-9a-z]+) ";

// Prueft ob die Felder ausgefuellt wurden falls nicht komm eine Fehlermeldung 
if(!$name) $fehler[] = "Ihr Name fehlt."; 
if(!$betreff) $fehler[] = "Der Betreff fehlt."; 
if(!$inhalt) $fehler[] = "Sie haben keine Nachricht geschrieben."; 
if(!$von) $fehler[] = "Ihre Emailadresse fehlt.";
if(!eregi($Pattern, $von)) $fehler[] = "Ihre Emailadresse ist nicht korrekt.";
if(!count($fehler)) { // Sendet Email, wenn Prüfung "ok" 
@mail($an,$betreff,$inhalt,"From: ".$von); 
echo("<p>Ihre Nachricht wie folgt wurde gesendet.</h1>
<p>\n\n"); 
echo "Name: <b>$name</b><br>\n"; 
echo "Betreff: <b>$betreff</b><br>\n"; 
echo "Inhalt: <b>".nl2br($inhalt)."</b><br>\n"; 

} else { // Fehlerausgabe, wenn Felder leer waren 

echo "Beim Senden traten folgender Fehler auf:"; 
echo "<ul><li>".implode("<li>",$fehler)."</ul>"; 

} 
} 
?> 
<form action="contact.php" method="post"> 
<input type="hidden" name="action" value="senden"> 
<input type="hidden" name="an" value="Feedback@busenkumpels.net"> 
<table class="contact"><tr> 
<td>Name</td> 
<td><input name="name" value="<?php echo $name; ?>" size="17"></td> 
</tr><tr> 
<td>Email</td> 
<td><input name="von" value="<?php echo $von; ?>" size="17"></td> 
</tr><tr> 
<td>Betreff</td> 
<td><input name="betreff" value="<?php echo $betreff; ?>" size="17"></td> 
</tr><tr> 
<td>Inhalt</td> 
<td><textarea name="inhalt" rows="4" cols="14"><?php echo $inhalt; ?></textarea></td> 
</tr><tr> 
<td> </td> 
<td><input type="submit" value="Senden" style="
background : #DDDDDD;
border : 1px
solid #C0C0C0;
color : #000000;
font-family : Verdana, Arial, Helvetica, sans-serif;
font-size : 9px;
font-weight : bold"></td> 
</tr></table></form>
 
Hallo,

Ändere es so, dann wird es auch funktionieren.


PHP:
$Pattern="/^[a-z0-9_-]+(\.[a-z0-9_-]+)*@([0-9a-z][0-9a-z-]*[0-9a-z]\.)+([a-z]{2,4}|museum)$/i";

Viel Spass

euer SaTaN
 
Hi könick,

ich hoffe mal es macht ihm nichts aus, aber ich Poste
mal eine Funktion die mir Ikea gegeben hat:

PHP:
function Check_Email($email)
{
if(eregi("@",$email))
{
list($name,$host) = explode("@",$email);
if($host == "")
   return false;
if($name == "" or eregi(",",$name))
   return false;
$fr = substr($host,0,1);
if($fr == "\.")
   return false;
if(gethostbyname($host) == $host)
   return false;
if(gethostbyname($host) == gethostbyname("lhalksjhdlkjashdlk.de"))
   return false;
return true;
}else
 return false;
};

Bei mir funktioniert sie super. Gibt eben true und false aus. Also du überprüfts damit die mail Adresse wie folgt:
if(!Check_Email($mailad)) { echo "Bitte gib eine gültige Mail-Adresse an }

MrNugget
 
Klasse das funktioniert ja und zwar checkt der nicht nur ob die emailadresse konform geschrieben ist sondern ob es diese auch gibt!

Kannste mir denn mal erklären wie das funktioniert?
 
Hallo,

Ich denke das dein Problem an der Schreibweise deines Fomulars ist.

Du definierst z.B. $fehler nicht.
Dann deine E-Mail Abfrage würde ich mit preg_match machen.

Also :

PHP:
$fehler = false;   // das komt ganz nach oben.

// das ersetzen von deinem
if (empty($von])) {
    $fehler[] = "<strong>\"E-Mail\"</strong>Feld leer";
     } else {
       if (!(preg_match("/^[a-z0-9_-]+(\.[a-z0-9_-]+)*@([0-9a-z][0-9a-z-]*[0-9a-z]\.)+([a-z]{2,4}|museum)$/i", $von))) {
           $fehler[] = "<strong>\"E-Mail\"</strong>hat eine falsche Schreibweise !<br>";
            } 
}

So müsste das gehen.

Viel Spass

euer SaTaN
 
Also köNICK,

erklären kann ich es dir nicht ;) Er sucht halt nur ob es den Host gibt und wenn nicht gibt er false aus.

Wie gesagt, das ist eine Funktion die Ikea ( Thorsten Böckkamp ) geschrieben hat.


MrNugget
 
Was gibts da großartig zu erklären?^^

Zuerst wird geprüft, ob überhaupt ein @ in der Emailadresse ist.

Dann wird die Emailadresse in zwei Teilen geteilt. $name & $host
Also alles was vor dem @ steht, und alles, was dahinter steht.

Wenn es keinen Host gibt, oder keinen Namen, kann
die Adresse nicht gültig sein.

Mein Original sieht mittlerweile so aus, dass $name auf alle ungültigen Zeichen
überprüft wird - in dem beispiel wird nur geprüft, ob nen komma drin ist.

Als nächstes wird geprüft, ob der erste Buchstabe im $host ein Punkt ist.
Da ohne diese Überprüfung Emailadressen wie test@.tutorials.de auch gültig wären. Keine Ahnung, warum.

Als nächstes wird geprüft, ob die IP Adresse des Hosts der Hostname selber ist.
Ein ungültiger Host, wie z.b. 'bommel21837981237.de' würde bei dieser Überprüfung halt keine IP Adresse rausgeben, sondern einfach nur wieder 'bommel21837981237.de'

Die letzte Überprüfung ist eigentlich unwichtig, in meinem jetzigen Original existiert diese auch nicht mehr ;)
 
Zurück