Page 1 sur 1
petit problème avec update
Posté : 07 janv. 2006, 22:53
par YVES
Bonjour,
J'utilise un update qui fonctionne parfaitement mais le problème c'est qu'il marche
pour tous les membres de la table...
Comment faire pour que ce ne soit que le membre en cours validant l'action qui soit seulement concerné
J'ai testé avec le login et meme la session mais ca ne fonctionne pas.
Voici le code:
<?php
session_start() ;
?>
<?php
$db= mysql_connect(localhost, zzzz, zzzz) or die("Impossible de se connecter à la base de données");
mysql_select_db('zzzz',$db) or die('Erreur de selection base'.mysql_error());
$sql = "UPDATE membres SET vie= vie+0.1";
mysql_query($sql) or die('Erreur SQL '.$sql.'<br>'.mysql_error());
mysql_close();
?>
Posté : 07 janv. 2006, 22:56
par Cyrano
Il manque une clause WHERE identifiant précisément une ligne de la table. Sans cette clause, toutes les lignes seront traitées également.
Donc :
Code : Tout sélectionner
UPDATE table SET champ = 'valeur' WHERE identifiant = 'id_xyz';
Posté : 07 janv. 2006, 23:45
par YVES
comment pourrais-je connaitre l'id du visiteur?!
J'ai rajouté la clause WHERE suivie de:
pseudo='$login'
$_SESSION['pseudo']
pseudo = $_SESSION['pseudo']
idem avec id et $_SESSION ['id']
en ces cas là, message d'erreur ou alors l'entrée "vie" de la base ne s'incrémente plus du tout.
Posté : 07 janv. 2006, 23:50
par Cyrano
Fais voir la structure de ta table et ton code modifié ?

Posté : 08 janv. 2006, 00:03
par YVES
<?php
session_start() ;
?>
<?php
$db= mysql_connect(localhost, zzzz, zzzz) or die("Impossible de se connecter à la base de données");
mysql_select_db('zzzz',$db) or die('Erreur de selection base'.mysql_error());
$sql = "UPDATE membres SET vie= 'vie+0.1' WHERE pseudo='$login'";
mysql_query($sql) or die('Erreur SQL '.$sql.'<br>'.mysql_error());
mysql_close();
?>
la table en voilà 1 bout, désolé si c'est pas tres "lisible"...
id int(10) Non auto_increment
pseudo varchar(60) Non
passe varchar(7) Non
email varchar(60) Non
date_inscri timestamp(14) Oui NULL
age smallint(3) Non 0
sexe char(1) Non H
avatar varchar(250) Non ./avatars/avx.gif
allopass char(3) Non non
statut varchar(20) Non citoyen lambda
gestion varchar(250) Non ./images/jetonvert.gif deplacement varchar(250) Non ./images/jetonvert.gif action varchar(250) Non ./images/jetonvert.gif situation varchar(50) Non en chemin
salaire int(5) Non 0
billet int(10) Non 1000
emprunt int(10) Non 0
compte int(10) Non 0
vie decimal(5,1) Non 3.0
Posté : 08 janv. 2006, 00:30
par Cyrano
Essaye en modifiant un brin ta requête:
$sql = "UPDATE membres SET vie = vie+0.1 WHERE pseudo='". $login ."'";
(sans les apostrophes)
Posté : 09 janv. 2006, 23:23
par YVES
Mince, ca ne fonctionne toujours pas: aucun message d'erreur mais le champ "vie" ne s'incrémente pas de +0.1

Posté : 09 janv. 2006, 23:51
par Truc
d'où sort la variable "$login"
Posté : 10 janv. 2006, 00:22
par YVES
de là ...........
if(isset($_POST['pseudo']))$login=addslashes($_POST['pseudo']);
else $login="";
ensuite elle est en session (et fonctionne)
$login = $_POST['pseudo']; puis
$_SESSION['pseudo'] = $login;
le pseudo du visiteur s'affiche bien quand je fais un echo
[/php]
Posté : 10 janv. 2006, 00:34
par Truc
Hum...
affiche la requete générée avec un echo :
echo $sql;
ensuite fait un copier/coller dans phpmyadmin pour verifier l'exécution.
sinon question bete as tu un membre avec ce pseudo ?
Posté : 10 janv. 2006, 23:41
par YVES
J'ai tapé cela dans php mysql
requête SQL:
"UPDATE membres SET vie = vie+0.1 WHERE pseudo='".$login. "'"
MySQL a répondu:Documentation
#1064 - You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '"UPDATE membres SET vie = vie+0.1 WHERE pseudo='". $login ."'"'
sinon, j'ai rajouté le echo $sql; dans mon script et le programme affiche une page blanche avec ceci
UPDATE membres SET vie = vie+0.1 WHERE pseudo=''
Pour finir, je ne suis pas sur d'avoir saisi ta derniere question.....
le $login est valable pour tous les pseudos qui pourraient etre rentrés par les membres.
pour l'instant y'en a qu'un, le mien dont je me sers pour tester en direct chez mon hébergeur.
Posté : 10 janv. 2006, 23:49
par YVES
Je vais p-etre dire une anerie , mais ca ne serait pas à cause du fait que le fameux $login (celui du membre) est aussi et en meme temps dans une session active et en cours?
(revoir mon script ci dessus)

Posté : 11 janv. 2006, 00:00
par YVES
Trouvé !!!!
et honnetement, a force de tester
j'ai mis simplement ........... WHERE id=$id

Posté : 11 janv. 2006, 01:04
par Truc
sinon, j'ai rajouté le echo $sql; dans mon script et le programme affiche une page blanche avec ceci
UPDATE membres SET vie = vie+0.1 WHERE pseudo=''
et donc la variable $login ne contient rien ici et donc la requete ne peut effectuer la mise à jour sauf si le champ login est vide !!!
Pour finir, je ne suis pas sur d'avoir saisi ta derniere question.....
le $login est valable pour tous les pseudos qui pourraient etre rentrés par les membres.
pour l'instant y'en a qu'un, le mien dont je me sers pour tester en direct chez mon hébergeur.
donc tu as ton pseudo il faudrait que la variable $login contient ton login pour que la requete effectuée la mise à jour sur tes données.
Mais avec l'id c'est encore mieux
