• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Es regnet, ist neblig und kalt, alle sind krank und der Chef wird zunehmend cholerisch. Das Thema des Monats ist also folgerichtig --> Das Grau(en)
    Wir sind gespannt, war Euch dazu einfällt! Zum Wettbewerb --> 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.
 

Peter Maurer

Pommerscher Krummstiel
Registriert
16.03.04
Beiträge
3.077
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:

patz

Châtaigne du Léman
Registriert
15.11.05
Beiträge
819
$variable=="1" or $variable=="2"

Das andere ist Unfug. "or" geht statt "||", find ich persönlich aber unschön.
 

Stalefish

Damasonrenette
Registriert
18.10.06
Beiträge
489
Ok. Ich versuchs mal mit patz Vorschlag sonst melde ich mich noch einmal.
Danke.
 

smb

Johannes Böttner
Registriert
27.08.05
Beiträge
1.170
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!
 

duderino

Prinzenapfel
Registriert
26.01.06
Beiträge
555
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
 

zeno

Lane's Prinz Albert
Registriert
05.11.05
Beiträge
4.894
Dann hättest du auch noch schreiben können das das weglassen der Anführungszeichen einen Minimalen Performanceschub gibt ;)
 

Stalefish

Damasonrenette
Registriert
18.10.06
Beiträge
489
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.
 

duderino

Prinzenapfel
Registriert
26.01.06
Beiträge
555
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
 

zeno

Lane's Prinz Albert
Registriert
05.11.05
Beiträge
4.894
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).
 

Hilarious

Gelbe Schleswiger Reinette
Registriert
10.08.05
Beiträge
1.759
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:

zeno

Lane's Prinz Albert
Registriert
05.11.05
Beiträge
4.894
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..
 

Hilarious

Gelbe Schleswiger Reinette
Registriert
10.08.05
Beiträge
1.759
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

zeno

Lane's Prinz Albert
Registriert
05.11.05
Beiträge
4.894
Okay, danke. So hätte ichs auch angegangen, erst in Punycode umwandeln dann bequem checken.
Thx, für den Hinweiß auf das Pear Packet!