[RESOLU] problème update

Eléphanteau du PHP | 12 Messages

22 oct. 2018, 09:14

Bonjour,

je reviens vers vous car j'ai un souci pour l'update de ma BDD.
Pour essaie de faire clair, et court, je transfère les données Etat et ID via l'url en GET.

Sur ma page, je transforme ces deux données en variable.
je fais alors un update de ma base de données, avec un WHERE sur l'ID.

Lorsque j'affiche mes variable, les deux m'affichent bien les bonnes valeur, je me dis donc que je dois avoir une faute sur la syntaxe de ma requête SQL, mais je ne trouve pas.

Pour information aussi, lorsque je mets en dur la valeur de Etat, dans la requête, cela fonctionne.

Voici le code

merci

Code : Tout sélectionner

<?php try { // On se connecte à MySQL $bdd = new PDO('mysql:host=localhost;dbname=maintenance;charset=utf8', 'root', 'mon_pwd'); } catch(Exception $e) { // En cas d'erreur, on affiche un message et on arrête tout die('Erreur : '.$e->getMessage()); } if(isset( $_GET['num']) and isset( $_GET['etat'])) { $id=$_GET['num']; $etat=$_GET['etat']; //echo $id; } $sql = 'UPDATE demandes SET Etat='.$etat.' WHERE ID='.$id.''; // Prepare statement $stmt = $bdd->prepare($sql); // execute query $stmt->execute(); echo $etat; header('Location: http://srv-web:8080/maintenance/report.php'); exit(); ?>

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

22 oct. 2018, 11:55

Si état est une chaine de caractère alors il faut qu'elle soit entre guillemets si tu injectes les variables directement dans ta requête.

Mais je te recommande, de passer tes variables au moment de la commande execute(), c'est + sécurisé.
Inspire toi des exemples de la doc ici :
http://php.net/manual/fr/pdo.prepare.php
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphanteau du PHP | 12 Messages

22 oct. 2018, 13:58

merci . par contre j'ai tenté avec des guillemets mais ça ne fonctionne pas, je dois à mon avis mal les mettre.

je viens de regarder un peu les exemple mais c'est peu usine à gaz pour un amateur comme moi pour l'instant et vu le peu de sécurité dont j'ai besoin pour ce cas ci.

j'essaie un truc du genre, mais là ça me renvoie directement la chaîne $etat sans interpréter, donc j’imagine que ce n'est pas ça

Code : Tout sélectionner

$sql = 'UPDATE demandes SET Etat="$etat" WHERE ID='.$id.'';

Eléphanteau du PHP | 12 Messages

22 oct. 2018, 14:51

j'ai finalement testé ce dont tu parlais et j'obtiens ça

Code : Tout sélectionner

$sql = 'update Etat FROM demandes SET :etat WHERE ID = :ID' ; $sth = $bdd->prepare($sql, array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY)); $sth->execute(array(':ID' => $_GET['num'] , ':etat' => $_GET["etat"]));
mais ça ne fonctionne toujours pas.
je pense que je dois me rater au moment des variables GET.

une idée ? merci

Eléphanteau du PHP | 12 Messages

22 oct. 2018, 15:24

Bon j'ai finalement trouvé la réponse en suivant des exemples donnés

Code : Tout sélectionner

$sql = "UPDATE demandes SET Etat = :etat WHERE ID = :ID"; $stmt = $bdd->prepare($sql); $stmt->bindParam(':etat', $_GET['etat'], PDO::PARAM_STR); $stmt->bindParam(':ID', $_GET['num'], PDO::PARAM_INT); $stmt->execute();
merci du coup de main !