Hi,
Die Prüfung der Daten kannst Du flexibler gestalten.
Auf Deine Weise musst Du jedesmal, wenn ein Feld im Formular dazu kommt auch den Code anpassen, so wie hier musst Du das nicht:
PHP-Code:
$formulardaten = isset( $_POST['form']['data'] )? $_POST['form']['data']: null;
if ( !is_null($formulardaten) )
filter_var_array( $formulardaten, FILTER_SANITIZE_STRING );
Grundsätzlich würde ich auch überlegen, ob Du die Formular Felder nicht auch komplett benennst:
HTML-Code:
<label>Vorname:</label><input type="text" name="form[data][vorname]"><br>
<label>Nachname:</label><input type="text" name="form[data][nachname]"><br>
<label>Wohnort:</label><input type="text" name="form[data][wohnort]"><br>
Dann kannst Du - ist jetzt ein wenig weiter führend, aber erwähnenswert, wie ich finde - das Array $error bspw. bequem gegen die Namen laufen lassen:
PHP-Code:
$formulardaten = isset( $_POST['form']['data'] )? $_POST['form']['data']: null;
if ( !is_null($formulardaten) )
filter_var_array( $formulardaten, FILTER_SANITIZE_STRING );
var_dump($formulardaten);
$errors = array_filter(
array_map(
function( $data, $key ) {
return empty(trim($data))? 'Bitte ' . $key . ' eingeben!': null;
}
, $formulardaten
)
);
So brauchst Du auch im Prinzip nie wieder diese Logik anzufassen, selbst wenn Du Dein $_POST['form']['data'] mal erweiterst.Es gibt hier natürlich noch etliche andere Wege und auch bessere, aber es zeigt glaube ich ganz gut, dass man sich ne Menge Arbeit sparen kann, wenn man die Dinge logisch benennt und anpackt.
Bei den try-/catch Blöcken unterstelle ich Dir mal, dass Du die Exceptions fangen willst, die von PDO kommen. Die sind allerdings dann vom Typ PDOException:
PHP-Code:
catch ( PDOException $e ) { ...
Würde dann insgesamt alles so aussehen ( allerdings ungetestet! ):
PHP-Code:
<?php
if ( isset($_POST['submitted']) ) {
$formulardaten = isset( $_POST['form']['data'] )? $_POST['form']['data']: null;
if ( !is_null($formulardaten) )
filter_var_array( $formulardaten, FILTER_SANITIZE_STRING );
$errors = array_filter(
array_map(
function( $data, $key ) {
return empty(trim($data))? 'Bitte ' . $key . ' eingeben!': null;
}
, $formulardaten
)
);
$ausgabe = 'Vielen Dank. Die Daten werden nun verarbeitet!';
if( count($errors) === 0 ) {
try {
$pdo = new PDO ('mysql:host=127.0.0.1;dbname=apple231;charset=utf8',
'apple231',
'**************************',
array(
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_OBJ,
PDO::ATTR_EMULATE_PREPARES => false,
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
)
);
} catch( PDOException $e ) {
exit( 'Fehler bei Datenbankverbindung aufgetreten : ' . $e->getMessage() );
}
try {
$statement = $pdo->prepare('INSERT INTO `testdb` (vorname,nachname,wohnort) VALUES (:vorname, :nachname, :wohnort)');
$result = $statement->execute(
array(
':vorname' => $formulardaten['vorname'],
':nachname' => $formulardaten['nachname'],
':wohnort' => $formulardaten['wohnort']
)
);
} catch( PDOException $e ){
exit( 'Fehler bei Datenbankabfrage aufgetreten : ' . $e->getMessage() );
}
}
}
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Formular</title>
</head>
<body>
<form method="POST">
<label>Vorname:</label><input type="text" name="form[data][vorname]"><br>
<label>Nachname:</label><input type="text" name="form[data][nachname]"><br>
<label>Wohnort:</label><input type="text" name="form[data][wohnort]"><br>
<input type="submit" name="submitted">
<?php // hier kann man vermutlich auch noch optimieren...
if(isset($errors) && count($errors) > 0){
echo implode('<br>', $errors);
} else if(isset($ausgabe)) {
echo $ausgabe;
}
?>
</form>
</body>
</html>
Gruß Arne