( Note : Il y a un bug dans le parseur de code du forum, il m'ajoute un double "empty", je l'ai signalé dans la partie qui permet de signaler les bugs).
<?php
if( isset( $_POST'Envoyer'] ) ) {
$error = array();
$dbConf = array(
'host' => 'localhost',
'user' => 'root',
'pass' => 'root',
'name' => 'bd_cnav'
);
// - Verif. NIR
if( !isset( $_POST'NIR'] ) || empty( $_POST'NIR'] ) ) {
$error] = "Vous n'avez pas rempli votre NIR !";
} else if( !preg_match("#^[0-9]{13}$#", $_POST'NIR']) ) {
$error] = "Le format de votre NIR est incorrect.";
// Ou alors : $error] = 'Le format du NIR : "' . htmlspecialchars( $_POST'NIR'] ) . '" est incorrect.';
}
// - Verif. Nom
if( !isset( $_POST'Nom'] ) || empty( $_POST'Nom'] ) ) {
$error] = "Vous n'avez pas rempli votre nom.";
}
if( empty( $error ) ) {
try {
$db = new PDO('mysql:host=' . $dbConf'host'] . ';dbname=' . $dbConf'name'], $dbConf'user'], $dbConf'pass']);
// - En temps normal, il aurait été judicieux d'utiliser une requete préparé, mais avec la regex testé plus haut, c'est pas utile ici.
$countNIR = $db->query("SELECT COUNT(*) FROM `bd_assure` WHERE `NIR`=" . $_POST'NIR'])->fetchColumn();
if( $countNIR !== O ) {
$error] = 'Désolé, mais ce Nir n°"' . $_POST'NIR'] . '" existe déjà dans notre base.';
} else {
$db->prepare("INSERT INTO `db_assure` (`NIR`, `Nom`, `Commentaire`) VALUES(:NIR, :Nom, :Commentaire)")->execute(array(
':NIR' => $_POST'NIR'],
':Nom' => htmlspecialchars( $_POST'Nom'] ),
':Commentaire' => htmlspecialchars( $_POST'Commentaire'] )
));
$numero = $db->lastInsertId();
$actionMsg = '<span class="valid">Insertion de l\'assuré(e) n°"' . $_POST'NIR'] . '" dans la base réussie !</span>';
}
} catch( Exception $e ) {
echo 'Erreur : ' . $e->getMessage();
exit;
}
unset( $db );
}
$actionMsg = ( isset( $actionMsg ) ) ? $actionMsg : ( !empty( $error ) ? '<div class="error" style="color:red;"><ul><li>' . implode('</li><li>', $error) . '</li></ul><div>' : '' );
}
Quelques trucs à savoir :
-
Les erreurs sont contenus dans le tableau $error, elles ne sont pas identifiés, si tu veux avoir une variable par erreur tu peux fixer une clé au moment ou l'erreur est assigné (ex: $error'erreurnom'] = "...";) au lieu de $error] = "...";
-
Je te conseil d'activer l'affichage des erreurs de type "Notice", parce qu'il y a pas mal de variables non déclarés dans ton code (et j'ose à peine imaginer la suite du code qui récupère tout cela.)
-
Pour récupérer les valeurs des entrées de $_POST dans la suite de ton code, il faudra passer par $_POST'Commentaire'] par exemple, le "extract" est une tres mauvaise idées sur des entrées utilisateurs, et n'oublie pas d'échapper tout cela, sinon ca va puer les failles XSS et autres joies ...
-
Dans mon code, je n'ai pas assigné toutes les variables dont tu pourrais avoir besoin, tout simplement parce que je ne connais pas tes besoins. Vérifie avant d'utiliser.
-
$actionMsg contient le message de sortie (Erreur ou confirmation).