Thread [php] Problem mit Formularfelderüberprüfung und UTF-8 (103 answers)
Opened by Tom at 2008-10-04 14:02

Tom
 2008-10-04 14:02
#115148 #115148
User since
2003-09-20
470 articles
BenutzerIn
[Homepage] [default_avatar]
Hallo,

Ich habe ein Kontaktformular dass alle Felder auf die korrekte Eingabe überprüft.

Die Felder werde so überprüft

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
 //Gib Fehler und Warnungen aus
error_reporting(E_ALL);
//Deutschsprachige Umgebung, damit die
//regulären Ausdrücke auch Umlaute etc. erkennen
setlocale(LC_ALL, 'de_DE');
//Erzeuge einen zufällig aussehenden Zugangscode aus dem Datum ...
$code = chr((date("y") + 7) % 10 + date("m") + 68 + (date("m") % 2) * 32) . chr((date("d") + (date("d") %2)) / 2 + 66 + (37 * (date("d") %2)));
//... den der Anwender mittels verborgenem Eingabefeld übergibt.
//So lässt sich das Gros der skriptgesteuerten Angriffe von
//vornherein abblocken.
//Wurde das Formular abgeschickt?
//Falls ja: Daten prüfen und versenden
if(isset($_POST['los'])) {
if(!isset($_POST['code']) || $_POST['code'] != $code) die('Mailcode fehlt!');
//Liste der zu überprüfenden Formularfelder:
//'absender' muss genau eine Mailadresse sein,
//'betreff' ist ein mindestens drei Zeichen langer Text ohne Umbruch,
//'text' muss zehn Zeichen lang sein.
$pruefung = array(
'name' => '/^([A-Za-z])[a-z]+(([ -])([A-Za-z])[a-z]+)*$/',
'absender' => '/^ [\w.!#%&\*\/=\?\^\`\{\|\}\~+-]{1,64} \@
[[:alnum:].-]{1,255} \. [a-z]{2,6} $/xi',
//prüft auf gültige E-Mail-Adresse nach RFC 2822,
//erlaubt auch ungewöhnliche Adressen wie "{@heise.de";
//strengere Prüfung (erfordert z.B. mindestens 2 Zeichen vor @
//und im Domainnamen, schließt ungewöhnliche Adressen aus):
//'absender' => '/^[\w.+-]{2,64}\@[\w.-]{2,255}\.[a-z]{2,6}$/',
'betreff' => '/^[[:print:]]{3,}$/',
//restriktivere Variante:
//'betreff' => '/^[[:alnum:]\s\?.!,;:\(\)\/\"-]{3,}$/',
'text' => '/^[[:print:][:space:]]{10,}$/'
);
//Durchlaufe alle Formulardaten:
foreach($_POST as $parameter => $wert) {
//Formularfelder, die in $pruefung stehen,
//müssen in die oben definierten Muster passen
if(isset($pruefung[$parameter])) {
if(!preg_match($pruefung[$parameter], $wert)) die('Probleme mit Feld ' . $parameter . ': ' . $wert);
} else {
//Der Rest wird weggeworfen.
unset($_POST[$parameter]);
}
}

//Modedit Gwendragon: Code in PHP-Tags gestellt


[s]Wenn ich aber jetzt einen mehrzeiligen Text schreibe und die erste Zeile enthält nicht 10 Zeichen so wird die Eingabe als nicht korrekt bewertet.[/s]

Habe so eben festgestellt das das Problem nicht mit der Länge zu tun hat sondern mit dem Zeichen "ß", das heißt sobald ich dieses Zeichen verwende ist die Überprüfung nicht erfolgreich. Und das bei jedem Feld

Das Script habe ich von hier

Testen und anschauen könnt Ihr das ganze hier.

Als Betreff bitte "Perl-Community" angeben.

Tom[s]
Last edited: 2010-11-04 09:45:43 +0100 (CET)
Computerprobleme??? -> http://www.weber-computerhilfe.de

Fordere keine Anerkennung!
Zeige was und man wird Dich kennen

View full thread [php] Problem mit Formularfelderüberprüfung und UTF-8