Organisation de l'économie pour un jeu

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Organisation de l'économie pour un jeu

par Snipy » 22 nov. 2007, 21:58

Mais il y a des chances que je sois confronté à d'autre sproblème concernant toujours la partie économie lol.

En même temps vous êtes géniaux sur ce forum, rapide efficace, clair, on apprend beaucoup :)

Merci pour tous ;)

par Truc » 22 nov. 2007, 21:43

Ok... pour la lisibilité future vaut mieux clôturer ce sujet et en ouvrir un nouveau pour d'autres questions. :wink:

par Snipy » 22 nov. 2007, 21:32

Merci beaucoup :) tout marche impeccable pour l'instant.

Bonne soirée

par h0_noMan » 22 nov. 2007, 21:26

Du moment que signe est NOT NULL et est different de :
0 (numerique)
"0" (chaine de caractere)
"" (chaine vide)

par Snipy » 22 nov. 2007, 21:24

Merci ça marche bien :)


une seconde question me trotte par la tete, dans ce code y a t'il quelque chose qui pourrait faire en sorte que ça s'affiche mal si je modifie les valeurs de mon ENUM signe ?
je demandais ça car quand je change les valeurs dans la BDD, le script ne marche plus. Les 2 catégories ne se séparent plus etc.

par Truc » 22 nov. 2007, 21:11

Ah ben oui forcément :wink:
Là où tu as placé ce test tu auras forcément des messages affichés puisque si tu passes dans la boucle ça veut dire qu'il y a des résultats :wink:

Il faut le mettre après le while()

par Snipy » 22 nov. 2007, 21:01

Voici le code
le message d'erreur dont je parlais est celui placé dans le echo :)
<?php
$add =0;

while ($add<=1)
{
$requete = mysql_query('SELECT typeeconomie.id_type_economie AS id_type_economie, nom_type_economie, montant, signe 
FROM economie 
LEFT JOIN typeeconomie
USING(id_type_economie)
WHERE id_equipe = '.$_SESSION['id_equipe'].' AND nom_type_economie <> "caisse" AND semaine = '.date("W").'-'.$add) or die (mysql_error());

?>

<div class="corps-sp1">
<h2> <?php if($add == 0) echo "Cette semaine"; else  echo "La semaine dernière"; ?></h2>
<?php



$tmp = "";
$tab = array();

//Pas besoin de tri sur la requête = gain de performance
While  ($donnees = mysql_fetch_assoc($requete)) 
{
    $tmp = $donnees['signe'] ;   // sauvegarde du type pour une utilisation plus simple $tmp
 
    //  s'il n'y a pas encore de données (nom et montant de l'économie) dans le tableau résultat on
    //  initialise à vide pour pouvoir par la suite concaténer sans avoir une erreur lors de la 1ère
    //  concaténation avec une variable qui n'existerai pas le cas contraire.    
    if(empty($tab["$tmp"]))        
        $tab["$tmp"] = ''; 	
		
	 if(empty($tmp))        	
		echo "Vos derniers relevés de compte ne sont pas encore arrivés";
		
    // ajout des informations dans le tableau à l'index $tmp. Premet de ranger tous les "depenses" à
    // la suite ici séparées par un saut de ligne
    $tab["$tmp"] .= '<tr><td>'.$donnees['nom_type_economie'].' : </td><td>'.$donnees['montant'].'</td></tr>';
}


foreach( $tab as $key => $value)
{

   echo '<table style="float:left;margin-right: 20px" >';
   echo '<th colspan="2">'.$key.'</th>';
   echo $value; 
   echo '</table>'; 
} 

echo "</div>";

$add++;

}

par h0_noMan » 22 nov. 2007, 19:44

As tu bien enleve cette ligne (avec tout ses crochets) :
if($donnees = mysql_fetch_assoc($requete)) 
Puis redonnes ton code afin que l'on saches ou tu en es des corrections proposé.

par Truc » 22 nov. 2007, 19:40

quel message d'erreur ?

Normalement ceci devrait fonctionner
if(empty($tmp))            
        echo "Vos derniers relevés de compte ne sont pas encore arrivés";
après la boucle while.

2eme question : Non pas de souci

par Snipy » 22 nov. 2007, 19:14

En mettant
 if(empty($tmp))        	
		echo "Vos derniers relevés de compte ne sont pas encore arrivés";
ou encore
if(empty($tab["$tmp"]))        
        $tab["$tmp"] = ''; 	
		echo "Vos derniers relevés de compte ne sont pas encore arrivés";
Le résultat n'est pas bon, j'ai le message d'erreur qui s'affiche plusieurs fois...

-------------------------------------------------------------
une seconde question me trotte par la tete, dans ce code y a t'il quelque chose qui pourrait faire en sorte que ça s'affiche mal si je modifie les valeurs de mon ENUM signe ?

je rappelle la table

Code : Tout sélectionner

-- Structure de la table `typeeconomie` -- CREATE TABLE `typeeconomie` ( `id_type_economie` tinyint(4) NOT NULL auto_increment, `nom_type_economie` varchar(255) collate latin1_german2_ci NOT NULL, `signe` enum('depense','recette') collate latin1_german2_ci NOT NULL, PRIMARY KEY (`id_type_economie`) ) ENGINE=MyISAM AUTO_INCREMENT=52 DEFAULT CHARSET=latin1 COLLATE=latin1_german2_ci AUTO_INCREMENT=52 ;

Merci à tous bonne soirée

par h0_noMan » 22 nov. 2007, 18:49

Tu peux enlever ton if (c'est lui qui t'enleves un enregistrement).

Si il n'y a pas de donnéés alors le while ne se passera pas.
Donc ton $tmp sera une chaine vide.

Tu pourras alors tester si $tmp est vide et affiché ton message d'erreur.

par Snipy » 22 nov. 2007, 18:42

Bonjour :)

Donc tout marche presque bien Voici le code finalisé,
while ($add<=1)
{
$requete = mysql_query('SELECT typeeconomie.id_type_economie AS id_type_economie, nom_type_economie, montant, signe 
FROM economie 
LEFT JOIN typeeconomie
USING(id_type_economie)
WHERE id_equipe = '.$_SESSION['id_equipe'].' AND nom_type_economie <> "caisse" AND semaine = '.date("W").'-'.$add) or die (mysql_error());

?>

<div class="corps-sp1">
<h2> <?php if($add == 0) echo "Cette semaine"; else  echo "La semaine dernière"; ?></h2>
<?php

if($donnees = mysql_fetch_assoc($requete))
{
$tmp = "";
$tab = array();

//Pas besoin de tri sur la requête = gain de performance
While  ($donnees = mysql_fetch_assoc($requete)) 
{
    $tmp = $donnees['signe'] ;   // sauvegarde du type pour une utilisation plus simple $tmp
 
    //  s'il n'y a pas encore de données (nom et montant de l'économie) dans le tableau résultat on
    //  initialise à vide pour pouvoir par la suite concaténer sans avoir une erreur lors de la 1ère
    //  concaténation avec une variable qui n'existerai pas le cas contraire.    
    if(empty($tab["$tmp"]))        
        $tab["$tmp"] = ''; 
    
    // ajout des informations dans le tableau à l'index $tmp. Premet de ranger tous les "depenses" à
    // la suite ici séparées par un saut de ligne
    $tab["$tmp"] .= '<tr><td>'.$donnees['nom_type_economie'].' : </td><td>'.$donnees['montant'].'</td></tr>';
}


foreach( $tab as $key => $value)
{

   echo '<table style="float:left;margin-right: 20px" >';
   echo '<th colspan="2">'.$key.'</th>';
   echo $value; 
   echo '</table>'; 
} 
}
else echo "Vos derniers relevés de compte ne sont pas encore arrivés";
echo "</div>";

$add++;

}
Un seul problème, j'ai rajouté la condition

if($donnees = mysql_fetch_assoc($requete))

Afin de vérifier qu'il y a bien les donnes des semaines qui sont affichés (exemple : lorsque le gars est inscrit depuis moins d'une semaine, il ne peut pas voir la semaine précédente, donc un message est affiché :)
Seul défaut de cette condition, c'est que la derniere donnée de ma boucle n'est pas affiché :(

par Truc » 22 nov. 2007, 10:26

En effet c'est ce qu'il y de plus simple ceci dit tu peux modifier l'affichage pour récupérer les anciennes valeurs puis les nouvelles et avoir quelque chose du style

Code : Tout sélectionner

Temporaire : 16 000 (13 000)
avec l'ancienne entre parenthèse pour ne pas avoir 2 tableaux identiques.

Mais la requête sera avec le "OR" puisqu'il te faut les deux résultats (2 semaines)

par Snipy » 21 nov. 2007, 23:26

ça pourrait être interessant en effet, mais je me dis qu'apres la table deviendrait vraiment enorme
et puis 1 ans correspondra plus ou moins a 3 saisons donc ça devrait etre suffisant :)

POur les tables toujours les meme :p

Code : Tout sélectionner

CREATE TABLE `typeeconomie` ( `id_type_economie` tinyint(4) NOT NULL auto_increment, `nom_type_economie` varchar(255) collate latin1_german2_ci NOT NULL, `signe` enum('depense','recette') collate latin1_german2_ci NOT NULL, PRIMARY KEY (`id_type_economie`) ) ENGINE=MyISAM AUTO_INCREMENT=52 DEFAULT CHARSET=latin1 COLLATE=latin1_german2_ci AUTO_INCREMENT=52 ; -- -- Structure de la table `economie` -- CREATE TABLE `economie` ( `id_economie` int(11) NOT NULL auto_increment, `id_equipe` tinyint(4) NOT NULL, `id_type_economie` tinyint(4) NOT NULL, `montant` int(4) unsigned NOT NULL, `semaine` tinyint(4) NOT NULL, PRIMARY KEY (`id_economie`), KEY `id_equipe` (`id_equipe`) ) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=latin1 COLLATE=latin1_german2_ci AUTO_INCREMENT=2 ;

Sinon je vais afficher les 2 dernières semaines dans 2 tableaux différents autant bouclé juste mon tout et faire tourner la boucle 2x juste en changeant le date("W") par date("W").'-1' afin d'afficher mes 2 tableaux.

C'est ce que je trouve de plus simple à faire.

---------------------------

Et pour l'histoire de la caisse, il me faut en fait prendre la valeur de la caisse de la semaine précédente a laquelle j'ajoute(ou soustrait) toutes les dépenses et revenus de la semaines actuelle afin d'afficher l'argent qu'à le joueur en caisse en ce moment :)
AND ( semaine = '.date("W").'-1 OR semaine = '.date("W").')

par Truc » 21 nov. 2007, 00:16

j'aurai du te demander les tables aussi sous forme de CREATE TABLE...

A première vu 2 requetes séparées si tu ne veux que le total de la semaine passé.
Sinon avec un OR pour les deux dates
AND ( semaine = '.date("W").'-1 OR semaine = '.date("W").')
Ce qui me dis que tu ne pouras pas avoir les résultats sur 2 années puisque tu ne gardes que le numéro de semaine.