Tobias Unger: spam und nonsense mail

Beitrag lesen

Hi!

Grund: "123" ist kein Integer sondern ein String, PHP behandelt das zwar meist recht unsauber ("123" == 123), aber wenn du das so explizit abfrägst nimmt es es halt doch mal genau.

Das ist keinesfalls "unsauber".[2] PHP arbeitet hinter den Kulissen mit definierten Variablentypen. Man muss nur als Programmierer den Typ nicht explizit angeben. Wenn PHP beim Vergleichen auf unterschiedliche Typen stößt nimmt es eine implizite Typumwandlung vor.

Ok, ich habe es doof formuliert.
Natürlich ist es so, dass man "ordentlich" (also wie z.B. in C) Variablen vorher deklarieren kann - nur es wird eben akzeptiert, wenn man schlampt - das wollte ich sagen.
Ist fast wie in HTML - man kann praktisch alles falsch machen und der Browser überlegt sich, was man gemeint hat.

if($plz != "" && ! ($plz >= 10000 && $plz <= 99999)) {
Was ist mit den Postleitzahlen im Bereich 01xxx bis 09xxx?

Wusste nicht, dass es solche gibt - aber dann muss man die Bedinung halt bei 00001 (= 1) anfangen lassen.

Postleitzahlen sollte man nicht nach Integer umwandeln wollen, weil dabei die führende 0 verloren geht. Besser ist es, die Eingabe gegen eine Datenbank der "real existierenden" Postleitzahlen zu prüfen. Das ist recht aufwendig. Alternativ bietet sich an, die Eingabe zu prüfen, ob sie 5 Zeichen lang ist (strlen()), und ob diese 5 Zeichen alles Ziffern sind (ctype_digit()).

Nun gut, ich habe keine so genaue Ahnung, es für Postleitzahlen es gibt - ich dachte, alle von 10000 bis 99999 gibts, fertig.
Aber letztendlich war doch die Ausgangsfrage, wie man Bots ausschließt, die z.B. Emailadressen in PLZ-Felder schreiben - dafür sollte das doch eigentlich reichen, oder?

Grüße aus Nürnberg,
Tobias