Font
[thread]12582[/thread]

[php] Problem mit Formularfelderüberprüfung und UTF-8 [solved]

Readers: 27


<< |< 1 2 3 4 ... 11 >| >> 104 entries, 11 pages
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
GwenDragon
 2008-10-04 16:21
#115154 #115154
User since
2005-01-17
14155 articles
Admin1
[Homepage]
user image
Quote
Code: (dl )
'name' =>  '/^([A-Za-z])[a-z]+(([ -])([A-Za-z])[a-z]+)*$/',

In der Regex ist auch kein äöüÄÖÜß enthalten!
Wieso verwendest du nicht die Zeichenklasse :alpha: für Namen?

Dürfen bei dir nur überhaupt deutsche Namen eingegeben werden?
die Drachin, Gwendolyn


Unterschiedliche Perl-Versionen auf Windows (fast wie perlbrew) • Meine Perl-Artikel

Tom
 2008-10-06 13:22
#115201 #115201
User since
2003-09-20
470 articles
BenutzerIn
[Homepage] [default_avatar]
GwenDragon+2008-10-04 14:21:22--
Quote
Code: (dl )
'name' =>  '/^([A-Za-z])[a-z]+(([ -])([A-Za-z])[a-z]+)*$/',

In der Regex ist auch kein äöüÄÖÜß enthalten!
Wieso verwendest du nicht die Zeichenklasse :alpha: für Namen?

Dürfen bei dir nur überhaupt deutsche Namen eingegeben werden?


Die Regex hab ich mir noch garnicht so genau angeschaut, aber wie ist es bei den Feldern betreff und text, dort steht als Zeichenklasse :print: was enthält print alles? Sollte ich dort auch :alpha: nehmen?

Tom
Computerprobleme??? -> http://www.weber-computerhilfe.de

Fordere keine Anerkennung!
Zeige was und man wird Dich kennen
Tom
 2008-10-09 19:54
#115340 #115340
User since
2003-09-20
470 articles
BenutzerIn
[Homepage] [default_avatar]
Hat denn keiner mehr eine Idee?

Tom
Computerprobleme??? -> http://www.weber-computerhilfe.de

Fordere keine Anerkennung!
Zeige was und man wird Dich kennen
guest Gast
 2008-10-09 20:53
#115346 #115346
Du musst doch wissen, welche Zeichen du erlauben willst.
Ich kann dir nicht sagen ob :alpha: oder :print: denn ich weiß ja nicht was für Daten bei dir reinkommen und welche erlaubt sind.
Tom
 2008-10-11 17:57
#115382 #115382
User since
2003-09-20
470 articles
BenutzerIn
[Homepage] [default_avatar]
Gast+2008-10-09 18:53:59--
Du musst doch wissen, welche Zeichen du erlauben willst.
Ich kann dir nicht sagen ob :alpha: oder :print: denn ich weiß ja nicht was für Daten bei dir reinkommen und welche erlaubt sind.


Das ist schon klar, aber dazu muss ich wissen was :alpha: oder :print: alles für Zeichen erhält. Das ß sollte doch in print enthalten sein oder nicht?

Tom
Computerprobleme??? -> http://www.weber-computerhilfe.de

Fordere keine Anerkennung!
Zeige was und man wird Dich kennen
guest Gast
 2008-10-11 18:45
#115383 #115383
Ist nun wirklich nicht so schwer zu erraten.
[:print:] Printable, also alle Druckbaren Zeichen.
[:alpha:] Alphabet, also alle Zeichen im Alphabet.
Und wenn du dir nicht sicher bist, ausprobieren!
Ist doch nicht so als würde bei einer falschen Regex der Computer explodieren oder sich in ein schwarzes Loch verwandeln.
guest Gast
 2008-10-11 21:11
#115385 #115385
Ist das so schwierig? Diese komischen :balblubbregex: sind POSIX Zeichenklassen.
Ein bisschen Googlen fördert das hervor:
http://php-regex.blogspot.com/2008/01/posix-charac...
Tom
 2008-10-12 20:50
#115426 #115426
User since
2003-09-20
470 articles
BenutzerIn
[Homepage] [default_avatar]
Gast+2008-10-11 16:45:12--
[:print:] Printable, also alle Druckbaren Zeichen.


Dachte eigentlich dass das Zeichen ß dazugehört scheint aber nicht so.

Mit dem erstellen der RegEx hab ich noch meine Schwierigkeiten, kann mir jemand eine RegEx erstellen die einmal alle Alphanumerischen Zeichen und die Zeichen äöüß erlaubt und mindestens 3 Zeichen lang ist. Und eine RegEx die alle Alphanumerischen Zeichen, Zeilenumbrüche, Leerzeichen und die Zeichen äöüß erlaubt und mindestens 10 Zeichen lang ist.

Tom
Computerprobleme??? -> http://www.weber-computerhilfe.de

Fordere keine Anerkennung!
Zeige was und man wird Dich kennen
Dubu
 2008-10-12 21:25
#115427 #115427
User since
2003-08-04
2145 articles
ModeratorIn + EditorIn

user image
Code: (dl )
1
2
/[[:alnum:]]{3}/
/[[:alnum:][:space:]]{10}/

(ungetestet)

Ich habe mir erlaubt, die Beschreibung "Zeilenumbrüche, Leerzeichen" auf sämtlichen Whitespace auszudehnen.

Damit Umlaute und Esszett erlaubt sind, muss die passende Locale im OS gesetzt sein und in Perl benutzt werden (use locale). Ich weiß nicht, wie das bei PHP ist.
<< |< 1 2 3 4 ... 11 >| >> 104 entries, 11 pages



View all threads created 2008-10-04 14:02.