J'ai un problème de mise à jour d'une bdd avec des valeurs provenant d'un formulaire.
Le formulaire ne pose pas de problème, les variables $_POST sont bien envoyées, et un echo de ces variables donne le résultat attendu.
Par contre la requête de mets pas à jour la bdd. Problème de syntaxe ?
Voici le code commenté, appelé par la validation du formulaire :
echo $_POST['newnom']; //ok
echo $_POST['matricule']; //ok
//on traite le formulaire
$req=$bdd->prepare("UPDATE table_personnel SET nom=:nom WHERE matricule='".$_POST['matricule']."'"); //ok avec un matricule tapé en dur, mais ne prends pas avec le $_POST
$req->execute(array(':nom' => $_POST['newnom'],
));
En remplaçant dans la requête '".$_POST['matricule']."' par un matricule existant dans la bdd, la table est bien mise à jour.Le problème est donc bien a priori une erreur de syntaxe dans le WHERE.
J'ai testé le code en passant tous les paramètres dans la requête préparée :
try
{
$bdd=new PDO('mysql:host=localhost;dbname=oda','root','');
$bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch (PDOException $e) {
echo 'Échec lors de la connexion : ' . $e->getMessage();
}
echo $_POST['newnom']; //ok
echo $_POST['aNOM']; //ok
echo $_POST['matricule']; //ok
//on traite le formulaire
$req=$bdd->prepare("UPDATE table_personnel SET nom=:nom WHERE matricule=:matricule"); //ok avec un matricule tapé en dur, mais ne prends pas avec le $_POST
$req->execute(array(':nom' => $_POST['newnom'],
':matricule' => $_POST['matricule']
));
Les trois lignes echo $_... donnent le résultat attendu, mais aucune mise à jour dans la bdd.En remplaçant le matricule=:matricule par un matricule existant dans la bdd
$req=$bdd->prepare("UPDATE table_personnel SET nom=:nom WHERE matricule='123456789')
$req->execute(array(':nom' => $_POST['newnom']));
là, tout se passe bien...Mais ou est donc l'erreur ??
Merci d'avance