Hi,
eine "ausgereifte" Validierung serverseitig ist unverzichtbar :-)
eigentlich schon - kommt drauf an, was alles validiert werden muss.
man kann auf fast alle Angaben zumindest eine Grundlegende Plausibilitätsprüfung machen.
Genau das habe ich gemeint: Zum beispiel HTML maskieren usw. - wird in den meisten fällen gewünscht (gästebuch, formmailer, blablabla)
eine "ausgereifte" Validierung clientseitig Dienst am User, spart im Einsatzfall Traffic und mindert die Serverbelastung
daran habe ich nicht gedacht - vor allem an "traffic" denke ich doch nicht ;-)
Aber nur weil du ihn scheinbar nicht selber zahlen mußt (oder nur indirekt).
richtig - das ergibt sich doch aus dem von mir gesagten von selbst ;-)
idR. entwickele ich den "Prüfalgorithmus" immer spezifisch für eine Sprache.
Dann machst du etwas falsch.
Nö - funktioniert immer wunderbar -- wie toll ich doch bin scnr ;-)
Im Allgemeinen werden die Prüfungen mit RegExp gemachtt, diese zu erdenken ist der komplizierte Schritt; das Umsetzen in JavaScript, Perl, ... ist danach eine Kleinigkeit. Dann kann man auch ein und denselben Prüfalgorithmus an den verschiedensten Stellen einsetzen.
Hm - ja und nein: Wenn ich z.B. schauen will, ob in dem Feld was steht, verwende ich in z.B PHP empty(), in JavaScript jedoch eben nur blabla == "" oder ganz was anderes.
Oder Email-adressen: bei der clientseitigen validierung schaue ich lediglich nach einem @. Bei der serverseitigen stehen mir dann mehr funktionen zur verfügung, da ich hier richtig gemütlich mit dicken fetten perl regular expressions rumhantieren kann.
Die JavaScript "Regulären Ausdrücke" sind afaik nicht so gut wie die Perl-dinger.
Ich verstehe nicht, wo du den Unterschied siehst. Die Prüfung ist auf beiden Seiten die selbe und auch die Rückgabe ändert sich nicht großartig: In einem Fall schreibe ich eine Fehlermeldung per document.write oder alert() in die HTML-Datei und im anderen Fall schreibe ich Fehlermeldungen in die HTML-Datei die danach wieder ausgeliefert wird.
kann ich dir überhaupt nicht zustimmen. Bespiel: Hier validiere ich Daten clientseitig:
function chkFormular()
{
if(document.Formular.name.value == "") {
alert("Der Name muss angegeben werden !\n\n(c) by bla 2002");
document.Formular.name.focus();
return false;
}
if(document.Formular.email.value == "") {
alert("Die E-Mail-Adresse muss angegeben werden !\n\n(c) by bla 2002");
document.Formular.email.focus();
return false;
}
if(document.Formular.email.value.indexOf('@') == -1) {
alert("Die angegebene E-Mail-Adresse ist keine E-Mail Adresse \n\n(c) by bla 2002");
document.Formular.email.focus();
return false;
}
}
Wie du siehst schon etwas älter (2002, keine ahnung weswegen ich diese unsinnigen copyrightvermerke in die alerts geschrieben habe.... Naja, der Code ist auch egal, ich denke, jeder weiß wie eine clientseitige validierung abläuft. Doch meine Serverseitige (anderes projekt) sieht z.B. ganz anders aus:
.....
<?
/* Datenvalidierung */
$absender = (isset($_POST["absender"]) ? goodtext($_POST["absender"]) : false);
$email = (isset($_POST["email"]) ? goodtext($_POST["email"]) : false);
$betreff = (isset($_POST["betreff"]) ? goodtext($_POST["betreff"]) : false);
$text = (isset($_POST["text"]) ? goodtext($_POST["text"]) : false);
function goodtext($str) { // Zur Ausgabe in den input&textarea's
$str = trim(stripslashes($str));
return htmlspecialchars($str, ENT_QUOTES); }
function GoodForEmail($str) { // Für die HTML-Mail
$str = nl2br($str); // $str ist bereits durch goodtext() gegangen!
return str_replace (" ", " ", $str); }
$nicht_angegeben = "<i>nicht angegeben</i>";
$absender_error = false; $email_error = false; $betreff_error = false; $text_error = false;
$ErrorOut = ""; // Ausgabe aller Fehler
if(!$absender) {
my_error("Bitte geben sie ihren Namen ein.");
$absender_error = true; }
if(!$email) {
$email = $nicht_angegeben;
$email_error = true; }
if(!$betreff) {
$betreff = $nicht_angegeben;
$betreff_error = true; }
if(!$text) {
my_error("Bitte geben sie eine Nachricht ein.");
$text_error = true; }
if($email && $email != "optional") {
if(!check_email($email)) {
my_info("Die eingegebene E-Mail-Adresse ist ungültig.");
$email_error = true; $anyerror = true; }
} else
$email = $nicht_angegeben;
function check_email($email) {
/* Mein Dank hierbei an Christian Kruse: Ich hatte keine Lust,
mit selbst was zusammenzubasteln. Tada:
http://aktuell.de.selfhtml.org/tippstricks/programmiertechnik/email/index.html
:-) /
// RegEx begin
$nonascii = "\x80-\xff"; # Non-ASCII-Chars are not allowed
$nqtext = "[^\\$nonascii\015\012"]";
$qchar = "\\[^$nonascii]";
$protocol = '(?:mailto:)';
$normuser = '[a-zA-Z0-9][a-zA-Z0-9_.-]';
$quotedstring = ""(?:$nqtext|$qchar)+"";
$user_part = "(?:$normuser|$quotedstring)";
$dom_mainpart = '[a-zA-Z0-9][a-zA-Z0-9.-]*\.';
$dom_subpart = '(?:[a-zA-Z0-9][a-zA-Z0-9.-]\.)';
$dom_tldpart = '[a-zA-Z]{2,5}';
$domain_part = "$dom_subpart$dom_mainpart$dom_tldpart";
$regex = "$protocol?$user_part@$domain_part";
// RegEx end
return preg_match("/^$regex$/",$email); }
function my_error($text) {
global $ErrorOut;
$ErrorOut .= '<table class="error">';
$ErrorOut .= '<tr><td><img src="http://www.egal/src/kontakt.fehler.gif" title="Fehler" /></td><th>';
$ErrorOut .= '<h1>Fehler:</h1>'.$text;
$ErrorOut .= '</th></tr></table>'; }
function my_info($text) {
global $ErrorOut;
$ErrorOut .= '<table class="error">';
$ErrorOut .= '<tr><td><img src="http://www.egal.de/src/kontakt.hinweis.gif" title="Hinweis" /></td><th>';
$ErrorOut .= '<h1>Hinweis:</h1>'.$text;
$ErrorOut .= '</th></tr></table>'; }
function chk_optional($text) {
global $nicht_angegeben;
if($text == $nicht_angegeben)
return "optional";
else
return $text;
}
if(!empty($ErrorOut))
print "Kontakt - Fehler";
else
print "Nachricht erfolgreich abgeschickt";
?></td>
</tr>
<tr>
<td class="navigation">
</div>
<!-- LAAANGE navigation -->
</div>
</td>
<td class="site">
<?
if(!empty($ErrorOut)):
print $ErrorOut;
?>
<p>Bitte korrigieren sie die Fehler, die das System erkannt hat, und klicken sie anschließend auf <i>Abschicken</i>.</p>
<form action="kontakt.php" method="post">
<table id="kontakt">
<?=($absender_error ? '<tr class="error">' : '<tr>'); ?>
<th>Name:</th>
<td><input name="absender" type="text" class="text" value="<?=$absender; ?>" /></td>
</tr>
<?=($email_error ? '<tr class="error">' : '<tr>'); ?>
<th>E-Mail:</th>
<td><input name="email" type="text" class="<?=(chk_optional($email)=='optional' ? "optional" : "text"); ?>" value="<?=chk_optional($email); ?>"
onfocus="if(this.value=='optional'){this.value='';this.style.color='#000'}" onblur="if(this.value==''){this.value='optional';this.style.color='#7090C0';}" /></td>
</tr>
<?=($betreff_error ? '<tr class="error">' : '<tr>'); ?>
<th>Betreff:</th>
<td><input name="betreff" type="text" class="<?=(chk_optional($betreff)=='optional' ? "optional" : "text"); ?>" value="<?=chk_optional($betreff); ?>"
onfocus="if(this.value=='optional'){this.value='';this.style.color='#000'}" onblur="if(this.value==''){this.value='optional';this.style.color='#7090C0';}" /></td>
</tr>
<?=($text_error ? '<tr class="error">' : '<tr>'); ?>
<th>Nachricht:</th>
<td><textarea name="text"><?=$text; ?></textarea></td>
</tr>
<tr>
<th> </th>
<td><input type="submit" class="button" value="Abschicken" /> <input type="reset" class="button" value="Korrekturen zurücksetzten" /></td>
</tr>
</table>
</form>
<?
else:
print '<p>Ihre Nachricht wurde erfolgreich versendet.</p>';
$email_text = '<html><head><title>bla</title></head><body><h1>Homepage-Kontaktierung</h1>';
$email_text .= '<hr><p>Diese E-Mail wurde automatisch generiert. Bitte <u>nicht</u> mit der Antwort-Funktion deines E-Mail-Programms antworten! Sofern die Person ihre E-Mail-Adresse angegeben hat, kannst du auf diese klicken und der Person damit eine E-Mail schreiben.</p><hr>';
$email_text .= '<table><tr><th>Absender-Name:</th><td>'.GoodForEmail($absender).'</td></tr>';
if($email != $nicht_angegeben) {
$email = '<a href="mailto:'.$email.'">'.$email.'</a>'; }
$email_text .= '<tr><th>E-Mail-Adresse:</th><td>'.$email.'</td></tr>';
if($betreff == "optional" || $betreff == $nicht_angegeben)
$betreff = $nicht_angegeben;
else $betreff = GoodForEmail($betreff);
$email_text .= '<tr><th>Betreff:</th><td>'.$betreff.'</td></tr>';
$email_text .= '<tr><th>Text:</th><td>'.GoodForEmail($text).'</td></tr></table>';
$header = "From: webmaster@wgal.de";
$header .= "Content-Type: text/html";
if($betreff == $nicht_angegeben)
$betreff = "[Homepage-Mailer] Kontaktaufnahme";
else
$betreff = "[Homepage-Mailer] ".$betreff;
mail("post@egal.de", $betreff, $email_text, $header);
endif;
?>
</td>
</tr>
<tr class="foot">
<!-- fußnavigation -->
</tr>
</table>
...
Dieses doch etwas komplexere Beispiel stammt aus einem Projekt für eine andere Person [falls ich irgendwo vergessen habe, richtige-domain durch egal.de zu erstezten, sorry ;-)]. Und dann sage mir noch mal, ich hätte hier die grundlegend gleiche struktur....
und an Usability: Jeder Server ist mal langsam oder meine Internetanbindung oder... und dann bin ich froh, wenn ich nicht nach einer fehlerhaften Eingabe xx Sekunden warten muß, bis die Seite erneut geladen wird, sondern das Prüfungsergebnis direkt per JavaScript übermittelt wird.
Hm - sag' dass mal CK - der könnte hier in das Formular mal einen netten script einbauen. Dann noch die schwachsinnigen "Ihr posting ist unsauber und unlesbar"-dinger weg (meist verändere ich als trotz dazu noch mal den titel - und lasse mein posting wie es ist g)
WauWau
--
Wau - hier ist mein Selfcode:
ss:) zu:) ls:< fo:~ de:] va:) ch:° n4:# rl:( br:< js:| ie:% fl:| mo:|
[mein alter sah optisch irgendwie besser aus ;-)]