JeuWeb - Crée ton jeu par navigateur
[REGLE] Problème dans un "if" - 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 : [REGLE] Problème dans un "if" (/showthread.php?tid=399)



[REGLE] Problème dans un "if" - fiatt - 04-11-2006

Salut tout le monde.

Je butte depuis 2 semaines sur un soucis dans mon script que voici:

Code PHP :
<?php 
if (isset($_POST['envoyer'])) //si formulaire envoyé
{
if (
$_POST['envoyer'] == 'Construire')
{
include
'./includes/mysql_connect.php';
//PRENDRE LES STOCKS DU JOUEUR
$sql_stock = "SELECT * FROM stock WHERE id_joueur = '" . $_SESSION['id_joueur'] . "'";
$result_stock = mysql_query($sql_stock) or die(mysql_error());

while (
$assoc_stock = mysql_fetch_assoc ($result_stock))
{
$qtt_ . $assoc_stock['designation'] = $assoc_stock['quantite_actuelle'];
}


//PRENDRE LES COUTS DE L HABITATION DEMANDE
$sql = "SELECT * FROM cout_fabrication_joueur WHERE id_joueur = '" . $_SESSION['id_joueur'] . "' " .
"AND nom_objet = 'habitation' AND niveau_objet = '" . $_POST['habitation'] . "'";
$result = mysql_query($sql) or die(mysql_error());
$assoc_cout = mysql_fetch_assoc ($result) or die(mysql_error());


//COMPARER LES COUTS AVEC LES STOCKS
if ( $assoc_cout['cout_tml'] > $qtt_trimetilene OR $assoc_cout['cout_ste'] > $qtt_stenium OR $assoc_cout['cout_pol'] > $qtt_polytes OR $assoc_cout['cout_blo'] > $qtt_bloc )
{
$texte = "<font color = red>Vous ne possedez pas assez de ressources!</font>";
}
else
{
$new_qtt_tml = $qtt_trimétilène - $assoc_cout['cout_tml'];
$new_qtt_ste = $qtt_sténium - $assoc_cout['cout_ste'];
$new_qtt_pol = $qtt_polytes - $assoc_cout['cout_pol'];
$new_qtt_blo = $qtt_bloc - $assoc_cout['cout_blo'];
mysql_free_result ($result);

//MISE A JOUR DES STOCKS
$sql3 = "UPDATE stock SET quantite_actuelle = '" . $new_qtt_tml . "' WHERE id_joueur = '" . $_SESSION['id_joueur'] . "' AND designation = 'trimétilène'";
$result3 = mysql_query($sql3) or die(mysql_error());


$sql4 = "UPDATE stock SET quantite_actuelle = '" . $new_qtt_ste . "' WHERE id_joueur = '" . $_SESSION['id_joueur'] . "' AND designation = 'sténium'";
$result4 = mysql_query($sql4) or die(mysql_error());


$sql5 = "UPDATE stock SET quantite_actuelle = '" . $new_qtt_pol . "' WHERE id_joueur = '" . $_SESSION['id_joueur'] . "' AND designation = 'polytes'";
$result5 = mysql_query($sql5) or die(mysql_error());


$sql6 = "UPDATE stock SET quantite_actuelle = '" . $new_qtt_blo . "' WHERE id_joueur = '" . $_SESSION['id_joueur'] . "' AND designation = 'bloc'";
$result6 = mysql_query($sql6) or die(mysql_error());

Tout semble bien se dérouler jusqu'à la partie //COMPARER LES COUTS AVEC LES STOCKS:
Le résultat de ce if est inversé et je ne sais pas pourquoi:
Code PHP :
<?php 
if ( $assoc_cout['cout_tml'] > $qtt_trimetilene OR $assoc_cout['cout_ste'] > $qtt_stenium OR $assoc_cout['cout_pol'] > $qtt_polytes OR $assoc_cout['cout_blo'] > $qtt_bloc )


Pour éclaircir un peu j'ai essayé ceci:

Code PHP :
<?php 
if ( $assoc_cout['cout_tml'] > $qtt_trimetilene )
{
$texte = "<font color = red>Vous ne possedez pas assez de ressources!</font>";
}
else
{
[
php] $new_qtt_tml = $qtt_trimétilène - $assoc_cout['cout_tml'];
$new_qtt_ste = $qtt_sténium - $assoc_cout['cout_ste'];
$new_qtt_pol = $qtt_polytes - $assoc_cout['cout_pol'];
$new_qtt_blo = $qtt_bloc - $assoc_cout['cout_blo'];
mysql_free_result ($result)
;

//MISE A JOUR DES STOCKS
etc etc etc[/php]

Lorsque
Code PHP :
<?php 
$assoc_cout
['cout_tml'] > $qtt_trimetilene
qui est la condition à remplir, alors les requètes
Code PHP :
<?php 
$new_qtt_tml
= $qtt_trimétilène - $assoc_cout['cout_tml'];
$new_qtt_ste = $qtt_sténium - $assoc_cout['cout_ste'];
$new_qtt_pol = $qtt_polytes - $assoc_cout['cout_pol'];
$new_qtt_blo = $qtt_bloc - $assoc_cout['cout_blo'];
mysql_free_result ($result)
, qui font parties du else, sont effectuées.

Par contre si
Code PHP :
<?php 
$assoc_cout
['cout_tml'] < $qtt_trimetilene
, qui est l'inverse de la condition, alors c'est
Code PHP :
<?php 
$texte
= "<font color = red>Vous ne possedez pas assez de ressources!</font>";

J'ai contrôler tout le début du script mais je ne trouve pas d'erreur...

Si je rajoute ! devant la condition alors les résultats sont ok mais le raisonnement reste inversé et cela ne resoud pas le problème...

Si quelqu'un a une idée?


RE: Problème dans un "if" - Bosco - 04-11-2006

et si dans ton script tu inverse t'es donné ?
sa te donnerais pas le bon sens ?


RE: Problème dans un "if" - fiatt - 05-11-2006

Bosco a écrit :et si dans ton script tu inverse t'es donné ?
sa te donnerais pas le bon sens ?

Comme je le disais un simple ! devant le if et tout rentre dans l'ordre mais ca ne m'explique pas le pourquoi du comment...


RE: Problème dans un "if" - gtsoul - 05-11-2006

as-tu prévu le cas null (ta requête ne renvoit rien) et le cas d'égalité?
en logique pure, !> est différent de <


RE: Problème dans un "if" - pascal - 05-11-2006

Deux points me semblent bizarres:
1. les variables $qtt_* :
dans le if, il n'y a pas d'accents, mais dans le else il y a des accents:
$qtt_trimetilene et $qtt_trimétilène

2. la création des variables:
$qtt_ . $assoc_stock['designation'] me semble très louche. je propose plutôt:
Code PHP :
<?php 
while ($assoc_stock = mysql_fetch_assoc ($result_stock))
{
$chaine = "qtt_" . $assoc_stock['designation'];
$
$chaine = $assoc_stock['quantite_actuelle'];
}

( doc sur les variables dynamiques: http://fr.php.net/manual/fr/language.variables.variable.php )


A+

Pascal


RE: Problème dans un "if" - fiatt - 05-11-2006

Merci Pascal tu as trouvé l'erreur!

La bonne syntaxe est:
Code PHP :
<?php 
while ($assoc_stock = mysql_fetch_assoc ($result_stock))
{
${
$assoc_stock['designation']} = $assoc_stock['quantite_actuelle'];
}