[PHP] Addition de points avec MySQL problème

Résolu/Fermé
TLLwebtv Messages postés 59 Date d'inscription samedi 10 mai 2008 Statut Membre Dernière intervention 9 septembre 2008 - 10 mai 2008 à 15:17
TLLwebtv Messages postés 59 Date d'inscription samedi 10 mai 2008 Statut Membre Dernière intervention 9 septembre 2008 - 12 mai 2008 à 19:08
Bonjour,
Je suis en train de monter un site internet de jeu avec des points, j'ai créer dans ma base de donnée une variable "points" qui est à 0 par défaut puisque l'on commence par 0 lors de la création du compte. Lorsque l'on gagne à un jeu on est redirigé vers une page avec ce code qui est sensé ajouter 0.05 point au compte de l'utilisateur :
$pointfin = $points+0.05;
mysql_query("UPDATE membres SET points='. $pointfin .' WHERE id='$id'") or die ('Erreur : '.mysql_error());
echo'<br>Vous avez '. $pointfin .' point';

En ce qui concerne la connexion à la base un code PHP s'en occupe un peu plus haut.
Je ne comprend pas ce qui se passe; quand je vais sur la page les points ne sont pas ajoutés.

Pouvez-vous m'aider ?

merci d'avance

Cordialement

Sylvain
A voir également:

32 réponses

sly-bzh Messages postés 415 Date d'inscription jeudi 10 janvier 2008 Statut Membre Dernière intervention 5 décembre 2009 118
12 mai 2008 à 16:53
Enfin ta preuve je veux bien^^ sauf qu'il faut être connecté^^ Mais je te fais confiance.

Pas grave on va tenter autre chose. Si tu fais :
mysql_query("UPDATE membres SET points = '3' WHERE id='$id'") or die ('Erreur : '.mysql_error());
Est-ce que ça marche ? (est ce que les points sont à 3 ?

Si oui : essaye de faire ça :
<?php
session_start();
// Aller chercher les configurations My SQL et verifier l'identite de la personne connectée
require_once('config.php');
require_once('verifications.php');
// Récupération du nombre de points
$sql = mysql_query("SELECT points FROM nom_de_ta_table WHERE id='$id'");
$result = mysql_fetch_array($sql) or die(mysql_error());
$points = $result[0];
echo "avant chgmt, l'id $id avait $points points<br/>";
// Calcul des points
$pointfin = $points+0.05;
echo "normalement après l'update il devrait avoir $pointfin points<br/>";
// Operation
mysql_query("UPDATE membres SET points='". $pointfin ."' WHERE id='$id'") or die ('Erreur : '.mysql_error());
// Rappel le nombre de points
echo'<br/>Vous avez '. $pointfin .' points';
?> 


Et si non : essaye ça :
mysql_query("UPDATE membres SET points = 3 WHERE id='$id'") or die ('Erreur : '.mysql_error());
1
sly-bzh Messages postés 415 Date d'inscription jeudi 10 janvier 2008 Statut Membre Dernière intervention 5 décembre 2009 118
10 mai 2008 à 18:11
Bonjour.
Concernant ton problème d'UPDATE, je pense que ton soucis se situe au niveau des guillemets. Essaye ça pour voir :
mysql_query("UPDATE membres SET points='". $pointfin ."' WHERE id='$id'") or die ('Erreur : '.mysql_error());
ou carrément :
mysql_query("UPDATE membres SET points='$pointfin' WHERE id='$id'") or die ('Erreur : '.mysql_error());

D'autre part j'ai repéré 2 erreurs sur ta dernière ligne :
echo'<br/>Vous avez '. $pointfin .' points';

En espérant avoir de tes nouvelles

Sylvain
0
TLLwebtv Messages postés 59 Date d'inscription samedi 10 mai 2008 Statut Membre Dernière intervention 9 septembre 2008 11
11 mai 2008 à 06:06
Merci beaucoup, je vais essayer ça et je vous préviens.
Cordialement

Sylvain
0
TLLwebtv Messages postés 59 Date d'inscription samedi 10 mai 2008 Statut Membre Dernière intervention 9 septembre 2008 11
11 mai 2008 à 07:22
Re-Bonjour,
J'ai essayé et ça ne marche pas, je vais donc expliquer un peut plus en détail ce que je fais : il s'agit d'un site de jeux où lorsque la personne a gagné elle est redirigée vers la page "gain.php" ou il est écrit :

<?php
session_start();
// Aller chercher les configurations My SQL et verifier l'identite de la personne connectée
require_once('config.php');
require_once('verifications.php');
// Calcul des points
$pointfin = $points+0.05;
// Operation
mysql_query("UPDATE membres SET points='". $pointfin ."' WHERE id='$id'") or die ('Erreur : '.mysql_error());
// Rappel le nombre de points
echo'<br/>Vous avez '. $pointfin .' points';
?>
Le but est donc qu'en voyant cette page l'utilisateur puisse gagner 0.05 points.
Merci d'avance

Cordialement
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
sly-bzh Messages postés 415 Date d'inscription jeudi 10 janvier 2008 Statut Membre Dernière intervention 5 décembre 2009 118
11 mai 2008 à 14:23
Et tu ne veux pas mettre ton code de verifications.php (voir même de config.php mais je ne pense pas qu'il y ai de problème ici) notamment comment tu récupères ta valeur $points, parce que ce script là ne présente pas de soucis à priori

PS. Répondre un dimanche matin à 6h06 !!!!!! Rassure moi tu n'habites pas en France (décalage horaire toussa) ou alors tu n'as pas dormis de la nuit ????
0
TLLwebtv Messages postés 59 Date d'inscription samedi 10 mai 2008 Statut Membre Dernière intervention 9 septembre 2008 11
11 mai 2008 à 21:16
Bonjour,
j'habite la France mais je me réveille toujours très tot :-).

Verifiacation.php
<?php
session_start();
require_once('config.php');
$titre_page='Inscription';
include_once('haut.php');
$email=formulaires($_POST['email']);
$pseudo=formulaires($_POST['pseudo']);
$parrain=formulaires($_POST['parrain']);
$mdp=formulaires($_POST['mdp']);
$mdp2=formulaires($_POST['mdp2']);
$points=formulaires($_POST['points']);
$gra1=formulaires($_POST['gra1']);
$gra2=formulaires($_POST['gra2']);
$gra3=formulaires($_POST['gra3']);
$gra4=formulaires($_POST['gra4']);

//// VERIFICATIONS ////
if(!$mdp || !$mdp2 || strlen($mdp) < 5)
	{
	echo'Votre mot de passe ou sa confirmation est inexisant ou votre mot de passe fait moins de 5 carractères<br /><a href="inscription.php" onClick="history.back()">Retour</a>';
	include_once('bas.php');
return FALSE;
	}
if($mdp!=$mdp2)
	{
	echo'Votre mot de passe n\'est pas le meme que sa confirmation<br /><a href="inscription.php" onClick="history.back()">Retour</a>';
	include_once('bas.php');
return FALSE;
	}
if(!$pseudo || strlen($pseudo) > 15)
	{
	echo'Votre pseudo est inexisant ou fait plus de 15 carractères<br /><a href="inscription.php" onClick="history.back()">Retour</a>';
	include_once('bas.php');
return FALSE;
	}
if(!$email)
   	{
	echo'Votre e-mail est innexistant.<br /><a href="inscription.php" onClick="history.back()">Retour</a>';
	include_once('bas.php');
return FALSE;
   	}
	
//// VERIFICATIONS DES EXISTANCES ////
$reponse_mail=mysql_query("SELECT email FROM membres WHERE email='$email'") or die ('Erreur : '.mysql_error());	//verification si e-mail existe déjà
$count_mail=mysql_num_rows($reponse_mail);
if($count_mail == 1)
	{
	echo'Cet e-mail existe déjà.<br /><a href="inscription.php" onClick="history.back()">Retour</a>';
	include_once('bas.php');
return FALSE;
	}
$reponse_pseudo=mysql_query("SELECT pseudo FROM membres WHERE pseudo='$pseudo'") or die ('Erreur : '.mysql_error());	//verification si pseudo existe déjà
$count_pseudo=mysql_num_rows($reponse_pseudo);
if($count_pseudo == 1)
	{
	echo 'Ce pseudo existe déjà.<br /><a href="inscription.php" onClick="history.back()">Retour</a>';
	include_once('bas.php');
return FALSE;
	}
		
	for ($ligne=0;$ligne<30;$ligne++)		//Création d'un identifiant
		{
		@$session.=substr('0123456789AZERTYUIOPMLKJHGFDSQWXCVBN',(rand()%(strlen('0123456789AZERTYUIOPMLKJHGFDSQWXCVBN'))),1);
		}

		$mdp=md5($mdp);		//Codage du mot de passe
		mysql_query("INSERT INTO membres VALUES ('', '$session', '$pseudo', '$parrain', '$mdp', '$email', '$points')") or die ('Erreur : '.mysql_error());	//insertion dans la bdd
echo'Merci de vous vous etre inscrit à '.$nom_du_site.'<br /><a href="index.php">Identifiez vous !</a>';
include_once('bas.php');
?>

Vérification est un script qui existe déjà, ce n'est pas moi qui l'ai écrit.
Et le fichier config.php :
<?php
$serveur='localhost';	
$user='****';	
$mdp='***';	
$base='****';	

$nom_du_site='KDO Plus';		//Le nom de votre site
$votre_email='***@wanadoo.fr';	//Votre e-mail
$localite='local';	

//Les meta tags (référencement)
$meta_description='Jouez et grattez';		
$meta_mots_cles='grattages';	



@$connect=mysql_connect($serveur, $user, $mdp) or die ('Erreur : '.mysql_error());
@mysql_select_db($base) or die ('Erreur : '.mysql_error());
require_once('fonctions.php');
?>

Voilà tout, est-ce que le problème pourrait venir de la base de donnée ?
merci d'avance

Très cordialement

Sylvain
0
sly-bzh Messages postés 415 Date d'inscription jeudi 10 janvier 2008 Statut Membre Dernière intervention 5 décembre 2009 118
11 mai 2008 à 23:49
Oui c'est bien beau tout ça... A priori je n'ai pas vu d'erreurs.
Mais ça ne me dis pas comment tu récupères ton $points. Je ne vois pas d'autres possibilité pour l'instant mais bon je passe peut être à coté de quelque chose d'autre.

Et la structure de ta base de donnée elle donne quoi ?

Au fait, carractère ne prend qu'un R et innexistant un seul N ;)

PS. Je veux bien, moi aussi ça m'arrive de me lever tôt mais de là à être sur CCM à 6H un dimanche matin !!! :waou:
0
TLLwebtv Messages postés 59 Date d'inscription samedi 10 mai 2008 Statut Membre Dernière intervention 9 septembre 2008 11
12 mai 2008 à 05:56
Bonjour,
En ce qui concerne la base de donnée voici comment elle est :
Champ Type Interclassement Attributs Null Défaut

points int(10) UNSIGNED Non 0

Je pense que le problème vient de là: je ne récupère pas $points parce que je vous ai donné en terme de page PHP où il pourrait y avoir une erreur.
Comment faudrait-il faire pour récupérer $points alors ?
Merci d'avance

Cordialement

Sylvain
0
sly-bzh Messages postés 415 Date d'inscription jeudi 10 janvier 2008 Statut Membre Dernière intervention 5 décembre 2009 118
12 mai 2008 à 10:34
Ben c'est sûr que si tu ne récupères pas les valeurs de tes points dans ta base de données tu auras du mal à l'incrémenter...
Tu peux tout simplement faire un "SELECT points FROM nom_de_ta_table WHERE id=$id";
Ca te donnerait :
<?php
session_start();
// Aller chercher les configurations My SQL et verifier l'identite de la personne connectée
require_once('config.php');
require_once('verifications.php');
// Récupération du nombre de points
$sql = mysql_query("SELECT points FROM nom_de_ta_table WHERE id='$id'");
$result = mysql_fetch_array($sql) or die(mysql_error());
$points = $result[0];
// Calcul des points
$pointfin = $points+0.05;
// Operation
mysql_query("UPDATE membres SET points='". $pointfin ."' WHERE id='$id'") or die ('Erreur : '.mysql_error());
// Rappel le nombre de points
echo'<br/>Vous avez '. $pointfin .' points';
?> 

M'enfin bon ça tu aurais pu le trouver tout seul non ?

PS. 5h56 de plus en plus tôt.......
0
TLLwebtv Messages postés 59 Date d'inscription samedi 10 mai 2008 Statut Membre Dernière intervention 9 septembre 2008 11
12 mai 2008 à 13:23
Re-bonjour,
Tout d'abord merci pour continuer à m'aider au fur et à mesure.
J'ai essayé de placer ce code dans la page "gain.php" mais rien ne change, quand j'y vais dessus mes points n'augmentent pas :-(. Je vais appeler le service technique de mon hébergeur, ils pourront peut-être m'aider.
Je vous tiens au courant dans environ 2 h.

Encore merci

Cordialement

Sylvain
0
TLLwebtv Messages postés 59 Date d'inscription samedi 10 mai 2008 Statut Membre Dernière intervention 9 septembre 2008 11
12 mai 2008 à 13:33
L'hébergeur est fermé (ce qui est assez rare lors des jours fériés) par contre je pense que le problème vient de la base.
0
sly-bzh Messages postés 415 Date d'inscription jeudi 10 janvier 2008 Statut Membre Dernière intervention 5 décembre 2009 118
12 mai 2008 à 13:36
Je me demandais si tu avais quelque part renseigné la valeur de $id ?

Parce que si ta page ne contient QUE le code si dessus ça ne peut pas marcher sans que tu donnes une valeur à ton $id.
0
TLLwebtv Messages postés 59 Date d'inscription samedi 10 mai 2008 Statut Membre Dernière intervention 9 septembre 2008 11
12 mai 2008 à 15:41
La valeur ID est contenue dans la base de donnée MySQL.
J'ai remarqué quelque chose dans votre code : $result[0], pourquoi 0 ?
Je pensais à quelque chose également : est-ce que le problème ne pourrait pas venir de la configuration de la valeur points dans la base de donnée ? Est-ce que "INT" correspond à ce qu'il me faut ?
Merci d'avance

Cordialement
0
sly-bzh Messages postés 415 Date d'inscription jeudi 10 janvier 2008 Statut Membre Dernière intervention 5 décembre 2009 118
12 mai 2008 à 16:28
INT correspond bien à ce qu'il te faut (tu sais on peut se tutoyer c'est quand même plus convivial ;) ) étant donné que tu utilises des chiffres.
Le result[0] correspond à la première donnée du tableau dans lequel j'ai mis les résultats de ma requête sql ($result = mysql_fetch_array($sql)). Il est vrai qu'au début ça surprend mais je t'assures que tableau[0] correspond bien à la première donnée.

Maintenant passons à ton ID. Je veux bien que cet ID soit contenu dans la base MySQL. Encore faut-il que tu en informe ton script php. Et pour ce faire il faudrait que tu m'indiques comment tu sais quel est l'utilisateur qui arrive à cette page gain.php ?
Je veux dire par là : quelle donnée te permet de savoir que c'est l'utilisateur ayant l'ID 23 et non celui ayant l'ID 69 qui est présent sur ta page et donc que c'est à lui que tu dois ajouter 0,5 points.
0
TLLwebtv Messages postés 59 Date d'inscription samedi 10 mai 2008 Statut Membre Dernière intervention 9 septembre 2008 11
12 mai 2008 à 16:32
C'est une très bonne remarque; le problème vient, à mon avis, de là. Pourtant $id correspond bien à l'ID de la personne qui est connecté. Donc $id ne devrait pas poser de problème. Par exemple quand j'afficher $pseudo ça m'affiche bien mon pseudo et pourtant il y en a plusieurs.
Cordialement

Sylvain
0
sly-bzh Messages postés 415 Date d'inscription jeudi 10 janvier 2008 Statut Membre Dernière intervention 5 décembre 2009 118
12 mai 2008 à 16:41
Si tu fais un echo $id; au tout début de ton script, ça te donne quoi ?
0
TLLwebtv Messages postés 59 Date d'inscription samedi 10 mai 2008 Statut Membre Dernière intervention 9 septembre 2008 11
12 mai 2008 à 16:47
J'ai essayé et effectivement ça m'affiche mon ID (c'est à dire 3). Il reconnait donc bien l'ID de la personne.

echo'<br/>Vous avez '. $pointfin .' points. Votre ID est '. $id . '';


Cordialement

Sylvain
0
TLLwebtv Messages postés 59 Date d'inscription samedi 10 mai 2008 Statut Membre Dernière intervention 9 septembre 2008 11
12 mai 2008 à 17:03
J'ai essayé le premier code et rien ne changeait par contre dans le deuxième le nombre de point passait bien à 3 ! Je vais essayer de réfléchir à comment modifier cette ligne.
Cordialement

Sylvain
0
sly-bzh Messages postés 415 Date d'inscription jeudi 10 janvier 2008 Statut Membre Dernière intervention 5 décembre 2009 118
12 mai 2008 à 17:09
Oui en fait c'est tout con mais j'y ai pensé que avant d'envoyer le dernier message : vu que tes points sont des chiffres (INT) tu ne dois pas mettre de guillemets sinon ce n'est pas considéré comme un INT et donc pas mis à jour.
Et donc normalement cela devrait fonctionner :
<?php
session_start();
// Aller chercher les configurations My SQL et verifier l'identite de la personne connectée
require_once('config.php');
require_once('verifications.php');
// Récupération du nombre de points
$sql = mysql_query("SELECT points FROM nom_de_ta_table WHERE id='$id'");
$result = mysql_fetch_array($sql) or die(mysql_error());
$points = $result[0];
// Calcul des points
$pointfin = $points+0.05;
// Operation
mysql_query("UPDATE membres SET points = $pointfin WHERE id='$id'") or die ('Erreur : '.mysql_error());
// Rappel le nombre de points
echo'<br/>Vous avez '. $pointfin .' points';
?> 

Tout ça pour ça... Je suis vraiment désolé de ne pas y avoir pensé plus tôt
0
TLLwebtv Messages postés 59 Date d'inscription samedi 10 mai 2008 Statut Membre Dernière intervention 9 septembre 2008 11
12 mai 2008 à 17:14
Le code ne marche pas cependant quand je fais gagner 1 point à l'utilisateur ça marche !.
Le problème vient donc du 0.05 point. Il ne doit pas aimer les virgules mais le problème c'est que je suis obligé d'utiliser des virgules sinon ça fait beaucoup trop de points et puis ça m'empêche de proposer certains services qui ne font pas gagner beaucoup de points.
As-tu une solution ?

Merci beaucoup pour toute cette aide, grâce à toi j'ai presque fini mon site de jeux gratuits; il ne me restera plus qu'à sécurisé ma page gain.php et ajouter quelques fonctions.

Cordialement

Sylvain
0