Intégrer/modifer des points à un jeu à partir d'une BDD mysql [Résolu]

Signaler
Messages postés
60
Date d'inscription
lundi 11 janvier 2010
Statut
Membre
Dernière intervention
10 mai 2012
-
Messages postés
60
Date d'inscription
lundi 11 janvier 2010
Statut
Membre
Dernière intervention
10 mai 2012
-
Bonjour,
Je vous expose mon problème : j'ai créé un petit jeu simple : le but est de trouver un numéro mystère .
Je souhaites qu'à chaque fois que l'utilisateur appui sur le bouton de validation , -1 soit soustrait de son crédit et lorsque que le crédit soit à zero il le redirige vers une pages pour recharger son crédit . Ensuite donné un temps à l'utilisateur par exemple 24h pour trouver le nombre mystère et que lorsque le temps est écouler , il ne puisse plus rentrer de nombre et qu'il soit noté le pseudo du gagnant .

Donc J'ai créé une base de donnée en md5 (voir la requete sql ci dessous)

CREATE TABLE IF NOT EXISTS `utilisateurs` (
`id_user` int(10) unsigned NOT NULL AUTO_INCREMENT,
`login` varchar(50) NOT NULL DEFAULT '',
`pass` varchar(50) NOT NULL DEFAULT '',
`nom` varchar(50) NOT NULL DEFAULT '',
`prenom` varchar(50) NOT NULL DEFAULT '',
`daten` varchar(50) NOT NULL DEFAULT '',
`adresse1` varchar(50) NOT NULL DEFAULT '',
`adresse2` varchar(50) NOT NULL DEFAULT '',
`codepostal` int(10) NOT NULL,
`ville` varchar(50) NOT NULL DEFAULT '',
`pays` varchar(50) NOT NULL DEFAULT '',
`tel1` varchar(50) NOT NULL DEFAULT '',
`email` varchar(50) NOT NULL DEFAULT '',
`privilege` varchar(50) NOT NULL DEFAULT '',
`credit` varchar(50) NOT NULL DEFAULT '',
PRIMARY KEY (`id_user`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;

et voici le code du jeu développé jusqu'à maintenant avec quelques indications pour aider à la compréhension :

<?php session_start(); ?>
<?php require_once('auth/connexion.php'); ?>
//jeu
<?php
if (!isset($_POST['reponse']) AND !isset($_POST['counter']))
{
$rand = rand(0,1000);
$cnt = $_SESSION['credit'];
echo 'Tentez votre chance !!!

Vous aves 100 coups pour trouver le nombre mystère compris entre 0 et 1000
';
}
else if (isset($_POST['reponse']) AND empty($_POST['reponse']))
{
$rand = $_POST['random'];
$cnt = $_SESSION['credit'];
echo 'N\'ouliez pas de mettre une reponse!!!
';
}
else
{
$rand = $_POST['random'];
$cnt = $_SESSION['credit'];
$number = $_POST['reponse'];
if (preg_match('![0-9]!', $number))
{
$cnt--;

if ($number < $rand)
echo 'le nombre est superieur!
';
else if ($number > $rand)
echo 'le nombre est inferieur!
';
else if ($number == $rand)
{
echo 'vous avez gagné !!!
';
echo '[index-5.php rejouer?] - [# fermer la fenetre]';
exit ();
}
}
else
{
echo 'Votre réponse ne doit contenir que des chiffres !!!
';
}
}

if ($cnt > 0)
{
echo
'Vous avez encore ' . $cnt . ' coups à jouer
<form action="index-5.php" method="post" name="lol">




</form>';

$sql = mysql_query("SELECT credit FROM utilisateurs WHERE id_user='$id_user'");
$result = mysql_fetch_array($sql) or die(mysql_error());
$cnt = $result[0];

// Calcul des points
$pointfin = $cnt-1;

// Operation
mysql_query("UPDATE utilisateurs SET credit = $pointfin WHERE id_user='$id_user'") or die ('Erreur : '.mysql_error());

// Rappel le nombre de points
echo'
Vous avez '. $pointfin .' points';

echo '<script language="javascript">document.lol.reponse.focus();</script>';
echo '[# fermer la fenetre]';
}
else
{
echo 'Vous avez perdu ! Le nombre secret etait ' . $rand . ' !
';
echo '[index-5.php rejouer?] - [# fermer la fenetre]';
}
?>

quand aprés identification du membre et redirection du membre à la page du jeu, j'ai les soucis suivant :

1- lorsque l'on joue au jeu : il passe de 200 points à 199 points mais ne descend pas en dessous et 199 n'est pas inscrit dans la base de donnée .

2- sur ma page j'ai les deux erreurs suivantes :

Notice: Undefined variable: id_user in C:\Program Files\EasyPHP5.3.0\www\site01\jeu.php on line 52

Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in C:\Program Files\EasyPHP5.3.0\www\site01\jeu.php on line 53
Erreur de syntaxe pr�s de '' � la ligne 1

En vous remerciant par avance pour votre aide .

16 réponses

Messages postés
567
Date d'inscription
mercredi 4 octobre 2006
Statut
Membre
Dernière intervention
30 août 2011
10
Il permet de gagner de l argent ton jeu ? Parce que si oui, j'y joue toute suite... C'est quoi l'adresse ?

Je te met sur la piste : Clique droit > Code source de la page...

Pour tes questions
1 - En sql, tu as le droit de faire UPDATE utilisateurs SET macoloneint = macoloneint-1 WHERE id_user='12'
Ensuite, réponse à 1 et 2 :
Une Notice php, n'est pas une erreur mais une information. Voyons voir :
Notice: Undefined variable: id_user in C:\Program Files\EasyPHP5.3.0\www\site01\jeu.php on line 52 

Notice = Information
Undefined variable: id_user = Une variable est indéfinie mais utilisée
in C:\Program Files\EasyPHP5.3.0\www\site01\jeu.php on line 52 = Dans le fichier jeux.php sur la ligne 52

Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in C:\Program Files\EasyPHP5.3.0\www\site01\jeu.php on line 53 

Warning = La encore ce n'est pas une erreur qui bloque le déroulement de l'application mais c'est une erreur sur la ligne, les resultats serons donc fossés
mysql_fetch_array() expects parameter 1 to be resource = La c'est l'erreur, elle dit que ta requete semble incorrect (Probablement du à l'erreur du dessus)

_________________________________
Min iPomme
Messages postés
60
Date d'inscription
lundi 11 janvier 2010
Statut
Membre
Dernière intervention
10 mai 2012

Bonsoir, merci pour ta réponse et ça sera avec grand plaisir que je te donnerai l'adresse du site mais il faut déja que celui-ci fonctionne ... ;-)

En tout cas, Merci de t'interesser à mon sujet,
donc je me suis un peu servi de ce que tu m'as donné comme info . le code inséré en haut est jeu.php La ligne 52 correspond à la partie du code suivant :

$sql = mysql_query("SELECT credit FROM utilisateurs WHERE id_user='$id_user'");

j'ai modifié le code par ;

$sql = "UPDATE utilisateurs SET credit='credit'-1 WHERE id_user='$id_user'";

et j'ai toujours le même code informatif ...
Messages postés
60
Date d'inscription
lundi 11 janvier 2010
Statut
Membre
Dernière intervention
10 mai 2012

excuse moi c'est cette ligne g modifié :

mysql_query("UPDATE utilisateurs SET credit = $pointfin WHERE id_user='$id_user'")
Messages postés
567
Date d'inscription
mercredi 4 octobre 2006
Statut
Membre
Dernière intervention
30 août 2011
10
Essai :

$sql = "UPDATE utilisateurs SET credit=credit-1 WHERE id_user='$id_user'"; 

Tu as le droit de faire des opérations sur une colonne d'une table avec :
UPDATE matable SET colonne=colonne-1

_________________________________
Min iPomme
Messages postés
60
Date d'inscription
lundi 11 janvier 2010
Statut
Membre
Dernière intervention
10 mai 2012

ben j'ai essayé , mais je m'aperçois que le soucis vient toujours de la ligne 52 :

(ligne 52)
$sql = mysql_query("SELECT credit FROM utilisateurs WHERE id_user='$id_user'");

et non de la (ligne61):
$sql = "UPDATE utilisateurs SET credit=credit-1 WHERE id_user='$id_user'" or die ('Erreur : '.mysql_error());

tes modifications m'ont quand même permis de retirer un message ... mais il en a tout de même un qui perciste :

Notice: Undefined variable: id_user in C:\Program Files\EasyPHP5.3.0\www\site01\jeu.php on line 52

Et je ne vois vraiment pas d'où vient l'erreur !!!

ARRRRFFFFF
Messages postés
60
Date d'inscription
lundi 11 janvier 2010
Statut
Membre
Dernière intervention
10 mai 2012

Bon j'ai trouvé d'où venez le soucis du moins je penses... j'ai inséré la ligne : $id_user = $_SESSION['id_user'];

si tu souhaites voir la modif j'ai indiqué les 3 modifs par " // modification que j'ai apportée" pour voir si je n'ai pas fait pire que mieux.

Donc je te reporte le nouveau code (voir ci-dessous) mais il refuse quand même de soustraire - 1 à ma colonne "crédit" pourtant plus de message et pas d'erreurs :

<?php require_once('auth/connexion.php'); ?>
<?php
if (!isset($_POST['reponse']) AND !isset($_POST['counter']))
{
$rand = rand(0,1000);
$cnt = $_SESSION['credit']; // modification que j'ai apportée
$id_user = $_SESSION['id_user'];
echo 'Tentez votre chance !!!

Vous aves 200 coups pour trouver le nombre mystère compris entre 0 et 1000
';
}
else if (isset($_POST['reponse']) AND empty($_POST['reponse']))
{
$rand = $_POST['random'];
$id_user = $_SESSION['id_user']; // modification que j'ai apportée
$cnt = $_SESSION['credit'];
echo 'N\'ouliez pas de mettre une reponse!!!
';
}
else
{
$rand = $_POST['random'];
$cnt = $_SESSION['credit'];
$number = $_POST['reponse'];
$id_user = $_SESSION['id_user']; // modification que j'ai apportée
if (preg_match('![0-9]!', $number))
{
$cnt--;

if ($number < $rand)
echo 'le nombre est superieur!
';
else if ($number > $rand)
echo 'le nombre est inferieur!
';
else if ($number == $rand)
{
echo 'gagné!!!
';
echo '[index-5.php rejouer?] - [# fermer la fenetre]';
exit ();
}
}
else
{
echo 'Votre réponse ne doit contenir que des chiffres !!!
';
}
}

if ($cnt > 0)
{
echo
'Vous avez encore ' . $cnt . ' coups à jouer
<form action="index-5.php" method="post" name="lol">




</form>';
$sql = mysql_query("SELECT credit FROM utilisateurs WHERE id_user='$id_user'");
$result = mysql_fetch_array($sql) or die(mysql_error());

$cnt = $result[0];

// Calcul des points
$pointfin = $cnt;
// Operation
$sql = "UPDATE utilisateurs SET credit=credit-1 WHERE id_user='$id_user'" or die ('Erreur : '.mysql_error());
// Rappel le nombre de points
echo'
Vous avez '. $pointfin .' points';

echo '<script language="javascript">document.lol.reponse.focus();</script>';
echo '[# fermer la fenetre]';
}
else
{
echo 'Vous avez perdu ! Le nombre secret etait ' . $rand . ' !
';
echo '[index-5.php rejouer?] - [# fermer la fenetre]';
}
?>
Messages postés
567
Date d'inscription
mercredi 4 octobre 2006
Statut
Membre
Dernière intervention
30 août 2011
10
1 - Es tu sur que tu as défini ta session quelque part ?
Au pire fais un echo de $sql pour voir...
2 - Il faut absolument revoir ton système de jeux... Comme ca moi je gagne à chaque fois.... Comme je t'ai dit plus haut :
Je te met sur la piste : Clique droit > Code source de la page...



_________________________________
Min iPomme
Messages postés
60
Date d'inscription
lundi 11 janvier 2010
Statut
Membre
Dernière intervention
10 mai 2012

salut!
ben pour te dire la page jeu.php est reliée par une autre page comptemembre.php par la fonction "require_once" donc jeu.php détecte bien la session utilisateurs et j'ai même testé le fichier jeu.php sans passer par la page de connexion du membre et il était donc impossible d'accéder à la page pour ici tout fonctionne très bien !

Donc j'ai utilisé le fameux clique droit , mais ça ne m'inspire pas de trop (mon niveau trop faible en programmation pour voir entre les lignes ), je vais tout de même revérifié le code de mon jeu, je penses que l'erreur doit venir de là .

Je vais potasser le code, je te tiendrai au courant de la suite des évènement .
Messages postés
60
Date d'inscription
lundi 11 janvier 2010
Statut
Membre
Dernière intervention
10 mai 2012

Bon ça avance tout doucement , j'ai trouvé comment effectué le décompte à partir de "credit" de ma base de donnée ... J'ai modifié dans le 2e et 3e paragraphe du code:

$cnt $_SESSION['credit']; par $cnt $_POST['counter'];

maintenant il reste plus qu'à régler le problème de la mise a jour de 'credit' dans la base de donnée du membre aprés chaque validation du nombre mystère .
Messages postés
60
Date d'inscription
lundi 11 janvier 2010
Statut
Membre
Dernière intervention
10 mai 2012

bon ben j'aurai besoin d'un petit coup de pouce ... lol je suis encore largué

je n'arrive toujours pas à effectuer la mise a jour de la base de donnée et de plus j'ai enfin compris ce q tu voulais dire avec le clique droit --> afficher la sources et je n'arrive pas à le cacher ( du moins j'ai essayé avec cache.value mais apresil m'affiche des nombres entre entre zero et un )
Messages postés
567
Date d'inscription
mercredi 4 octobre 2006
Statut
Membre
Dernière intervention
30 août 2011
10
C'est impossible de le cacher....
La solution est de ne pas mettre dans ton formulaire le chiffre à rechercher...
De le stoquer en session par exemple lui aussi... Tout ce qui est dans des input peut être modifié par le client... Même si ils sont hidden ou disabeld ou readonly...

Et qel problème as tu avec la mise à jour ?

_________________________________
Min iPomme
Messages postés
60
Date d'inscription
lundi 11 janvier 2010
Statut
Membre
Dernière intervention
10 mai 2012

et justement la dessus j'ai une petite question ... est il possible de crypté en md5 ce nombre mystère ( comme un mot de passe ) et qui le lise en clair comme ça dans la logique il apparaitra dans la source crypté et il l'interprétera normalement ?
Messages postés
567
Date d'inscription
mercredi 4 octobre 2006
Statut
Membre
Dernière intervention
30 août 2011
10
Oui tu peux te faire un ago pour crypter ton chiffre ou le hacher en md5 mais c'est pas la bonne solution. Le mieux c'est encore une fois de te servir des sessions... Comme tu l'as fais avec l'id de l'user...

_________________________________
Min iPomme
Messages postés
60
Date d'inscription
lundi 11 janvier 2010
Statut
Membre
Dernière intervention
10 mai 2012

ok merci de tes bons conseils ,je vais essayer de développer ça ! je te posterai ça lorsque ça sera terminé si cela ne te dérange pas pour que tu puisses tester !
merci
Messages postés
567
Date d'inscription
mercredi 4 octobre 2006
Statut
Membre
Dernière intervention
30 août 2011
10
Ok, bon courage...

_________________________________
Min iPomme
Messages postés
60
Date d'inscription
lundi 11 janvier 2010
Statut
Membre
Dernière intervention
10 mai 2012

Bon j'ai finalement trouvé pour la soustraction au niveau de ma base SQL ! ça avance a petit pas ... j'ai pas vu que j'avais oublié un terme : "mysql_query"

// Récupération du nombre de points
$sql = mysql_query("SELECT credit FROM utilisateurs WHERE id_user=$id_user");
$result = mysql_fetch_array($sql) or die(mysql_error());

// Calcul des points
$pointfin = $cnt-1;
// Operation
$sql = mysql_query("UPDATE utilisateurs SET credit=$pointfin WHERE id_user=$id_user") or die ('Erreur : '.mysql_error());
// Rappel le nombre de points
echo'
Vous avez '. $pointfin .' points';[code=php]