echo $begrüßung;
Gerne hätte ich eine Lösung für:
Wenn $name das Zeichen @ oder eine Ziffer enthält, dann
$fehler=true;
Für jede Programmiersprache [1] gibt es Bibliotheken mit Stringfunktionen, da Stringverarbeitung eine grundlegende Funktionalität für die meisten Programme ist. Zwei Funktionen, die mir bisher stets begegnet sind, heißen substr und strpos, oder tragen ähnliche Namen. Mit der ersten erhält man Teile eines String, mit der zweiten findet man die Position von einem Zeichen oder einer Zeichenkette in einer anderen. Letztere ist diejenige, die du benötigst.
Wenn die PHP-Funktion strpos() einen Wert zurückgibt, der eine Positionsangabe darstellt, ist der gesuchte String im zu durchsuchenden String enthalten. Die genaue Position ist in deinem Fall nicht wichtig, du musst nur wissen, ob enthalten oder nicht. Ein Blick in die Handbuchseite zu strpos() offenbart sogar ein Anwendungsbeispiel für deinen Fall.
Das @ ist aber nur eines der Zeichen, die in einem Namen mit ausreichender Wahrscheinlichkeit nicht vorkommen. Es ist auch besser, nicht alle verbotenen Zeichen herauszufischen, sondern die Anzahl der erlaubten Zeichen einzuschränken.
Mit den Character Type Functions sucht man String nach erlaubten Zeichen ab. Doch von denen hilft uns leider keine so richtig weiter [2], da sie sich nicht kombinieren oder erweitern lassen. Erlaubt sind ja Buchstaben, das Leerzeichen und der Bindestrich. Ein sehr mächtiges Werkezeug, das man nur einsetzen sollte, wenn man mit gewöhnlichen Stringfunktionen nicht weiterkommt, sind Reguläre Ausdrücke.
Wir suchen zwischen Anfang ^ und Ende $ [3] des zu prüfenden Strings Buchstaben A-Z und a-z, Bindestrich und Leerzeichen, und das ein bis mehrmals wiederholt +. Das Suchmuster sieht dann so aus.
[1]+$
Die eckigen Klammern bilden mit ihrem Inhalt eine so genannte Zeichenklasse. Damit werden mehrere Zeichen zusammengefasst. Beachte den Bindestrich. Mit ihm kann man Bereiche festlegen. Nur wenn er am Ende oder am Anfang der Zeichenklasse steht, steht er für sich selbst. Alternativ kann man ihm auch einen Backslash voranstellen und dann auch irgendwo anders platzieren. Fehlen nur noch ein paar Umlaute und vielleicht noch ein é, wenn du dich auf die gebräuchlichsten Zeichen des deutschen Sprachraum beschränken möchtest. Ansonsten musst du eben noch weitere Zeichen hinzufügen.
Außerdem braucht ein Regulärer Ausdruck noch Begrenzungszeichen, wofür oftmals Schrägstriche verwendet werden. Zusammengefasst und in PHP-Code gegossen ergibt sich:
if ([link:http://de.php.net/manual/en/function.preg-match.php@title=preg_match]('/^[A-Za-zäöüßÄÖÜé -]+$/', $_POST['...']))
// erlaubt
else
// komischer Name
Man könnte das Suchmuster auch noch verfeinern. Großbuchstaben sind meist nur am Wortanfang anzutreffen, Bindestriche nur zwischen Wörtern, usw. aber das macht den Suchausdruck nur komplexer ohne das Kosten-Nutzen-Verhältnis großartig zu verbessern.
Er tuts auch ein rostiges Tablett.
Oh, mit Altmetall handle ich für gewöhnlich nicht. :-)
echo "$verabschiedung $name";
[1] jedenfalls für die erstzunehmenden
[2] Manchmal hat der Hoster diese Funktionen auch gar nicht mit installiert.
[3] Ohne ^ und $ wird nur geprüft, ob das Suchmuster irgendwo im String anzutreffen ist.
A-Za-z - ↩︎