petit problème avec update

Eléphant du PHP | 250 Messages

07 janv. 2006, 22:53

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é :shock:
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();
?> 

Mammouth du PHP | 19672 Messages

07 janv. 2006, 22:56

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';
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 250 Messages

07 janv. 2006, 23:45

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.

Mammouth du PHP | 19672 Messages

07 janv. 2006, 23:50

Fais voir la structure de ta table et ton code modifié ? :-k
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 250 Messages

08 janv. 2006, 00:03

<?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

Mammouth du PHP | 19672 Messages

08 janv. 2006, 00:30

Essaye en modifiant un brin ta requête:
$sql = "UPDATE membres SET vie = vie+0.1 WHERE pseudo='". $login ."'";
(sans les apostrophes)
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 250 Messages

09 janv. 2006, 23:23

Mince, ca ne fonctionne toujours pas: aucun message d'erreur mais le champ "vie" ne s'incrémente pas de +0.1 :cry:

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

09 janv. 2006, 23:51

d'où sort la variable "$login"

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphant du PHP | 250 Messages

10 janv. 2006, 00:22

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]

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

10 janv. 2006, 00:34

Hum... :-k

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 ?

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphant du PHP | 250 Messages

10 janv. 2006, 23:41

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.

Eléphant du PHP | 250 Messages

10 janv. 2006, 23:49

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) :roll: :oops:

Eléphant du PHP | 250 Messages

11 janv. 2006, 00:00

Trouvé !!!!

et honnetement, a force de tester :shock:

j'ai mis simplement ........... WHERE id=$id

:wink:

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

11 janv. 2006, 01:04

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 :wink:

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute