Problème de update d'une variable

Résolu
titan3131 Messages postés 77 Date d'inscription vendredi 26 février 2010 Statut Membre Dernière intervention 8 juin 2016 - 27 mai 2016 à 19:37
titan3131 Messages postés 77 Date d'inscription vendredi 26 février 2010 Statut Membre Dernière intervention 8 juin 2016 - 27 mai 2016 à 20:56
Bonjour,
Je travaille sur les bases de données et je me trouve confronté au problème suivant:
Quand je mets une valeur fixe dans mon update cela fonctionne

$bdd->exec('UPDATE membres SET niveau = 10 WHERE id = 1');

Quand je mets une valeur calculée cela ne fonctionne plus?

$niveau = $donnees['niveau']+1;
$bdd->exec('UPDATE membres SET niveau = $niveau WHERE id = 1');

Merci pour la correction car je ne vois pas l'erreur.

1 réponse

jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 344
27 mai 2016 à 19:49
Bonjour,
assures toi que la valeur issue de ta variable soit bien un nombre...
Pour cela tu peux utiliser IntVal (si c'est un entier) http://php.net/manual/fr/function.intval.php ou floatval si c'est un nombre à virgule .http://php.net/manual/fr/function.floatval.php

par exemple :
$niveau = intval($donnees['niveau'])+1;


De plus.. pense à utiliser les bloc try/catch pour que ça t'affiche les éventuelles erreurs php.
Sépare également la "requête" de son éxecution pour pouvoir en faire un ECHO si besoin (pour vérifier qu'elle est bonne)
et de préférence... utilise les requêtes préparées pour éviter les injections sql.



$niveau = intval($donnees['niveau'])+1;

//préparation de la requête
$sql = 'UPDATE membres SET niveau = :niveau WHERE id = 1';
$datas = array(":niveau"=>$niveau);

//exécution de la requête
try{
  $prepare = $bdd->prepare($sql);
  $res = $prepare->execute($datas);
}catch(Exception $e){
  echo "erreur : ".$e->getMessage();
}



Bien sûr, tu auras placé au préalable au début de ton script php la ligne de code suivante :
error_reporting(E_ALL);
histoire de bien afficher les erreurs php.

Et tu n'auras pas oublié non plus de mettre, dans ton fichier de connexion à la BDD le paramètre permettant d'afficher les erreurs PDO...
Comme ceci:

<?php
//Fichier de connexion à la bdd : cnxBdd.php
 try{
   $bdd = new PDO("mysql:host=localhost;dbname=tabdd;charset=UTF8", 'user', 'password');
   $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); //pour activer l'affichage des erreurs pdo
} catch(PDOException $e){
     echo 'ERROR: ' . $e->getMessage();
} 


0
titan3131 Messages postés 77 Date d'inscription vendredi 26 février 2010 Statut Membre Dernière intervention 8 juin 2016
27 mai 2016 à 20:56
merci jordane
j'apprends j'apprends
je vais pouvoir bien avancée
Cordialement
0
Rejoignez-nous