Email Prüfung
Adeodatus
- php
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
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
_.0-9a-z- ↩︎
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
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!
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
_.0-9a-z- ↩︎
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
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
_.0-9a-z- ↩︎
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
[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
Weitere notwendige Verfeinerungen dieses (noch sehr groben) Konzepts werden dir bestimmt gegeben werden ;)
Cü,
Kai
_.0-9a-z- ↩︎
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
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
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
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