[RESOLU] pdo update

Eléphant du PHP | 150 Messages

11 août 2014, 13:29

bonjour
j'ai un probleme lors de l'update de ma table

je fait ceci :
	$id="1";
			//mise a jour des donnees dans la BDD
			$locat = $db->prepare("UPDATE membre SET(`num_licence`,`nom`, `prenom`, `sexe`, `profession`, `telephone`, `adresse_1`, `adresse_2`, `code_postal`, `ville`, `date_naissance`, `type_licence` , `mineur`, `email`) 
				VALUES ( :licence , :nom , :prenom , :sexe , :profession , :telephone , :adresse_1 , :adresse_2 , :code_postal , :ville , :date_naissance , :type_licence , :mineur , :email ) WHERE id= :id ;");
			$locat->execute(array(
				"id" => $id,
				"licence" => $_POST['licence'],
				"nom" => stripslashes(htmlentities($_POST['nom'])),
				"prenom" => stripslashes(htmlentities($_POST['prenom'])),
				"sexe" => $_POST['sexe'],
				"profession" => $_POST['profession'],
				"telephone" => $_POST['telephone'],
				"adresse_1" => stripslashes(htmlentities($_POST['adresse_1'])),
				"adresse_2" => stripslashes(htmlentities($_POST['adresse_2'])),
				"code_postal" => $_POST['code_postal'],
				"ville" => stripslashes(htmlentities($_POST['ville'])),
				"date_naissance" => $_POST['date_naissance'],
				"email" => $_POST['email'],
				"type_licence" => $_POST['type_licence'],
				"mineur" =>  $_POST['mineur']
							));
				echo "<div class=\"succes\">Votre demande a bien ete enregistrer</div>";
		}
		else{
			echo "<div class=\"erreur\">Votre demande a echoué</div>";
		}
et une fois executer la reponce est : "Votre demande a bien ete enregistrer"
pourtant la mise a jour n'a pas ete faite en BDD

"aucune erreur qui apparaît non plus "

merci par avance de votre aide

ynx
Mammouth du PHP | 586 Messages

11 août 2014, 14:35

Salut,

Par défaut le rapport d'erreur de PDO est en mode silencieux. Pour voir les erreurs tu dois donc définir le mode du rapport d'erreur dans lors de la connexion :
http://php.net/manual/fr/pdo.error-handling.php (voir les exemples)

Au passage tu n'as pas besoin de protéger tes données si tu utilises les requêtes préparées, les injections sql sont automatiquement contrées.
De plus htmlentities doit être utilisé uniquement lors de l'affichage en html, pas lors de l'insertion en bdd, et stripslashes n'est pas utile ici.

Bonne journée

Eléphant du PHP | 150 Messages

11 août 2014, 15:47

je viens d'essayer comme indiquer sans vérification :
$id="1";
			//insertion des donnees dans la BDD
			$locat = $db->prepare("UPDATE membre SET(`num_licence`,`nom`, `prenom`, `sexe`, `profession`, `telephone`, `adresse_1`, `adresse_2`, `code_postal`, `ville`, `date_naissance`, `type_licence` , `mineur`, `email`) 
				VALUES ( :licence , :nom , :prenom , :sexe , :profession , :telephone , :adresse_1 , :adresse_2 , :code_postal , :ville , :date_naissance , :type_licence , :mineur , :email ) WHERE id= :id ;");
			$locat->execute(array(
				"id" => $id,
				"licence" => $_POST['licence'],
				"nom" => $_POST['nom'],
				"prenom" => $_POST['prenom'],
				"sexe" => $_POST['sexe'],
				"profession" => $_POST['profession'],
				"telephone" => $_POST['telephone'],
				"adresse_1" => $_POST['adresse_1'],
				"adresse_2" => $_POST['adresse_2'],
				"code_postal" => $_POST['code_postal'],
				"ville" => $_POST['ville'],
				"date_naissance" => $_POST['date_naissance'],
				"email" => $_POST['email'],
				"type_licence" => $_POST['type_licence'],
				"mineur" =>  $_POST['mineur']
							));
							
				echo "<div class=\"succes\">Votre demande a bien ete enregistrer</div>";
		}
		else{
			echo "<div class=\"erreur\">Votre demande a echoué</div>";
		}
et la mise a jour ne se fait toujours pas

"une autre idée ?"

ynx
Mammouth du PHP | 586 Messages

11 août 2014, 16:07

As tu bien modifié le mode du rapport d'erreur PDO ?
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
Sinon tu peux essayer de contrôler le retour de la méthode execute :
$locat = $db->prepare(/* ...requête préparée... */);
$succes = $locat->execute(array(/* ...paramètres... */));

if (!$succes) {
	echo "\nPDO::errorInfo():\n";
	print_r($locat->errorInfo());
}

Eléphant du PHP | 150 Messages

11 août 2014, 17:31

en utilisant vote code j'ai cette erreur qui apparaît

Code : Tout sélectionner

PDO::errorInfo(): Array ( [0] => 42000 [1] => 1064 [2] => You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(`num_licence`,`nom`, `prenom`, `sexe`, `profession`, `telephone`, `adresse_1`, ' at line 1 )

ynx
Mammouth du PHP | 586 Messages

12 août 2014, 12:26

Donc tu as une erreur de syntaxe dans ta requête sql.

Effectivement, tu confond la syntaxe INSERT avec la syntaxe UPDATE. Corrige ta requête comme ceci :
UPDATE membre SET `num_licence` = :licence, `nom` = :nom, ...etc... WHERE id= :id;
Bonne journée

Eléphant du PHP | 150 Messages

12 août 2014, 23:08

merci beaucoup de votre aide

sa marche NIKEL