PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : PHP - variable und if-schleife


sei laut
2009-11-20, 14:39:23
http://www.abload.de/img/phppq48.jpg (http://www.abload.de/image.php?img=phppq48.jpg)

Wenn ich den Befehl direkt in die if-schleife als Bedingung machen, klappts.
Den Befehl in die Variable (egal ob ohne oder mit ") und es geht nicht, er erkennt den $email1 String anscheinend nicht.

Irgendwie steh ich auf einem Schlauch und ich fürchte, es ist ein kleiner dummer Fehler. Sieht ihn jemand?

Kinman
2009-11-20, 14:45:35
1. if-Anweisung
2. Wäre es angenehmer, wenn du den Code reinkopierst, damit man ihn zum Testen auch rauskopieren kann.
3. die "" rund um den Befehl sind definitiv falsch.
4. Eine sehr gute Mail-Adressen Checkfunktion, die auch funktioniert:


function checkmail($email)
{
if (!ereg('^[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+'.'@'.'[-!#$%&\'*+\\/0-9=?A-Z^_`a-z{|}~]+\.'.'[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+$', $email)) return false;
else return true;
}


//Beispiel
if (checkmail('test@test.at'))
{
//Mail korrekt
}
else
{
//falsch
}


mfg Kinman

sei laut
2009-11-20, 15:25:48
zu 1.: Hm, da war was.
zu 2.: Ok, macht Sinn, die PHP Tags hatte ich nicht gesehen. Und nur schwarz ist blöd
zu 3.: Die " nutze ich ja aktuell auch nicht mehr
zu 4.: Kann ich mal testen, nur Nutzen werde ich sie nicht. (da ich nicht glaubhaft vermitteln könnte, ich hätte sie sebst geschrieben :D)
$emailcheck = stristr($email1,'@.');
//$passwordcheck = "strchr($password1, \"\'\?\=\;\.\\/\"\@\.\")";

if (/*stristr($email1,'@.')*/$emailcheck == false)
{
echo "Die eingegebene E-Mail-Adresse hat kein";// \"@\" oder keinen \".\"";
exit;
}
else
{
echo "Script läuft weiter..";
exit;
}

Ich kann zwar etwas PHP, aber halt Laienhaft.
Edit: Ich hab die if-Anweisung auch so umgeändert, dass ich sie testen kann. Nur ohne exit; würde ich mir die Datenbank zumüllen.

Kinman
2009-11-20, 15:34:16
so, jetzt hab ich den Fehler auch gleich gesehen. Du kannst nicht nach @. abfragen, da eine Email Adresse ein @ und einen . beinhaltet aber nicht direkt hintereinander.


$emailcheck = stristr($email1,'@') | stristr($email1,'.');


Wäre z.B. eine Lösung.
Das | stellt eine ODER Verknüpfung dar, d.h. sobald eines der beiden TRUE ist, ist $emailcheck auch TRUE.

Achtung: Die Reihenfolge wird nicht überprüft. abc.xyz@com würde akzeptiert werden.

mfg Kinman

sei laut
2009-11-20, 15:38:23
Ja, die Pipe kenne ich von Bash.
Hm, ich meine vorhin getestet zu haben, dass es direkt in der IF-Anweisung ohne Variable mit '@.' klappte. Ok, dann muss ich das nochmal testen, bei meinem Pech hatte ich zum testen was mit @. genommen. :hammer:

Danke schonmal.

Tommes
2009-11-20, 15:44:11
if (strpos($email1, "@") !== false && strpos($email1, ".") !== false) {
// Email gültig
}

samm
2009-11-20, 17:41:57
Ein paar Anmerkungen:

| ist nicht analog zu pipe, sondern ein bitweises OR. Du solltest wenn schon das "normale" logische OR verwenden (das bitweise ist semantisch nicht angebracht): || oder or.

Wenn du reguläre Ausdrücke verwendest, benutze die preg statt die ereg-Funktionen, da letztere aktuell deprecated sind und ab PHP 6 gar nicht mehr funktionieren werden.

Statt echo "bla"; exit; kannst du auch die "bla"; verwenden.