Hi,
Vielleicht hat ja jemand lust und schaut sich das ding mal an und kann mir berichten wo es bedenken geben könnte.
ich sehe da noch viel Redundantes, das über eine Funktion vereinfacht werden könnte, z.B. die Prüfungen auf leere Pflichtfelder und das Umkopieren der POST-Eingaben.
Die Email-Validierung ist Murks - altertümlich und lässt gültige Adressen nicht durch.
Ich habe hierzu nur eine Minimalprüfung:
function tsCheckEmail($adr) {
$regEx = '^([^\s@,:"<>]+)@([^\s@,:"<>]+\.[^\s@,:"<>.\d]{2,}|(\d{1,3}\.){3}\d{1,3})$';
return (preg_match("/$regEx/",$adr,$part)) ? $part : false;
}
# if($tsPart=tsCheckEmail($tsAdr)) { $tsMail=$tsPart[1]; $tsDomain=$tsPart[2]; }
Die Telefon- Telefax- und Mobilprüfungen sind ebenfalls Murks (und redundant). Ich habe hierfür erst kürzlich folgendes programmiert (sollte die gültigen bzw. normierten Angaben eigentlich alle berücksichtigen:
function tsCheckPhone($tel) {
$regEx = '^((\+[0-9]{2,4}( [0-9]+? | ?\([0-9]+?\) ?))|(\(0[0-9 ]+?\) ?)|(0[0-9]+?( |-|\/)))[0-9]+?[0-9 \-\/]*$';
return preg_match("/$regEx/",$tel);
}
Anmerkung: der Kunde wollte dann auch noch reine Ziffernfolgen akzeptiert haben, so dass meine Abfrage dann letztlich so aussah:
if(in_array($key, $tsForm['Telefon']) && $val!=='' && !tsCheckPhone($val) && !preg_match("/^0[0-9]{7,21}$/",$val)) tsAddError('Unerwartetes Nummernformat im Feld "'.$key.'"');
also der letzte preg_match auf 0 mit 7-21 folgenden Ziffern hinzugekommen ist.
Der PHP-Code in den HTML-Ausgaben sowie das HTML selbst ist unsauber - Du solltest Dich besonders an das EVA-Prinzip halten. Vergleiche Deinen Code:
if ((isset($_POST['Email'])) AND (empty($_POST['Email']))) {
}
elseif ($email_check == "false") {
echo '<li><em class="required">Email</em>:<span class="required"> '.(str_replace( "\\", "", htmlspecialchars($email_value))).'</span></li>'."\n";
}
else {
echo '<li><em>Email</em>: '.(str_replace( "\\", "", htmlspecialchars($email_value))).'</li>'."\n";
}
mit diesem:
<p><label for="E-Mail">E-Mail Adresse:</label>
<input id="E-Mail" <?php tsInput("E-Mail"); ?> />
</p>
Die dazugehörige Funktion ist eine universelle:
function tsInput($field,$def='') {
echo 'name="',$field,'" value="';
if(isset($_POST[$field]) && $_POST[$field]!=='') echo str_replace('"','"',htmlspecialchars($_POST[$field]));
elseif($def) echo str_replace('"','"',htmlspecialchars($def));
echo '"';
}
Interessant finde ich:
<p style="display: none;"><label>Homepage</label><input type="text" name="Homepage" value="" /></p>
.
Abgesehen davon, dass "Homepage" meiner Erfahrung nach am ehesten von Spam-Bots links liegen gelassen wird, würde ich als Bot bei "display: none;" und plötzlich semantisch korrekter Nutzung von <label> vielleicht doch misstrauisch...
freundliche Grüße
Ingo