IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

[Conception] addition un peu dure


Sujet :

PHP & Base de données

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 10
    Par défaut [Conception] addition un peu dure
    bonjour

    j'ai besoin de votre aide pour mon site

    c'set un site de jeu gratuit
    j'explique pour que vous compreniez la question
    donc c un jeu sur la grande surface
    on a des rayon avec des commandes lorsque la commande et prete on la transfere dans le stock.

    puis on relance une nouvelle commande pourqlaquel il faut de l'argent et des bon de commande.
    pour imager on va dire que c'est un terrain que on veut faire planter des tomates mais pour le faire il faut des graine ( bon de commande)
    donc je dois faire une page qui recolte et qui replante
    et a chaque fois je dois prendre la recolte et la mettre dans le stock
    et ensuite prendre une graine dans le stock et l planter dans le terrain.

    le probleme tout serai ok
    mais je n'arrive pas a additionner les recoltes
    en fait si j'ai que 1 terrain cela se passe bien
    ca me prend bien le stock et la graine.
    mais si j'ai 2 recolte ( deux terrain) ca additionne pas.

    et ca je sais pas le faire.


    j'ai tenter le ++ a la ligne 114 mais cela ne fonctionne pas a chaque fois
    et comme je connais pas trop cette fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
     
    <?php session_start(); 
    include ("inc/acces.php");
    include ("inc/f.php");
        //echo'<script>alert(" !");</script>';
        // donc ici on fait un raccourci  pour eviter de chercher ou on doit modifier
        $nomressource= 'Barbecue'; // nom de l'env
        $env=109; // numero de  env
     
     
    ?>
     
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <title>Aldebaran city le centre commercial .</title>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    <link rel="stylesheet" href="MiseEnPage.css" type="text/css" />
    <script type="text/javascript" src="../Fonctions.js"></script>
    </head>
     
    <body>
    <script>
    if (screen.width == 640)
        document.write('<table width="640" border="0" align="center">');
    else if (screen.width == 800)
        document.write('<table width="750" border="0" align="center">');
    else if (screen.width == 1024)
        document.write('<table width="950" border="0" align="center">');
    else if (screen.width == 1152)
        document.write('<table width="1102" border="0" align="center">');
    else if (screen.width == 1280)
        document.write('<table width="1200" border="0" align="center">');
    else if (screen.width == 1600)
        document.write('<table width="1550" border="0" align="center">');
    else
        document.write('<table width="950" border="0" align="center">');
    </script>
      <tr>
          <!-- haute de page -->
        <td colspan="3" valign="top">
            <div id="haut_page">
                <?php include 'Includes/Haut.inc' ?>
            </div>
     
            <div id="annoce">
                <?php include 'Includes/annonces.inc' ?>
            </div>
        </td>
      </tr>
      <tr>
      <!-- menu gauche -->
        <td width="150px" valign="top">    
            <div id="menu_gauche">
                <?php //Affichage du menu selon si l'on est connecté ou pas
                if (!isset($_SESSION['id']) and !isset($_SESSION['pass'])) // si les variables sont enregistrées dans une session 
                    include 'Includes/Menu_Gauche.inc';
                else
                    if($_SESSION['modo'] == 1)
                        include 'Includes/Menu_Gauche_Modo.inc';
                    else
                        include 'Includes/Menu_Gauche_Connecter.inc';    
                ?>
            </div>    
        </td>
     
        <!-- centre -->
        <td width="500px" valign="top" align="center">    
        <?php
        include ("inc/acces.php");
     
     
    echo'texte eplication bla bla bla bla <br> bla bla <br>';
     
     
     
     
     
        if ($login==0)  //je regarde si connecter
            {
                include("inc/erreur.php"); 
            }
            else // si connecter
        {
     
        if(isset($cmdEngager)) //si formulaire valider
            {
                echo'bouton cliquer  ok <br>';
                //donc on attaqqque
                // je recherche les terrains qui son a l'id du joueur et dont l'env et l'env qui y a marque en haut dans raccourci et dont le nb = 0 c a dire que la recolte est prete
                $strReq="select * from terrains where id='$id' and nb=0 and env='$env'";
                $strEnv=mysql_query($strReq);
                            echo'<script>alert(" stok avant = $stocks '.$stocks.'  ");</script>';
                while($tabRes=mysql_fetch_array($strEnv)) //on va se faire tous les terrain  avecc la boucle
     
                if($tabRes['nb']==0) // la c la requette qui regarde le nb dans terrains
                // donc si il  nb est = 0 je continu
     
                {
     
                // maintenant on regarde que la recolte est pleine
                if($tabRes['recolte']!=0)// si la recolte est different de zero donc si  il y a quelque chose  on continu
                    {
                        $type=$tabRes['type']; // la je regarde le type
                        $qte=$tabRes['recolte'];// la c la recolte
                        $Replante_id_te=$tabRes['id_te'];// la c la recolte
                        // il faut  recolter et replanter 
                        // pour replanter il faut des bon de commande
                        // donc je dois 1 prendre la recolte et la mettre dans le stock 2regarder si il a la graine et la planter.
                        // si il a pas la graine on replante pas mais on va lui dire si le terrain  est replanter ou pas du moins on va essayer lol
                        // le probleme que je vais rencontedr c que il va  falloir soit garder en memoire  soit trouver une solution pour que chaque recolte se fasse a chaque fois c pas gagner car si je me souviens c le dernier qui est en memeoire
     
                        // bon je tente le coup
                    //    echo'<script>alert(" stok avant = $stocks_s '.$stocks_s.'  ");</script>';
                        $qte++;
     
     
                        $tab_s[$type]+=$qte++;
                        $strRes=liste($stocks,$type,$qte);
     
                        // je met la recolte dans le stock
                        mysql_query("UPDATE biens SET stocks='$strRes' WHERE id='$id'") or die('Erreur SQL'.mysql_error());
     
                        // je regarde si il y a la graine
                        $q=mysql_query("SELECT * FROM terrains WHERE id='$id'and id_te='$Replante_id_te'") or die('Erreur SQL !<br>'.mysql_error());
                        $d=mysql_fetch_array($q);
                        $ReplanteType=$d['type'];//donc là j'ai le type de l'espece
                        $Replantesupperficiee=$d['supperficie']; //là j'ai la surface
     
                        // je regarde quel graine il me faut 
                        $qrechercheGraine=mysql_query("SELECT id_pr FROM especes WHERE id='$ReplanteType'") or die('Erreur SQL !<br>'.mysql_error());
                        $drechercheGraine=mysql_fetch_array($qrechercheGraine);
                        $Replanteid_pr=$drechercheGraine['id_pr'];//donc là j'ai le bb qui faut
     
                        // il faut une graine par m²
                        //si  il a assez de graine je continu sinon je dit que le terrain est pas relancer
     
                        // ne pas oublier de prendre l'argent                                      ###############################################
                        if ($tab_s[$Replanteid_pr] >= $Replantesupperficiee)  // si  le nombre de graine est superieur ou egal  a la taille terrain je continue
     
                        {
                        mysql_query("UPDATE terrains SET  nb='$Replantesupperficiee',  av=1, recolte=0, date='$date_m' WHERE id='$id' and id_te='$Replante_id_te'") or die('Erreur SQL'.mysql_error());
                        echo 'terrain numero '.$Replante_id_te.' est mis a jour ';
                        $tab_s[$Replanteid_pr]-=$Replantesupperficiee;
                        $strResCM=liste($stocks,$type,$Replantesupperficiee);
                        //mysql_query("UPDATE biens SET stocks='$strResCM' WHERE id='$id'") or die('Erreur SQL'.mysql_error());
                        }
                        else //sinon  je dit que la relance est pas bonne
                        {
                        mysql_query("UPDATE terrains SET nb=0,av=0, recolte=0  WHERE id='$id' and id_te='$Replante_id_te'") or die('Erreur SQL 140'.mysql_error());
                        echo'le terrain '.$Replante_id_te.' na pas ete replanetr manque de bon de commande';
                        }
     
                    }
                }
                else
                echo'y a rien a faire';
     
            }
            else // sinon si  il arrive juste on affiche le formulaire
     
     
            {
                echo'<br><br>Ici vous pouvez relance tous vos terrains  '.$nomressource.' ';
                echo'<form name="frmMission" action="relancer_test.php" method="post"><table><tr><td>Pour relancer tous les terrains  '.$nomressource.' cliques sur le bouton relancer</td><tr>';
                echo'<tr><td align=center><input class="bouton" type="submit" name="cmdEngager" value="Relancer vos terrains"></td></tr></table></form>';                        
     
            }
     
     
     
     
        }
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
        ?>
        </td>
     
        <!-- menu droit -->
        <td width="150px" valign="top">
            <form name="frmMenu_Droit">
                 <div id="menu_droit">
                    <?php //Affichage du menu selon si l'on est connecté ou pas
                    if (!isset($_SESSION['id']) and !isset($_SESSION['pass'])) // si les variables sont enregistrées dans une session 
                        include 'Includes/Menu_Droit.inc';
                    else
                        include 'Includes/Menu_Droit_connect.inc';    
                    ?>              
                  </div>
            </form>
        </td>
      </tr>
      <tr>
          <!-- bas de page -->
            <td colspan="3" valign="top" align="center">
            <div id="bas_page">
                <?php include 'Includes/Bas.inc' ?>
            </div>
        </td>
      </tr>
    </table>
    </body>
    </html>
    merci pour votre coup de main

    fab

  2. #2
    Membre éclairé Avatar de Linio
    Inscrit en
    Octobre 2005
    Messages
    431
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 431
    Par défaut
    Faut que tu réduises le code qui te pose problème.

    J'ai essayé de regarder mais difficile de se plonger sur toute ta page, surtout que tu as du code commenté, etc...

    Montre nous exactement où se trouve ton problème, là c'est pas super clair.

    Y'a ça moi qui me parait étrange:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while($tabRes=mysql_fetch_array($strEnv))
    Déjà pas de ; (mais c'est un détail ), mais surtout tu écrases les données dans $tableRes à chaque coup, tu es sûr que tu ne veux pas plutôt faire un :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while($tabRes[]=mysql_fetch_array($strEnv));
    Qui te stockera une matrice de tes résultats?

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 10
    Par défaut
    bonjour
    merci de ta reponse.

    donc le probleme est a ce stade

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $qte++;
     
     
    $tab_s[$type]+=$qte++;
    $strRes=liste($stocks,$type,$qte);
     
    mysql_query("UPDATE biens SET stocks='$strRes' WHERE id='$id'") or die('Erreur SQL'.mysql_error());
    en fait là

    mysql_query("UPDATE biens SET stocks='$strRes' WHERE id='$id'") or die('Erreur SQL'.mysql_error());

    il me met bien dans le stock
    mais je fait la boucle et il me met pas tout
    c'est a dire que si j'ai terrains a recolter il recolte juste un

    la table stock est un varchar(255) et dedans c'est stocke comme cela

    ,100,1000,10,100,25
    cela veut dir e que il y a 100 de produit 1 , 1000 du produit 2 ,10 du produit 3 etc.

    donc si la mise a jour de la recolte c'est 25 du produit 2

    le nouveau stock sera de ,100,1025,10,100,25


    et mon probleme
    c'est que si je recolte 25 du produit 2 et 36 du produit 4 il me prend juste en compte une mise a jour


    du coup j'ai ajouté les ++ ici

    $qte++;

    $tab_s[$type]+=$qte++;


    et la le resultat des fois est bon ,des fois non!



    fabien

  4. #4
    Membre éclairé Avatar de Linio
    Inscrit en
    Octobre 2005
    Messages
    431
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 431
    Par défaut
    Je comprends pas pourquoi tu fais $qte++, tes données sont éronnées si tu fais ça.

    Tu dois avoir un soucis dans ta fonction liste si tu veux mon avis.

    D'une part tu incrémentes le tableau $tab_s, d'autre part tu ne le réinjecte pas dans ta base, donc c'est forcément faux les résultats que tu obtiens...

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 10
    Par défaut
    oui mais c que je sais pas faire cela.
    en fait le resulat
    $qte
    si $qte=55
    cela me le met dans la base

    par contre si j'ai 2 fois ou 3 fois

    $qte=55
    puis $qte= 63
    puis $qte= 3

    je sais pas le faire

    car ca me remplis que 1 fois

    alors je me suis dit si je mets ++ derriere
    ca me changera le nom et peut etre que ca va marcher
    lol

    je suis apprenti programmeur

    si tu peux me dire comment faire pour que ca marche qu'est ce qui manque

    merci
    fabien
    je le recupere mais comme j'ai plusieurs fois

  6. #6
    Membre éclairé Avatar de Linio
    Inscrit en
    Octobre 2005
    Messages
    431
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 431
    Par défaut
    Ben je sais même pas ce que tu réinjecte dans ta base!
    Je veux bien t'aider mais là je peux pas faire grand chose.

    Visiblement tu utilises une fonction liste qui recréé la liste que tu voudrais avoir en base, c'est cette fonction qui doit poser problème, montre moi le code.

    Un truc que je comprends pas, c'est toi qui a fait le reste du code où tu l'as pompé quelque part?

    Parce que si tu as réussi à faire le reste, ça c'est dans la continuité, je vois pas vraiment ce qui te pose problème.

    Au delà de ça, du peu que j'en vois, ta conception m'a l'air bancale, une base de donnée sert justement à ne pas avoir à faire des données séparées par des virgules, mais bel et bien de les stocker proprement.

    A mon avis certains trucs sont à revoir.

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 10
    Par défaut
    le systeme avez etait optimisé pour www.phenix-land.com pour alleger la base un maximum car beaucoup de joueurs (+ 10 000 acharner par jour)et surtout beaucoup de produit.

    dans l'exemple aldebarancity il y a dejà plus de 600 especes alors la base on l'aurait tué.
    on a été 3 a developper le jeux et cette partie c'est pas moi j'ai pas le niveau.


    voici la fonction liste
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
     
    // Incrémente une variable dans une liste ($liste est la liste, $rang est le rang qu'il faut incrémenter, et $qte la quantité à incrémenter)
    function liste($liste,$rang,$qte) {
    	$tab=explode(',',$liste);
    	$imax=sizeof($tab);
    	if ($imax<$rang) { $imax=$rang; } 
    	for ($i=1; $i<=$imax; $i++) { 
    		if ($i==$rang) { $nb=($tab[$i]+$qte); $var.=",".$nb; }
    		elseif ($i<$imax) { $var.=",".abs($tab[$i]); }	
    	}
    	return $var;
    }
     
    //************************************************************************************
    function liste_ajout($liste,$rang) 
    {
    	$tab=explode(',',$liste);
    	$imax=sizeof($tab);
     
    	if($imax<$rang)
    		$imax = $rang;
     
    	//$imax = 250;
    	$var = "";
     
    	for ($i=1; $i<=$imax; $i++) 
    	{ 
    		$var.=",".abs($tab[$i]); 
    	}
     
    	return $var;	
    }

  8. #8
    Membre éclairé Avatar de Linio
    Inscrit en
    Octobre 2005
    Messages
    431
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 431
    Par défaut
    Si tu n'as pas le niveau pourquoi le faire?

    Bon soyons clair, et je dis ça avec toute la gentillesse que je peux: Votre code est totalement foireux.

    On ne peut selon moi en aucun cas optimiser une BDD en fusionnant toutes les données sur une seule colonne avec des virgules (suis pas un expert mais bon), d'autre part ta fonction liste pourrait être optimisée pour faire 2 fois moins de traitement, je veux dire pour incrémenter un tableau faut quand même m'expliquer pourquoi vous parcourez tout le tableau alors qu'un simple:

    ferait l'affaire en reconstruisant ensuite la liste...

    Il faut que tu revois ta fonction liste et que tu inclus ton $tab_s au lieu de le recalculer, c'est programmer bizarremment.

    Au delà de ça, et là encore c'est pas méchant, mais les notions utilisées dans les pages/fonctions que tu affiches sont plutôt simples, donc si tu n'as pas le niveau pour ça, au final quel est ton niveau en PHP?
    Parce que je veux bien aider, mais parler à un mur bof

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 10
    Par défaut
    desole det'avoir fait perdre ton temps.
    j'etais juste venu demander de l'aide, je pensais que c'etait le but de ce forum.

  10. #10
    Membre éclairé Avatar de Linio
    Inscrit en
    Octobre 2005
    Messages
    431
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 431
    Par défaut
    Non mais je veux bien aider, mais bon faire la conception d'un site, j'en ai déjà un au boulot et un second à la maison, donc bon... tu comprendras que...

    Faut pas se jeter tête baissée dans un site à grand coup de BDD, faut essayer de poser un peu ses bases, sinon ça devient difficile à débugger (la preuve).

    Je pense qu'il faut que tu simplifies ta fonction liste qui reconstruit ta liste.

    Comme je t'ai expliqué dans mon précédent post, il est inutile de reparcourir tout ton tableau en vérifiant si ton indice est égal à celui que tu aimerais avoir, il suffit de modifier ton tableau à l'indice voulu, et ensuite de reconstruire ton tableau avec les , en utilisant un while (comme ta méthode mais sans tous les ifs du coup).

Discussions similaires

  1. Un peu de mal a comprendre le concepte "one-to-many" et "many-to-many"
    Par chriscoolletoubibe dans le forum Hibernate
    Réponses: 4
    Dernier message: 29/03/2007, 18h50
  2. Addition de durées
    Par iradon dans le forum Windows Forms
    Réponses: 4
    Dernier message: 27/03/2007, 10h22
  3. Réponses: 4
    Dernier message: 09/08/2006, 10h27
  4. [Conception] nombre au hasard un peu special
    Par .:dev:. dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 21/01/2006, 21h07
  5. Un peu de philo - conception de tables pr gestion de prêts
    Par mariobedard dans le forum Décisions SGBD
    Réponses: 1
    Dernier message: 04/02/2005, 22h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo