dedlfix: spam und nonsense mail

Beitrag lesen

echo $begrüßung;

Afaik liegt es daran, dass die POST-Variable als Variable von Typ String übertragen wird.

Alle Einträge in $_POST und $_GET sind immer vom Typ String. [1]

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.

Die Funktionen is_integer() bzw. is_int() prüft nur den aktuellen Typ. Das Handbuch erwähnt auch extra die Fälle, in denen diese Funktion nicht verwendet werden kann.

Lösung:
if($plz != "" && ! ($plz >= 10000 && $plz <= 99999)) {

Was ist mit den Postleitzahlen im Bereich 01xxx bis 09xxx?

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()).

echo "$verabschiedung $name";

[1] In einigen Fällen kann auch der Typ Array vorkommen.
[2] Es mag vielleicht unsauber aussehen, wenn man PHPs Typkonzept keine Beachtung schenkt ...