Modifier la valeur d'une variable

Résolu/Fermé
xXZOULOUXx
Messages postés
199
Date d'inscription
dimanche 15 décembre 2013
Statut
Membre
Dernière intervention
25 janvier 2017
- Modifié par jordane45 le 14/06/2016 à 00:36
xXZOULOUXx
Messages postés
199
Date d'inscription
dimanche 15 décembre 2013
Statut
Membre
Dernière intervention
25 janvier 2017
- 14 juin 2016 à 18:53
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

jordane45
Messages postés
36044
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
10 août 2022
4 275
Modifié par jordane45 le 14/06/2016 à 00:38
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                                                                 
0
xXZOULOUXx
Messages postés
199
Date d'inscription
dimanche 15 décembre 2013
Statut
Membre
Dernière intervention
25 janvier 2017
1
14 juin 2016 à 12:51
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 !
0
jordane45
Messages postés
36044
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
10 août 2022
4 275
Modifié par jordane45 le 14/06/2016 à 13:33
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());
}
0
xXZOULOUXx
Messages postés
199
Date d'inscription
dimanche 15 décembre 2013
Statut
Membre
Dernière intervention
25 janvier 2017
1
Modifié par xXZOULOUXx le 14/06/2016 à 14:26
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>
0
jordane45
Messages postés
36044
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
10 août 2022
4 275 > xXZOULOUXx
Messages postés
199
Date d'inscription
dimanche 15 décembre 2013
Statut
Membre
Dernière intervention
25 janvier 2017

Modifié par jordane45 le 14/06/2016 à 15:34
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.
0
xXZOULOUXx
Messages postés
199
Date d'inscription
dimanche 15 décembre 2013
Statut
Membre
Dernière intervention
25 janvier 2017
1 > jordane45
Messages postés
36044
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
10 août 2022

14 juin 2016 à 15:58
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.
0
jordane45
Messages postés
36044
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
10 août 2022
4 275
14 juin 2016 à 16:14
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());
}
0
xXZOULOUXx
Messages postés
199
Date d'inscription
dimanche 15 décembre 2013
Statut
Membre
Dernière intervention
25 janvier 2017
1
14 juin 2016 à 17:27
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!
0
jordane45
Messages postés
36044
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
10 août 2022
4 275 > xXZOULOUXx
Messages postés
199
Date d'inscription
dimanche 15 décembre 2013
Statut
Membre
Dernière intervention
25 janvier 2017

14 juin 2016 à 18:36
Ben là .... c'est donc un souci de requête SQL.
As tu essayé ta requête DIRECTEMENT dans ta BDD ????
Commence par ça.
0
xXZOULOUXx
Messages postés
199
Date d'inscription
dimanche 15 décembre 2013
Statut
Membre
Dernière intervention
25 janvier 2017
1
14 juin 2016 à 18:49
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)
0
xXZOULOUXx
Messages postés
199
Date d'inscription
dimanche 15 décembre 2013
Statut
Membre
Dernière intervention
25 janvier 2017
1
14 juin 2016 à 18:53
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
0
PatFoll
Messages postés
111
Date d'inscription
lundi 30 mai 2016
Statut
Membre
Dernière intervention
5 juillet 2016
24
Modifié par PatFoll le 14/06/2016 à 00:00
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#
-1
xXZOULOUXx
Messages postés
199
Date d'inscription
dimanche 15 décembre 2013
Statut
Membre
Dernière intervention
25 janvier 2017
1
14 juin 2016 à 12:52
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 !
0