Adeodatus: Email Prüfung

Guten Abernd werte Nachtschwärmer

Sitz jetzt schon ´ne Weile an meinem Problem und bin fast am verzweifeln.
Hab ein Formular, mit einem Pflichtfeld (E-Mail Adresse) einigen Checkboxen und Oprionalen Feldern.
Gesendet wird alles hervorragend, nur möchte ich gern die E-Mail Adr. noch syntaktisch vor dem Senden prüfen. (möglichst mit php wegen JS on/off)

Sind die Eingaben konform, senden, wenn nicht, dann eben noch nicht senden.
Denke die erstellte Funktion sollte/könnte richtig sein. (fehlt vielleicht ein return xyz?)
Das Problem liegt in der Verknüpfung zum richtigen Feld das abgefragt werden soll.
(Bekomme entweder Fehlermeldung / Objekt ist 0 bzw. nicht definiert oder Objekt wird erwartet.)

Hier die fx

  
function check_mail($email)  {  
if(!eregi( "^[_\.0-9a-z-]+@([0-9a-z][0-9a-z-]+\.)+[a-z]{2,3}$", $email)) {  
echo "Fehler!<br> Die eingegebene E-Mail Adresse ist ungültig";  
  }  
}  

...und hier das Formular im Auszug

  
<form action="<?php print $_SERVER['PHP_SELF']; ?>" method="post" onsubmit="check_mail ()">  
<input type="text" name="email" size="53" />  
<input type="submit" value="Senden" />  

Mit der Hoffnung um Hilfe
Vielen Dank und Grüße Adeodatus

  1. Hello,

    <form action="<?php print $_SERVER['PHP_SELF']; ?>" method="post" onsubmit="check_mail ()">

    ähm, dir ist die räumlich/zeitliche Trennung zwischen Server und Client klar? Erst wird das HTML erzeugt/versendet, dann vom Browser aufbereitet, der Benutzer füllt seine Daten ein, dann wird es an den Server zurückübermittelt und dort ggf. wieder von einem Skript entgegen genommen. Die Worte "vor dem Senden" und "PHP" widersprechen sich bei gewöhnlicher Anwendung. Dein Ziel in allen Ehren, aber die Prüfung per PHP wird auf dem Server erfolgen müssen. Dementsprechend kannst/musst du dir onsubmit schenken, es wird clientseitig verarbeitet.

    if(!eregi( "[1]+@([0-9a-z][0-9a-z-]+.)+[a-z]{2,3}$", $email))

    da möchtest du nochmal nachschauen, 2-3 Stellen nach dem Punkt müssen nicht sein

    MfG
    Rouven

    --
    -------------------
    sh:| fo:} ch:? rl:( br:& n4:{ ie:| mo:} va:) js:| de:] zu:| fl:( ss:) ls:& (SelfCode)
    Ist Dir langweilig? Willst du Spaß? Willst Du Party? Ganz einfach!!! Schicke eine SMS mit dem Bestellwort "Feuer" an die 112 und innerhalb von 5 Minuten stehen 20 Männer mit lustigen Partyhüten, Sirenen und Partywagen vor deinem Haus!  --  Herkunft unbekannt

    1. _.0-9a-z- ↩︎

    1. Hallo

      *schäm* Na so explizit wie Du das jetzt ausgeführt hast, hätte ich es nicht gekonnt. Nein. Jetzt hat allerdings so einiges geklingelt, die Ausgrenzungen muss ich mir auf jeden Fall nochmal anschauen nebst dem JavaPhp Zwitter.

      Danke für die Hilfe
      Grüße Adeo

      1. So läuft alles, hab es doch jetzt mit JS gelöst.
        php kommt dann wohl im Laufe der Erfahrung :)

        Vielen Dank an Euch, die Hinweise waren wie immer spitze!

  2. Hi Adeodatus,
    Dein geposteter Code ist irgendwie etwas irreführend. Sorry, wenn ich Dich missverstehe, aber ich hab zwei Fragen:

    1.: Meinst Du mit Senden nur das Senden des Formulares, oder willst Du am Ende tatsächlich eine Email versenden mit den Formularinhalten?

    2.: Ist Dir klar, dass

    onsubmit="check_mail ()">

    und

    function check_mail($email)  {
    if(!eregi( "[1]+@([0-9a-z][0-9a-z-]+.)+[a-z]{2,3}$", $email)) {
    echo "Fehler!<br> Die eingegebene E-Mail Adresse ist ungültig";
      }
    }

      
    nichts miteinander zu tun haben? Das erstere ruft eine JavaScript-Funktion auf (aber Du hast ja geschrieben, Du wollest kein JavaScript verwenden) und das Letztere ist eine PHP-Funktion.  
      
    Die PHP-Funktion selber sieht so aus, als müsste sie funktionieren (allerdings steuert sie in keiner Weise, was mit den Formulardaten anhängig von ihrer Richtigkeit geschehen soll - ich gehe mal davon aus, dass es nur eine Beispiel-Funktion ist).  
    Teste mal, ob ihr wirklich die Email-Adresse übergeben wird (etwa durch echo $email; in der Funktion). Falls nicht, dann müsste man mal Deinen Funktionsaufruf überprüfen (den Du ggf. posten müsstest). Macht Dir vielleicht PHP mit [register_globals](http://uk3.php.net/manual/de/ini.sect.data-handling.php#ini.register-globals)  
    einen Strich durch die Rechnung?  
      
      
    Viele Grüße  
    der Bademeister
    

    1. _.0-9a-z- ↩︎

    1. Hallo

      1.: Meinst Du mit Senden nur das Senden des Formulares, oder willst Du am Ende tatsächlich eine Email versenden mit den Formularinhalten?

      Ja eigentlich die Inhalte des Formulars als E-Mail an mich.
      Also welche Werte wurden angewählt und wie lautet die E-Mail Adresse.

      2.: Ist Dir klar, dass

      onsubmit="check_mail ()">..........

      Ja jetzt auf jeden Fall schon. Dachte das bezieht sich nur auf onblur, aber nee wäre ja auch quatsch irgendwie. Werd weiter tüfteln

      Vielen Dank für die weiteren Hinweise.
      Grüße Adeo

  3. Guten Abend,

    wie ich sehe hast du anscheinden einen falschen Ansatz, du kannst eine PHP-Funktion nicht mit einem Javascript-Eventhandler aufrufen.

    Die funktion würde ich so verändern, das sie nur true oder false zurückgibt.
    Das sähe dann so aus:

      
    function check_mail($email)  {  
      if(!eregi( "^[_\.0-9a-z-]+@([0-9a-z][0-9a-z-]+\.)+[a-z]{2,3}$", $email)) {  
        return false;  
      } else {  
        return true;  
      }  
    }  
    
    

    Dann kannst du hiermit prüfen ob das Formular abgesendet wurde und dann eine entsprechende Fehlermeldung ausgeben, oder bei Erfolg halt das tun was du mit den Daten tun wolltest:

      
    if(!empty($_POST)) {  
      if (!check_mail ($_POST['email'])) {  
        "email falsch!"  
      } else {  
      //hier kannst du dann das reinschreiben was du im erfolgsfall tun möchtest  
      }  
    }  
    
    

    function check_mail($email)  {
    if(!eregi( "[1]+@([0-9a-z][0-9a-z-]+.)+[a-z]{2,3}$", $email)) {
    echo "Fehler!<br> Die eingegebene E-Mail Adresse ist ungültig";
      }
    }

      
    Gute Nacht,  
      
    Stefan
    

    1. _.0-9a-z- ↩︎

    1. Hallo

      Vielen Dank für die Hinweise, absolut hilfreich, werd mich gleich ran setzen und weiter tüfteln.

      Guten Abend,

      wie ich sehe hast du anscheinden einen falschen Ansatz, du kannst eine PHP-Funktion nicht mit einem Javascript-Eventhandler aufrufen.

      Scheinabr total verrannt, ist aber auch nicht immer leicht das Programmieren als Grafiker. *g*

      Grüße Adeo

  4. [latex]Mae  govannen![/latex]

    if(!eregi( "[1]+@([0-9a-z][0-9a-z-]+.)+[a-z]{2,3}$", $email)) {

    Meine RegEx-Kenntnisse sind zwar ziemlich gering, aber trotzdem sehe ich schon mehrere Fälle, in denen gültige E-Mail-Adressen ausgeschlossen werden. Alles mit TLD > 3Zeichen (z.B. .info)  sowie z.B. hans+karin@example.org usw.

    Ich persönlich halte es für besser, eine ungültige E-Mail-Adresse durchzulassen als eine gültige zu blocken. Daher empfehle ich hier KISS.

    D.h. das Feld darf

    • keine Kommas
    • keine Zeilenumbrüche
    • gegebenenfalls keinen Whitespace
    • exakt ein @
    • hinter dem @ ein oder mehrere Zeichen, mindestens einen Punkt und dahinter wieder ein oder mehrere Zeichen
      enthalten.

    Weitere notwendige Verfeinerungen dieses (noch sehr groben) Konzepts werden dir bestimmt gegeben werden ;)

    Cü,

    Kai

    --
    Ash nazg durbatulûk, ash nazg gimbatul,ash nazg thrakatulûk, agh burzum-ishi krimpatul
    selfcode sh:( fo:| ch:? rl:( br:< n4:# ie:{ mo:| va:) js:) de:> zu:) fl:( ss:| ls:?

    1. _.0-9a-z- ↩︎

    1. Falls der Fragesteller PHP 5.2 verwendet, dann geht es auch ohne RegExp:
      filter_var($mail, FILTER_VALIDATE_EMAIL)
      Die Funktion klappt bei mir super!

      grüße Stefan

      1. Hallo

        Werd ich mir auf jeden Fall anschauen, vielleicht hilft es mir ja auch.

        Falls der Fragesteller PHP 5.2 verwendet, dann geht es auch ohne RegExp:

        Danke für den Tip
        Grüße Adeo

    2. Hallo,

      Ich persönlich halte es für besser, eine ungültige E-Mail-Adresse durchzulassen als eine gültige zu blocken. Daher empfehle ich hier KISS.

      D.h. das Feld darf

      • keine Kommas

      wieso?

      • keine Zeilenumbrüche

      sicher?

      • gegebenenfalls keinen Whitespace

      selbstverständlich erlaubt

      • exakt ein @

      selbstverständlich sind mehrere erlaubt.

      • hinter dem @ ein oder mehrere Zeichen, mindestens einen Punkt und dahinter wieder ein oder mehrere Zeichen

      hinter dem letzten @ ...

      enthalten.

      Du blockst auch viel zu viele gültige E-Mail-Adressen. Siehe Selfforumssieb, Validierung von E-Mail-Adressen.

      Freundliche Grüße

      Vinzenz

    3. Hallo
      Ok Kiss ist mir ganz neu, dachte die machen Musik *g*
      Das könnte für mich etwas zu programmier spezifisch sein, werd mich aber wohl oder übel nochmal mit den Ausgrenzungen befassen müssen.

      Vielen Dank für deine Infos
      Grüße Adeo