Modifier la valeur d'une variable
Résolu
Utilisateur anonyme
-
Utilisateur anonyme -
Utilisateur anonyme -
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):
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!
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
-
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-
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 ! -
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()); } -
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>
-
-
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()); }-
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! -
-
-
-
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#