Modifier la valeur d'une variable [Résolu/Fermé]

Signaler
Messages postés
199
Date d'inscription
dimanche 15 décembre 2013
Statut
Membre
Dernière intervention
25 janvier 2017
-
Messages postés
199
Date d'inscription
dimanche 15 décembre 2013
Statut
Membre
Dernière intervention
25 janvier 2017
-
Bonjour, je souhaite juste que quand l'utilisateur vienne sur une page ça rajoue 1 à la variable qui se trouve dans la base de donnée.
Voici mon code (qui ne marche visiblement pas):
<?php
session_start();

$bdd = new PDO(CA_C'EST_BON_MAIS_PERSONNEL :p);

if (!empty($_SESSION['id'])) {
    $id = $_SESSION['id'];
    $ajout = $_SESSION['points'];
    $ajout++;
    $final = $ajout++;
$sql = 'UPDATE INTO membres(points) VALUES('.$final.')';
}
?>

Si une partie du code vous semble inutile c'est que je veux que seul les membres connectés puissent y accéder.

Merci de votre aide!


EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici :ICI

Merci d'y penser dans tes prochains messages.

3 réponses

Messages postés
31505
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
26 février 2021
3 283
Bonjour,

Vu que tu utilises PDO .. Autant le faire bien via les requêtes préparées.
De plus.. tu écris la variable $sql ... mais à aucun moment tu ne lances la requête....
Et enfin... pour être sûr que php prenne la valeur issue de la bdd comme un nombre... ajoute donc un intval

Donc :
<?php
//démarrage des sessions
session_start();

// pense à placer la connexion à ta bdd dans un autre fichier
// que tu n'auras qu'à inclure dans tes pages lorsque tu en as besoin !
$bdd = new PDO("CA_C'EST_BON_MAIS_PERSONNEL :p");


//récupération "propre" des variables AVANT de les utiliser:
$id = !empty($_SESSION['id']) ? $_SESSION['id'] : NULL;
$points = !empty($_SESSION['points']) ? intval($_SESSION['points']) : 0;

if ($id) {
 $points++; // on incrémente le nombre de points

  // on prépare la requete et les variables
  $sql = "UPDATE INTO membres(points) VALUES(:points)  WHERE id=:id";
  $datas = array(':points'=>$points, ':id'=>$id);

  //execution de la requete
  try{
    $prepare = $bdd->prepare($sql);
    $prepare->execute($datas);
  }catch(Exception $e){
     //en cas de pb dans la requete
     echo 'Error ! ' . $e->getMessage();
  }

} // fin du IF($id)
?> 


nb: tu avais également oublié de mettre un WHERE dans ta requete pour préciser quel id tu souhaitais updater....

Cordialement, 
Jordane                                                                 
Messages postés
199
Date d'inscription
dimanche 15 décembre 2013
Statut
Membre
Dernière intervention
25 janvier 2017
1
Merci beaucoup pour ta réponse mais ça ne marche touours pas, rien ne change dans ma base de données. Pourtant que je rajoute un <p><?php echo $points?></p> plus loin dans la page ça m'affiche bien la valeur point incrémentée de 1 ! Je ne sais pas d'ou viens le problème, comme tu as vu je suis pas trop calé en php, j'essaye d'ajouter à ma page les infos que je trouve sur internet :)
Du coup je suis toujours bloqué, tu sais d'ou ça peut venir? MERCI en tout cas !
Messages postés
31505
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
26 février 2021
3 283
Sûrement un PB dans la requête.
Pour que PDO t'affiche les erreurs... il faut, lors de la connexion ajouter quelques options.

Modifie ta connexion à la bdd en t'inspirant de ce code :

<?php
$host = 'localhost';
$user = 'le_user';
$pwd  = 'le_password';
$dbname  = 'ta_bdd';
$charset = ";charset=UTF8"; //si tu veux avoir de l'utf8
 try{
   $bdd= new PDO("mysql:host=".$host.";dbname=".$dbname.$charset.",".$user.",".$pwd);
   $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
   $bdd->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ);
} catch(PDOException $e) {
    die('Erreur : ' . $e->getMessage());
}
Messages postés
199
Date d'inscription
dimanche 15 décembre 2013
Statut
Membre
Dernière intervention
25 janvier 2017
1
Il ya avait des problèmes avec tes accolades et tes guillemets, j'espère les avoir réglé correctement. Quand je lance ma page ça m'affiche cette erreur du coup:
" Fatal error: Call to a member function prepare() on a non-object in /home/u767521012/public_html/+1.php on line 35 "


la ligne 35 étant:
" $prepare = $bdd->prepare($sql); "


Etant donné que c'est de ton code que provient l'erreur je n'ai aucune idée de sa signification ! x)

Je te remet le code complet avec les modification que j'ai apporté à tes guillemets et accolades:

<?php

session_start();

$host = 'monhost';
$user = 'monuser';
$pwd  = 'monpwd';
$dbname  = 'madbname';
 try{
     
 } catch (Exception $ex) {

   $bdd= new PDO('mysql:host=".$host.";dbname=".$dbname."',".$user.",".$pwd.");
   $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
   $bdd->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ);
} catch(PDOException $e) {
    die('Erreur : ' . $e->getMessage());
}

$id = !empty($_SESSION['id']) ? $_SESSION['id'] : NULL;
$points = !empty($_SESSION['points']) ? intval($_SESSION['points']) : 0;

if ($id) {
 $points++;

  $sql = "UPDATE INTO membres(points) VALUES(:points)  WHERE id=:id";
  $datas = array(':points'=>$points, ':id'=>$id);

  try{
    $prepare = $bdd->prepare($sql);
    $prepare->execute($datas);
  }catch(Exception $e){
     //en cas de pb dans la requete
     echo 'Error ! ' . $e->getMessage();
  }

} 
?> 


<html>
    <head>
    <title>########</title>
        <link rel="icon" href="icon.ico" />
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <link rel="stylesheet" type="text/css" href="css.css">
    </head>
    <body>
    <div class="menu"><a href="#############">Confirmer</a></div>
    <p><?php echo $points?></p>
    </body>
</html>
Messages postés
31505
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
26 février 2021
3 283 >
Messages postés
199
Date d'inscription
dimanche 15 décembre 2013
Statut
Membre
Dernière intervention
25 janvier 2017

Cette ligne :
 $bdd= new PDO('mysql:host=".$host.";dbname=".$dbname."',".$user.",".$pwd.");

est fausse ...
Pourquoi n'as tu pas gardé ceci ?
$bdd= new PDO("mysql:host=".$host.";dbname=".$dbname.$charset,$user,$pwd);


EDIT : Correction de la chaine de connexion.
Messages postés
199
Date d'inscription
dimanche 15 décembre 2013
Statut
Membre
Dernière intervention
25 janvier 2017
1 >
Messages postés
31505
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
26 février 2021

J'ai remis la bonne, mais j'ai toujours là même erreur:
" Fatal error: Call to a member function prepare() on a non-object in /home/u767521012/public_html/+1.php on line 36 "

Elle est à la ligne 36 parce que j'ai rajouter le $charset.
Messages postés
31505
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
26 février 2021
3 283
Tu as un catch en trop !
 } catch (Exception $ex) {


 try{
   $bdd= new PDO("mysql:host=".$host.";dbname=".$dbname.$charset,$user,$pwd);
   $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
   $bdd->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ);
} catch(PDOException $e) {
    die('Erreur : ' . $e->getMessage());
}
Messages postés
199
Date d'inscription
dimanche 15 décembre 2013
Statut
Membre
Dernière intervention
25 janvier 2017
1
L'erreur a changé, désormais c'est
Error ! SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'INTO membres(points) VALUES('8') WHERE id='1'' at line 1

Je pense qu'on se rapproche du but, merci de ton aide!
Messages postés
31505
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
26 février 2021
3 283 >
Messages postés
199
Date d'inscription
dimanche 15 décembre 2013
Statut
Membre
Dernière intervention
25 janvier 2017

Ben là .... c'est donc un souci de requête SQL.
As tu essayé ta requête DIRECTEMENT dans ta BDD ????
Commence par ça.
Messages postés
199
Date d'inscription
dimanche 15 décembre 2013
Statut
Membre
Dernière intervention
25 janvier 2017
1
Avec une requête similaire à celle du code pas moyen de changer. (peut être du au fait que je ne suis pas un pro).
Mais ça fonctionne parfaitement quand j'utilise la requête suivante:
UPDATE membres
SET points = '8'
WHERE id=1


(à noter que j'ai mis des valeurs et non des variables pour point et id)
Messages postés
199
Date d'inscription
dimanche 15 décembre 2013
Statut
Membre
Dernière intervention
25 janvier 2017
1
SUPEEEEER CA MARCHE! J'ai remplacer mon ancienne requête par celle qui fonction DIRECTEMENT en SQL et ça marche, avec les variables et leur incrémentations!!
Merci beaucoup j'aurai jamais réussi seul!

PS: Désolé pour le double post
Messages postés
111
Date d'inscription
lundi 30 mai 2016
Statut
Membre
Dernière intervention
5 juillet 2016
22
Bonsoir,
je m'y connais pas forcément en PHP, mais si tu souhaites que ta valeur augmente de (+)1 il faudrait peut être le stipuler quelque part ?
Après pour de l'aide concrète, désolé mais ça ne sera pas de ma part, disons que c'était plutôt un 'avis' :).
Bon Courage à toi.

#Pat Foll - Grincheux#
Messages postés
199
Date d'inscription
dimanche 15 décembre 2013
Statut
Membre
Dernière intervention
25 janvier 2017
1
Aha je suis pas calé mais tu es pire que moi :p
La commande " $final = $ajout++; " sert à ajouter +1 à la variable !
Merci quand même pour la réponse !