JeuWeb - Crée ton jeu par navigateur
Problème achats - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : Problème achats (/showthread.php?tid=4955)

Pages : 1 2


Problème achats - vulcain - 09-07-2010

Bonsoir,

je rencontre un problème avec mon script d'achats de bâtiments, en effet quand je veux construire un bâtiment, cela l'augmente mais l'argent reste au même niveau, il n'est pas déduit.

Voici mon script php :

Code PHP :
<?php if(ISSET($_GET['construction']))//construction batiment  // mettre la desciption des baytiments a droite !dans un  caréé facon aie aie aie !
{
if(
$_GET['construction']=='expup'){ //exploitation !
//verification de l'argent du joueur !
if($argentsarray['0']>=$exparray['0'])
{
mysql_query("UPDATE inscription SET ors='".($argentsarray['0']-$exparray['0'])."',lvlexploitation='".($argentsarray['1']+1)."' WHERE pseudo='".$_SESSION['pseu11']."' ");
mysql_query("UPDATE inscription SET revenu='".(50000+($argentsarray['1']+1)*10000)."' WHERE pseudo='".$_SESSION['pseu11']."' ");

$resu="<div>Votre construction a été faite avec succés</div>";
echo
"<script type='text/javascript'>location.href = 'royaume.php';</script>";
;}
//possible
else{$resu="<div>Vous n'avez pas assez d'argent</div>";}
}
if(
$_GET['construction']=='casup'){ // CASERNE
//verification de l'argent du joueur !
if($argentsarray['0']>=$casarray['0'])
{
mysql_query("UPDATE inscription SET ors='".($argentsarray['0']-$casarray['0'])."',lvlcaserne='".($argentsarray['2']+1)."' WHERE pseudo='".$_SESSION['pseu11']."' ");
echo
"<div>Votre construction a été faite avec succés</div>";
echo
"<script type='text/javascript'>location.href = 'royaume.php';</script>";
}
else{
$resu="<div>Vous n'avez pas assez d'argent</div>";}
}
if(
$_GET['construction']=='ecuup'){ // ECUUP
//verification de l'argent du joueur !
if($argentsarray['0']>=$ecuarray['0'])
{
mysql_query("UPDATE inscription SET ors='".($argentsarray['0']-$ecuarray['0'])."',lvlecurie='".($argentsarray['3']+1)."' WHERE pseudo='".$_SESSION['pseu11']."' ");
$resu="<div>Votre construction a été faite avec succés</div>";
echo
"<script type='text/javascript'>location.href = 'royaume.php';</script>";
}
else{
$resu="<div>Vous n'avez pas assez d'argent</div>";}
}
if(
$_GET['construction']=='adsup'){ // ADS
//verification de l'argent du joueur !
if($argentsarray['0']>=$adsarray['0'])
{
mysql_query("UPDATE inscription SET ors='".($argentsarray['0']-$adsarray['0'])."',lvlads='".($argentsarray['4']+1)."' WHERE pseudo='".$_SESSION['pseu11']."' ");
$resu="<div>Votre construction a été faite avec succés</div>";
echo
"<script type='text/javascript'>location.href = 'royaume.php';</script>";
}
else{
$resu="<div>Vous n'avez pas assez d'argent</div>";}
}
if(
$_GET['construction']=='recup'){ // recherche !!
//verification de l'argent du joueur !
if($argentsarray['0']>=$recarray['0'])
{
mysql_query("UPDATE inscription SET ors='".($argentsarray['0']-$recarray['0'])."',lvlrecherche='".($argentsarray['5']+1)."' WHERE pseudo='".$_SESSION['pseu11']."' ");
$resu="<div>Votre construction a été faite avec succés</div>";
echo
"<script type='text/javascript'>location.href = 'royaume.php';</script>";
}
else{
$resu="<div>Vous n'avez pas assez d'argent</div>";}
}
if(
$_GET['construction']=='murup'){ // recherche !!
//verification de l'argent du joueur !
if($argentsarray['0']>=$murarray['cout'])
{
mysql_query("UPDATE inscription SET ors='".($argentsarray['0']-$murarray['cout'])."',lvlmuraille='".($argentsarray['lvlmuraille']+1)."' WHERE pseudo='".$_SESSION['pseu11']."' ");
$resu="<div>Votre construction a été faite avec succés</div>";
echo
"<script type='text/javascript'>location.href = 'royaume.php';</script>";
}
else{
$resu="<div>Vous n'avez pas assez d'argent</div>";}
}


}

Merci à vous,

bonne soirée


RE: Problème achats - Argorate - 09-07-2010

Salut,

Ne le prend pas mal, mais c'est totalement illisible!
Pas d'indentation, des noms de variable et indices de tableaux pas parlant du tout, des acolades futiles, des requetes sql (qui pourtait etre optimisé) mélangé au code un peu partout, pas de saut de ligne...

C'est serieusement imbuvable... je sais pas comment tu fais toi meme. ^^

m'enfin c'est juste du debug non? met des echo/var_dump des variables au bon endroit, utilise des "exit;" si besoin, regarde se qui se passe là où le traitement de se qui ne se fait pas se fait et tu devrais trouver. Smile


RE: Problème achats - php_addict - 09-07-2010

je me permet un conseil malgré que je ne sois pas pro:

lit d'autres code source pour voir comment d'autres codent.


RE: Problème achats - Jabberwock - 09-07-2010

Teste avec isset() tes variable, mais un echo pour else, comme cela tu verra si elles sont vides.
Fait pareil pour la session, et teste directement ta requête dans ta base (en remplaçant les variable php par des valeurs, juste pour voir si ta requête est bonne).

Niveau lisibilité (ce n'est que par rapport à moi) place tes commentaires juste avant le if pour éviter d'avoir des lignes trop grandes.

Et j'ai remarqué que tu utilise du JavaScript pour actualiser ta page pourquoi ne pas utilisé du Php ? du style
Code PHP :
<?php 
header
('Location: tapage.php');



RE: Problème achats - Sephi-Chan - 09-07-2010

Ton IDE te facture chaque saut de ligne ou espace ?

Déjà, avant de t'attaquer à ton problème, tu devrais faire un refactoring de ton code pour le factoriser. Le copier coller est à banir, ici ton code est très simple à factoriser. Dans la mesure du possible, il faut appliquer le principe DRY (Don't repeat yourself).

Plutôt que d'avoir des $murarray, $recarray, etc. tu devrais avoir un tableau associatif avec des clés indexés (chercher l'index 0 du tableau, ce n'est pas lisible, alors que chercher l'index 'prix', ça l'est) du genre :


$prix = array(
'recherche' => array('prix' => 10, 'foo' => 'bar'),
'mur' => array('prix' => 10, 'foo' => 'bar')
);

Maitenant, pour cibler ton problème, il suffit de mettre des var_dump(); de tes variables.
Déjà, en haut de ton script, ajoute un :


echo "<pre>", print_r($argentsarray), "</pre>";
echo "<pre>", print_r($casarray), "</pre>"; // Et pareil pour tes autres tableaux.

Et colle nous le rendu. Smile


Sephi-Chan


RE: Problème achats - vulcain - 09-07-2010

Sur la lisibilité de mon script, en effet c'est pas lisible mais pour moi ça l'ai. J'ai donc essayé de le rendre plus lisible.

Jabberwock, tu as raison, je ne sais plus pourquoi j'avais utilisé du JS, je l'ai changé pour le mettre en php. ^^

Sephi-Chan, non il ne me le facture pas.

Voici le script :

Code PHP :
<?php

echo "<pre>", print_r($argentsarray), "</pre>";
echo
"<pre>", print_r($casarray), "</pre>"; // Et pareil pour tes autres tableaux.

if(ISSET($_GET['construction']))//construction batiment
{
// Exploitation et on vérifie l'argent du joueur
if($_GET['construction']=='expup'){
if(
$argentsarray['0']>=$exparray['0'])
{
mysql_query("UPDATE inscription SET ors='".($argentsarray['0']-$exparray['0'])."',lvlexploitation='".($argentsarray['1']+1)."' WHERE pseudo='".$_SESSION['pseu11']."' ");
mysql_query("UPDATE inscription SET revenu='".(50000+($argentsarray['1']+1)*10000)."' WHERE pseudo='".$_SESSION['pseu11']."' ");

$resu="<div>Votre construction a été faite avec succés</div>";
echo
"header('Location: royaume.php');";
;}
else{
$resu="<div>Vous n'avez pas assez d'argent</div>";}
}
// CASERNE et on vérifie l'argent du joueur
if($_GET['construction']=='casup'){
if(
$argentsarray['0']>=$casarray['0'])
{
mysql_query("UPDATE inscription SET ors='".($argentsarray['0']-$casarray['0'])."',lvlcaserne='".($argentsarray['2']+1)."' WHERE pseudo='".$_SESSION['pseu11']."' ");
echo
"<div>Votre construction a été faite avec succés</div>";
echo
"header('Location: royaume.php');";
}
else{
$resu="<div>Vous n'avez pas assez d'argent</div>";}
}
// ECUUP et on vérifie l'argent du joueur
if($_GET['construction']=='ecuup'){
if(
$argentsarray['0']>=$ecuarray['0'])
{
mysql_query("UPDATE inscription SET ors='".($argentsarray['0']-$ecuarray['0'])."',lvlecurie='".($argentsarray['3']+1)."' WHERE pseudo='".$_SESSION['pseu11']."' ");
$resu="<div>Votre construction a été faite avec succés</div>";
echo
"header('Location: royaume.php');";
}
else{
$resu="<div>Vous n'avez pas assez d'argent</div>";}
}
// ADS et on vérifie l'argent du joueur
if($_GET['construction']=='adsup'){
if(
$argentsarray['0']>=$adsarray['0'])
{
mysql_query("UPDATE inscription SET ors='".($argentsarray['0']-$adsarray['0'])."',lvlads='".($argentsarray['4']+1)."' WHERE pseudo='".$_SESSION['pseu11']."' ");
$resu="<div>Votre construction a été faite avec succés</div>";
echo
"header('Location: royaume.php');";
}
else{
$resu="<div>Vous n'avez pas assez d'argent</div>";}
}
// recherche et on vérifie l'argent du joueur
if($_GET['construction']=='recup'){
if(
$argentsarray['0']>=$recarray['0'])
{
mysql_query("UPDATE inscription SET ors='".($argentsarray['0']-$recarray['0'])."',lvlrecherche='".($argentsarray['5']+1)."' WHERE pseudo='".$_SESSION['pseu11']."' ");
$resu="<div>Votre construction a été faite avec succés</div>";
echo
"header('Location: royaume.php');";
}
else{
$resu="<div>Vous n'avez pas assez d'argent</div>";}
}
// recherche et on vérifie l'argent du joueur
if($_GET['construction']=='murup'){
if(
$argentsarray['0']>=$murarray['cout'])
{
mysql_query("UPDATE inscription SET ors='".($argentsarray['0']-$murarray['cout'])."',lvlmuraille='".($argentsarray['lvlmuraille']+1)."' WHERE pseudo='".$_SESSION['pseu11']."' ");
$resu="<div>Votre construction a été faite avec succés</div>";
echo
"header('Location: royaume.php');";
}
else{
$resu="<div>Vous n'avez pas assez d'argent</div>";}
}


}

et sur mon site, j'ai ça qui c'est mit :

Citation :Array
(
[0] => 1275904
[ors] => 1275904
[1] => 9
[lvlexploitation] => 9
[2] => 6
[lvlcaserne] => 6
[3] => 13
[lvlecurie] => 13
[4] => 0
[lvlads] => 0
[5] => 3
[lvlrecherche] => 3
[6] => 7
[lvlmuraille] => 7
[7] => 140000
[revenu] => 140000
[8] => 994
[tours] => 994
[9] => 12
[tauxpillage] => 12
[10] => 1
[rang] => 1
[11] => 0
[jade] => 0
[12] => 1
[id] => 1
[13] => 0
[tseg] => 0
[14] => 0
[faveur] => 0
)
1

1



RE: Problème achats - Sephi-Chan - 09-07-2010

Ok, alors déjà tu peux voir que dans tes tableaux sont pleins de doublons. Tu devrais utiliser mysql_fetch_assoc pour n'avoir qu'un tableau associatif et utilisé les clés plutôt quel es index : utiliser $array['ors'] est plus lisible que $argentsarray[0].

As-tu ciblé l'endroit d'où venait le problème ?


Sephi-Chan


RE: Problème achats - Joojo - 09-07-2010

Si cela augmente le niveau de tes bâtiments mais ne baissent pas ton argent il doit avoir un problème dans le contenu de tes variables:

Code PHP :
<?php 
mysql_query
("UPDATE inscription SET
ors='"
.($argentsarray['0']-$exparray['0'])."',
lvlexploitation='"
.($argentsarray['1']+1)."'
WHERE pseudo='"
.$_SESSION['pseu11']."' ");


Es-tu certain de ce que contient celles-ci?
Code PHP :
<?php 
$argentsarray
['0']-$exparray['0']

De plus je trouve ça bizarre argent - exp enfin c'est surement moi.


RE: Problème achats - vulcain - 10-07-2010

Mais ce que je trouve bizarre, c'est que mon script d'achat troupes ce trouve sur le même script que les achats des bâtiments et ça fonctionne.

Sephi-chan => Je remplace donc mysql_query_fetch_assoc ?
Comme l'a dit Joojo, ça vient de mes variables. Mais je ne trouve pas pourquoi. :/


RE: Problème achats - Sephi-Chan - 10-07-2010

Moi, je vois déjà un gros bug.


echo "header('Location: royaume.php');";

Il faut pas faire le header() dans un echo ! -.-
Fais plutôt :


header('Location: royaume.php');

Par contre, ça va merder puisque tu affiches des choses avant de faire un header. Pour éviter que ça plante, il faut utiliser les tampons.
Tout en haut de ton code, tu appelle la fonction ob_start(). Et à la fin, tu fais un echo de l'appel à la fonction ob_get_flush().

Et puis… Tu ne nous dit même pas ce que ça t'affiche à l'écran…

Donc en gros, si tu ne cherches pas, tu ne trouveras pas. On est pas sorciers, on ne peut pas trouver si tu ne nous donne rien et que tu ne fais pas ce qu'on te demande.

Fais les modifications qu'on t'indique : utilise mysql_fetch_assoc au lieu de mysql_fetch_array puis utilise les clés plutôt que les index numériques.
Ensuite montre nous ce code modifié : on y verra plus clair.

Montre nous aussi comment tu initialise tes tableaux (les $exparray, $argentsarray, etc.) ;

Affiche les valeurs que tu utilises. Par exemple, au lieu de faire :


if($_GET['construction']=='casup'){
if($argentsarray['0']>=$casarray['0']){
mysql_query("UPDATE inscription SET ors='".($argentsarray['0']-$casarray['0'])."',lvlcaserne='".($argentsarray['2']+1)."' WHERE pseudo='".$_SESSION['pseu11']."' ");
echo"<div>Votre construction a été faite avec succés</div>";
echo"header('Location: royaume.php');";
}
else {
$resu="<div>Vous n'avez pas assez d'argent</div>";
}
}

Tu mets :


if($_GET['construction'] == 'casup'){
echo '$argentsarray["ors"] = ' . $argentsarray['ors'];
echo '$casarray["ors"] = ' . $casarray['ors'];

if($argentsarray['ors'] >= $casarray['ors']){
$query = sprintf(
"UPDATE inscription SET ors = %d, lvlcaserne = %d WHERE pseudo = '%s';",
$argentsarray['ors'] - $casarray['ors'],
$argentsarray['lvlcaserne'] + 1,
$_SESSION['pseu11']
);

mysql_query($query);
echo "<div>Votre construction a été faite avec succés</div>";
header('Location: royaume.php');
}
else {
$resu = "<div>Vous n'avez pas assez d'argent</div>";
}
}

Comme ça le code est plus lisible. N'hésite pas à corriger si j'ai mal remplacé les index numériques par les clés.


Sephi-Chan