• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Die Bildungsoffensive hier im Forum geht weiter! Jetzt sollen Kreativität und technische Möglichkeiten einen neue Dimension erreichen. Das Thema in diesem Monat lautet - Verkehrte Welt - Hier geht es lang --> Klick

PHP if will nicht

Stalefish

Damasonrenette
Registriert
18.10.06
Beiträge
489
Ich hab ein Problem mit If. Ich weiß klingt komisch ist aber so.
Ich will eine Variablen die ich in das PHP dokument über get aus einem formular bekommen habe etwas ausschließen. Das heißt if ($variable=="1" or "2" ..) {anweisung} elseif ($variable2=="11" or "22" ..) {anweisung} else {mail (...)}


So aber immer wenn ich die EMail aus dem Formular verschicken will zeigt er mir die anweisung von der ersten if abfrage an, obwohl die variable nicht mit dem übertragenem übereinstimmt. Wieso weiß ich nicht.

Danke.
 
Gib uns eine Chance und zeig' mal den echten, fehlerhaften Quelltext. Wenn ich ...

$variable=="1" or "2"
... lese, krieg' ich ja schon Kopfweh. :-D

Falls Du das ernst meinst und PHP tatsaechlich das uneindeutige Woertchen "or" (bitweise oder logisch?) statt des ueblichen Operators "||" akzeptiert, was ich grade nicht weiss, dann koennte das auch schon die Loesung Deines Problems sein. Die zweite Bedingung, "2", ist immer wahr, weil 2 bekanntlich ungleich 0 ist. Du meinst wahrscheinlich (($variable=="1") || ($variable=="2")).
 
Zuletzt bearbeitet:
$variable=="1" or $variable=="2"

Das andere ist Unfug. "or" geht statt "||", find ich persönlich aber unschön.
 
Ok. Ich versuchs mal mit patz Vorschlag sonst melde ich mich noch einmal.
Danke.
 
ist ja toll wie ihr euch alle beteiLigt, aber Peter Maurer hat die Lösung vor euch preisgegeben:D

No soup for you, just for PM!
 
Ja, muss gestehen dass ich am Anfang übersehen habe. Trotzdem habe ich mich entschieden den Post zu veröffentlichen, weil man in PHP bei Zahlen keine Anführungszeichen benutzen muss.

Grüße
 
Dann hättest du auch noch schreiben können das das weglassen der Anführungszeichen einen Minimalen Performanceschub gibt ;)
 
Hat alles geklappt! Nur noch eine frage wie kann ich prüfen ob derjenige der die E-Mail versendet auch eine E-Mail adresse angegeben hat und kein Namen oder sonst was.
 
Dann hättest du auch noch schreiben können das das weglassen der Anführungszeichen einen Minimalen Performanceschub gibt ;)

Ja, stimmt, hätte ich wohl sagen sollen ;)

Hier noch eine kleine Funktion zum prüfen der Adresse. 100% sicher ist aber keine Überprüfung. Wenn der Nutzer eine falsche Adresse eingeben will, hast du keine Chance das zu pürfen. Außer du schickst eine Mail an den Account mit einem Bestätigungslink.

http://nopaste.easy-coding.de/?id=19
 
Hier noch eine kleine Funktion zum prüfen der Adresse. 100% sicher ist aber keine Überprüfung. Wenn der Nutzer eine falsche Adresse eingeben will, hast du keine Chance das zu pürfen. Außer du schickst eine Mail an den Account mit einem Bestätigungslink.

Änder mal die Anzahl der erlaubten stellen für die TLD auf 4 ;) (zwecks .info und .mobi).
 
Die meisten Regexe haben Schwächen, wenn es um das Prüfen von E-Mail-Adressen rein nach der Syntax geht, zudem es nun auch vierstellige Top Level Domains gibt (wie zeno oben schon anmerkt). Daher wähle ich einen anderen Ansatz, der diese TLDs einzeln prüft, leicht wartbar ist, die schnellere Funktion preg_match statt eregi verwendet, und auch ein Plus-Zeichen zulässt (was von RFC 2882 gefordert wird).

Zum guten Schluss prüft diese Funktion gleich noch die Existenz eines MX Records, so dass auch »Fantasie-Eingaben« abgefangen werden können.

Code:
/*
    *-----------------------------------------------------------------------------------------------------------------------------
    * is_email
    *-----------------------------------------------------------------------------------------------------------------------------
    * prueft E-Mail-Adresse gegen regex, inklusive neuerer TLDs
    *-----------------------------------------------------------------------------------------------------------------------------
    * @param	string	E-Mail-Adresse 
    * @return	bool	TRUE wenn E-Mail-Adresse validierbar, sonst FALSE
*/
	function is_email ($email) {         
	
		$pattern	=	"/^[-_.+[:alnum:]]+@((([[:alnum:]]|[[:alnum:]][[:alnum:]-]*[[:alnum:]])\.)+";
		$pattern	.=	"(ad|ae|aero|af|ag|ai|al|am|an|ao|aq|ar|arpa|as|at|au|aw|az|ba|bb|";
		$pattern	.=	"bd|be|bf|bg|bh|bi|biz|bj|bm|bn|bo|br|bs|bt|bv|bw|by|";
		$pattern	.=	"bz|ca|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|co|com|coop|cr|";
		$pattern	.=	"cs|cu|cv|cx|cy|cz|de|dj|dk|dm|do|dz|ec|edu|ee|eg|eh|";
		$pattern	.=	"er|es|et|eu|fi|fj|fk|fm|fo|fr|ga|gb|gd|ge|gf|gh|gi|";
		$pattern	.=	"gl|gm|gn|gov|gp|gq|gr|gs|gt|gu|gw|gy|hk|hm|hn|hr|ht|";
		$pattern	.=	"hu|id|ie|il|in|info|int|io|iq|ir|is|it|jm|jo|jp|ke|";
		$pattern	.=	"kg|kh|ki|km|kn|kp|kr|kw|ky|kz|la|lb|lc|li|lk|lr|ls|";
		$pattern	.=	"lt|lu|lv|ly|ma|mc|md|mg|mh|mil|mk|ml|mm|mn|mo|mobi|mp|mq|";
		$pattern	.=	"mr|ms|mt|mu|museum|mv|mw|mx|my|mz|na|name|nc|ne|net|";
		$pattern	.=	"nf|ng|ni|nl|no|np|nr|nt|nu|nz|om|org|pa|pe|pf|pg|ph|";
		$pattern	.=	"pk|pl|pm|pn|pr|pro|ps|pt|pw|py|qa|re|ro|ru|rw|sa|sb|";
		$pattern	.=	"sc|sd|se|sg|sh|si|sj|sk|sl|sm|sn|so|sr|st|su|sv|sy|";
		$pattern	.=	"sz|tc|td|tf|tg|th|tj|tk|tm|tn|to|tp|tr|tt|tv|tw|tz|";
		$pattern	.=	"ua|ug|uk|um|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|ye|";
		$pattern	.=	"yt|yu|za|zm|zw)$";
		$pattern	.=	"|(([0-9][0-9]?|[0-1][0-9][0-9]|[2][0-4][0-9]|[2][5][0-5])\.){3}([0-9][0-9]?|[0-1][0-9][0-9]|[2][0-4][0-9]|[2][5][0-5]))$/i";

		if (preg_match ($pattern, $email, $matches)) {
			if (checkdnsrr ($matches [1] . '.')) {
				return TRUE;
			}
		}
		
		return FALSE;
	}
 
Zuletzt bearbeitet:
Ein Problem beim Überprüfen wären noch Umlaut Domains, damit hab ich mich noch
garnicht wirklich befasst..
Hat wer im Kopf ob Alnum Umlaute schluckt? Ich denke eigentlich nein..
 
Ein Problem beim Überprüfen wären noch Umlaut Domains, damit hab ich mich noch
garnicht wirklich befasst..
Hat wer im Kopf ob Alnum Umlaute schluckt? Ich denke eigentlich nein..

Nein, Umlaute werden davon nicht abgedeckt. IDN-Domains (IDNA) funktionieren ja eigentlich auch so, dass die Umlaut-Namen vor der Weiterverarbeitung in Punycode umgewandelt werden. Nach dieser Umwandlung funktioniert die Domain-Prüfung wieder wie gehabt.

So wird aus 'köln.de' per Umwandlung zu einem ACE-String (ASCII Compatible Encoding) 'xn--kln-sna.de' (, was sich natürlich kein Mensch merken kann). Dies wiederum wird erfolgreich validiert. Schwierig ist es mit den IDNs schon auch daher, dass in verschiedenen Ländern verschiedene Sonderzeichen zugelassen (allein Deutschland, Schweiz und Österreich sehen das sehr unterschiedlich). Dazu kommen dann noch die Domain-Namen die in Kyrillisch oder Kanji eingetippt werden. Aus diesem Grund müssen die in Unicode eingetippten Domain-Namen vor der Domainprüfung bereits im Punycode vorliegen, damit's klappt.

Zusatz: Für die Umwandlung von Unicode zu Punycode (ACE) gibt's auch schon ein PEAR-Paketchen (beta).
 
  • Like
Reaktionen: zeno
Okay, danke. So hätte ichs auch angegangen, erst in Punycode umwandeln dann bequem checken.
Thx, für den Hinweiß auf das Pear Packet!