1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen
  2. Unsere jährliche Weihnachts-Banner-Aktion hat begonnen! Wir freuen uns auf viele, viele kreative Vorschläge.
    Mehr dazu könnt Ihr hier nachlesen: Weihnachtsbanner 2016

    Information ausblenden

PHP if will nicht

Dieses Thema im Forum "Web-Programmierung" wurde erstellt von Stalefish, 02.12.06.

  1. Stalefish

    Stalefish Damasonrenette

    Dabei seit:
    18.10.06
    Beiträge:
    490
    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.
     
  2. Peter Maurer

    Peter Maurer Carmeliter-Renette

    Dabei seit:
    16.03.04
    Beiträge:
    3.274
    Gib uns eine Chance und zeig' mal den echten, fehlerhaften Quelltext. Wenn ich ...

    ... 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")).
     
    #2 Peter Maurer, 02.12.06
    Zuletzt bearbeitet: 02.12.06
  3. patz

    patz Châtaigne du Léman

    Dabei seit:
    15.11.05
    Beiträge:
    822
    $variable=="1" or $variable=="2"

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

    zeno Lane's Prinz Albert

    Dabei seit:
    05.11.05
    Beiträge:
    4.898
  5. Stalefish

    Stalefish Damasonrenette

    Dabei seit:
    18.10.06
    Beiträge:
    490
    Ok. Ich versuchs mal mit patz Vorschlag sonst melde ich mich noch einmal.
    Danke.
     
  6. duderino

    duderino Goldparmäne

    Dabei seit:
    26.01.06
    Beiträge:
    556
    if($variable == 1 || $variable == 2) { }

    hf
     
  7. smb

    smb Raisin Rouge

    Dabei seit:
    27.08.05
    Beiträge:
    1.171
    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!
     
  8. duderino

    duderino Goldparmäne

    Dabei seit:
    26.01.06
    Beiträge:
    556
    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
     
  9. zeno

    zeno Lane's Prinz Albert

    Dabei seit:
    05.11.05
    Beiträge:
    4.898
    Dann hättest du auch noch schreiben können das das weglassen der Anführungszeichen einen Minimalen Performanceschub gibt ;)
     
  10. Stalefish

    Stalefish Damasonrenette

    Dabei seit:
    18.10.06
    Beiträge:
    490
    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.
     
  11. duderino

    duderino Goldparmäne

    Dabei seit:
    26.01.06
    Beiträge:
    556
    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
     
  12. zeno

    zeno Lane's Prinz Albert

    Dabei seit:
    05.11.05
    Beiträge:
    4.898
    Änder mal die Anzahl der erlaubten stellen für die TLD auf 4 ;) (zwecks .info und .mobi).
     
  13. Hilarious

    Hilarious Gelbe Schleswiger Reinette

    Dabei seit:
    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;
    	}
    
    
     
    #13 Hilarious, 04.12.06
    Zuletzt bearbeitet: 04.12.06
  14. zeno

    zeno Lane's Prinz Albert

    Dabei seit:
    05.11.05
    Beiträge:
    4.898
    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..
     
  15. Hilarious

    Hilarious Gelbe Schleswiger Reinette

    Dabei seit:
    10.08.05
    Beiträge:
    1.759
    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).
     
    zeno gefällt das.
  16. zeno

    zeno Lane's Prinz Albert

    Dabei seit:
    05.11.05
    Beiträge:
    4.898
    Okay, danke. So hätte ichs auch angegangen, erst in Punycode umwandeln dann bequem checken.
    Thx, für den Hinweiß auf das Pear Packet!
     

Diese Seite empfehlen