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 :

Problème de production [gestion de temps etc..] [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Autre
    Inscrit en
    Mai 2016
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Mai 2016
    Messages : 64
    Points : 26
    Points
    26
    Par défaut Problème de production [gestion de temps etc..]
    Bonjour, je souhaite faire pour mon jeu un système de production de ressources.

    Le joueurs possèdent une production qui doit s'écouler sur une heure.
    Exemple je produit 1000 de ressources en 01heure. Mais je ne dois pas obtenir 1000 d'un coup, je dois obtenir 1.000 pendant l'heure qui s’écoule.

    Pour cela j'ai essayé de faire diverses choses, mais je n'ai pas réussi à faire des calcules de temps.

    J'ai donc essayé de faire:

    L'heure actuelle - Nouvelle Heure = Différence.

    Différence / 3600 (secondes) = Nombre temps écoule

    Nombre temps écoule * valeur de production (1000 pour l'exemple) = total à Update dans la BDD


    Par exemple, j'ai essayé se genre de chose mais je n'y arrive pas, je ne sais absolument pas comment faire, je voudrais bien un petit coup de main :p

    Cordialement,

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Tu peux nous montrer ton essai avec le code réel pour qu'on te dise ce qui ne va pas ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Autre
    Inscrit en
    Mai 2016
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Mai 2016
    Messages : 64
    Points : 26
    Points
    26
    Par défaut
    Oui je peux je met plusieurs essaies ^^ tout n'est pas compréhensible.


    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
    <?php
    // Initialisation des variables
    $iRessourcesDepart = $ress['gold']; 
    $iProductionParHeure = $mine_j['ouvrier'] + $mine_j['esclave']; 
    $iTempsDerniereModif = $mine_j['temps']; 
     
    //on calcule le nombre de secondes écoulées depuis la dernière mise à jour
    $iTempsActuel = time();
    $iTempsEcoule = $iTempsActuel - $iTempsDerniereModif ; 
     var_dump($iTempsEcoule);
    // On calcule le nombre de ressources produites durant le temps écoulé
    $iRessourceProduite = $iProductionParHeure * $iTempsEcoule;
     
    $iRessourceTotale = $iRessourcesDepart + $iRessourceProduite;
     
    // Mise a jour dans la bdd
    $up=$bdd->prepare('UPDATE ressource SET gold = gold+? WHERE id_planete = ? AND id_membre = ?');
    $up->execute(array($iRessourceProduite,$planete_utilise,$idmembre));
     
    ?>
    <html>
    <head>
        <script type="text/javascript">
            var iRessourceProduite = <?php echo $iRessourceProduite; ?>;
            var iProductionParHeure = <?php echo $iProductionParHeure; ?>;
            var iSecondes = 3600;
            function augmentation_ressource(){
     
                document.getElementById("ressource").innerHTML = iRessourcesDepart+(iProductionParHeure*iSecondes);
                iSecondes++;
                setTimeout("augmentation_ressource()",1000);
     
            }
        </script>
    </head>
    <body onload="augmentation_ressource()">
    <p>Votre production est de <span id="ressource"><?php echo $iRessourceTotale; ?></span> Or.</p>
    </body>
    </html>
    La c'est quelques infos trouvé sur le net combiné avec mes modifs mais sa ne fonctionne pas.

    Un second que j'ai essayé de faire que voici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $now = time();
    $date2 = strtotime("now");
    $diff = abs($date1 - $date2); // te retourne le nombre de seconde
    var_dump($diff);
    $nb_heure = $diff/3600; // te donne le nombre d'heure entre les deux dates 
     
    $total = $nb_heure*$valeur_ajouter; 
    var_dump($total);
    Voila deux exemples

    Cordialement,

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Qu'est ce que tu obtiens avec le premier code ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Autre
    Inscrit en
    Mai 2016
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Mai 2016
    Messages : 64
    Points : 26
    Points
    26
    Par défaut
    Que des erreurs, enfin déjà il produit par secondes, au lieu de par heure j'ai essayé de l'adapter pour sa, mais sans succès. Ensuite il me prend pas la bonne donné de base il me met direct autant que le timestamp niveau ressource de base et après il rajoute 100 par secondes.

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    enfin déjà il produit par secondes, au lieu de par heure
    Ce n'est pas ce que tu voulais ? que les 1000 soient gagnés progressivement ? (environ 0,27 par seconde donc).

    Ensuite il me prend pas la bonne donné de base
    La donnée de base pour quoi ?
    C'est quoi la bonne donnée de base ?

    Les colonnes "ouvriers" et "esclave" contiennent quoi et dans quelle unité ?
    La colonne "temps" est dans quel format ?

    Dans ta requête UPDATE d'ailleurs tu oublies de mettre à jour "temps".
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Autre
    Inscrit en
    Mai 2016
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Mai 2016
    Messages : 64
    Points : 26
    Points
    26
    Par défaut
    Ce n'est pas ce que tu voulais ? que les 1000 soient gagnés progressivement ? (environ 0,27 par seconde donc).
    Alors oui mais lui il va faire 1.000 par secondes :p enfaite ^^

    La donnée de base pour quoi ?
    C'est quoi la bonne donnée de base ?
    Oui c'est le champs dans la base de donnée. [la partie ressources]

    Les colonnes "ouvriers" et "esclave" contiennent quoi et dans quelle unité ?
    Elle contiennent les chiffres de la production ( Donc la 1000 pour l'exemple - Les 1000 sont répartie dans les deux colonnes )
    La colonne "temps" est dans quel format ?
    Je l'ai mise en timestamp

    Dans ta requête UPDATE d'ailleurs tu oublies de mettre à jour "temps".
    En effet!

  8. #8
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Ta production c'est donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $iRessourceProduite = ($iProductionParHeure/3600) * $iTempsEcoule;
    et une colonne TIMESTAMP mysql ne contient pas un timestamp unix, il faut donc faire la conversion :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $iTempsDerniereModif = strtotime($mine_j['temps']);
    Pour la mise à jour tu peux simplement spécifier dans la structure de la colonne "ON UPDATE CURRENT_TIMESTAMP"

    Tout ces problèmes s'identifient facilement si on découpe et regarde ce qu'on obtient comme résultat pour les deux opérations qu'il fait :
    - est-ce que mon code calcule bien le temps écoulé entre deux actions ?
    - est-ce que mon code calcule bien la valeur de la production par seconde ?
    c'est tout.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Autre
    Inscrit en
    Mai 2016
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Mai 2016
    Messages : 64
    Points : 26
    Points
    26
    Par défaut
    Je vais essayer, je donnerais la réponse en fin de soirée car je ne peux pas le faire maintenant.

    Par contre je débute en php, je n'ai jamais travaillais le temps, l'addition, soustraction donc pour moi ce n'est pas une évidence :p il y a plein de fonction que je n'ai pas utilisé etc..

    Je vais voir donc pour rajouter l'update du temps et utiliser strtotime.

    Merci Je vous tiens au courant!

  10. #10
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    A noter que tout le traitement peut être fait directement avec une requête sans passer par un SELECT et des calculs en PHP :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE ressource SET gold = gold + ((UNIX_TIMESTAMP() - UNIX_TIMESTAMP(temps)) * ((ouvrier + esclave) / 3600))  WHERE id_planete = ? AND id_membre = ?
    Apparement tu as deux tables mais le principe est le même.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  11. #11
    Nouveau membre du Club
    Homme Profil pro
    Autre
    Inscrit en
    Mai 2016
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Mai 2016
    Messages : 64
    Points : 26
    Points
    26
    Par défaut
    Alors j'ai fait les modifs et j'ai regardé avec les var_dump;

    TempsEcoule ressort a zero.

    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
    $up=$bdd->prepare('UPDATE mines_joueur SET temps = NOW() WHERE id_planete = ? AND id_mine = ?');
    $up->execute(array($planete_utilise,1));
     
    $mine=$bdd->prepare('SELECT * FROM mines_joueur WHERE id_planete = ? AND id_mine = ?');
    $mine->execute(array($planete_utilise,1));
    $mine_j=$mine->fetch();
     
    $r=$bdd->prepare('SELECT * FROM ressource WHERE id_planete = ? AND id_membre = ?');
    $r->execute(array($planete_utilise,$idmembre));
    $ress=$r->fetch();
     
     
    $iRessourcesDepart = $ress['gold']; 
    $iProductionParHeure = $mine_j['ouvrier'] + $mine_j['esclave']; 
     
    $iTempsDerniereModif = strtotime($mine_j['temps']);  
     
    //on calcule le nombre de secondes écoulées depuis la dernière mise à jour
    $iTempsActuel = time();
    $iTempsEcoule = $iTempsActuel - $iTempsDerniereModif ; 
     var_dump($iTempsEcoule);
     
    // On calcule le nombre de ressources produites durant le temps écoulé
    $iRessourceProduite = ($iProductionParHeure/3600) * $iTempsEcoule;
     
     var_dump($iProductionParHeure);
    $iRessourceTotale = $iRessourcesDepart + $iRessourceProduite;
     
    var_dump($iRessourceProduite);
     
    // Mise a jour dans la bdd
    //$up=$bdd->prepare('UPDATE ressource SET gold = gold+? WHERE id_planete = ? AND id_membre = ?');
    //$up->execute(array($iRessourceProduite,$planete_utilise,$idmembre));
     
    $up=$bdd->prepare('UPDATE ressource SET gold = gold + ((UNIX_TIMESTAMP() - UNIX_TIMESTAMP(temps)) * ((ouvrier + esclave) / 3600))  WHERE id_planete = ? AND id_membre = ?');
    $up->execute(array($planete_utilise,$idmembre));
    ?>
    <html>
    <head>
        <script type="text/javascript">
            var iRessourceProduite = <?php echo $iRessourceProduite; ?>;
            var iProductionParHeure = <?php echo $iProductionParHeure; ?>;
            var iSecondes = 3600;
            function augmentation_ressource(){
     
                document.getElementById("ressource").innerHTML = iRessourcesDepart+(iProductionParHeure*iSecondes);
                iSecondes++;
                setTimeout("augmentation_ressource()",1000);
     
            }
        </script>
    </head>
    <body onload="augmentation_ressource()">
    <p>Votre production est de <span id="ressource"><?php echo $iRessourceTotale; ?></span> Or.</p>
    </body>
    </html>

  12. #12
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Il faut mettre à jour "temps" après avoir mis à jour "gold" sinon évidemment tu es à 0 de délai entre la valeur et maintenant.

    Mais comme je t'ai dit, tu peux te passer de l'étape de mise à jour de temps si tu configures la colonne avec l'option "ON UPDATE CURRENT_TIMESTAMP", la colonne sera mise à jour automatiquement quand tu mettras à jour "gold"

    Concernant les méthodes c'est soit le calcul en PHP, soit la méthode "tout SQL", mais pas les deux en même temps.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  13. #13
    Nouveau membre du Club
    Homme Profil pro
    Autre
    Inscrit en
    Mai 2016
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Mai 2016
    Messages : 64
    Points : 26
    Points
    26
    Par défaut
    Mais comme je t'ai dit, tu peux te passer de l'étape de mise à jour de temps si tu configures la colonne avec l'option "ON UPDATE CURRENT_TIMESTAMP", la colonne sera mise à jour automatiquement quand tu mettras à jour "gold"
    c'est ce que j'ai fait voici ma table:

    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
    --
    -- Structure de la table `mines_joueur`
    --
     
    CREATE TABLE IF NOT EXISTS `mines_joueur` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `ouvrier` int(11) NOT NULL,
      `esclave` int(11) NOT NULL,
      `id_mine` int(11) NOT NULL,
      `id_planete` int(11) NOT NULL,
      `mine_possede` int(11) NOT NULL,
      `production_base` int(11) NOT NULL,
      `temps` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=13 ;

  14. #14
    Nouveau membre du Club
    Homme Profil pro
    Autre
    Inscrit en
    Mai 2016
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Mai 2016
    Messages : 64
    Points : 26
    Points
    26
    Par défaut
    bon voila après des modifications, l'update de ressources se fait mais absolument pas sur les chiffres demandé:

    Voici le code:

    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
    <?php
     
    	require_once 'connexion_bdd.php';
    	$planete_utilise=htmlentities($_SESSION['planete_utilise']);
    	$id_membre=htmlentities($_SESSION['id']);
     
     
    	$mine=$bdd->prepare('SELECT * FROM mines_joueur WHERE id_planete = ? AND id_mine = ?'); // RECUPERE LES INFOS POUR LA MINE 1 : MINE OR
    	$mine->execute(array($planete_utilise,1));
    	$mine_o=$mine->fetch();
     
    	$mine=$bdd->prepare('SELECT * FROM mines_joueur WHERE id_planete = ? AND id_mine = ?'); // 
    	$mine->execute(array($planete_utilise,2));
    	$mine_t=$mine->fetch();
     
    	$mine=$bdd->prepare('SELECT * FROM mines_joueur WHERE id_planete = ? AND id_mine = ?'); // 
    	$mine->execute(array($planete_utilise,3));
    	$mine_c=$mine->fetch();
     
    	$mine=$bdd->prepare('SELECT * FROM mines_joueur WHERE id_planete = ? AND id_mine = ?'); // 
    	$mine->execute(array($planete_utilise,4));
    	$mine_orinia=$mine->fetch();
     
    	$mine=$bdd->prepare('SELECT * FROM mines_joueur WHERE id_planete = ? AND id_mine = ?'); // 
    	$mine->execute(array($planete_utilise,5));
    	$mine_orinium=$mine->fetch();
     
    	$mine=$bdd->prepare('SELECT * FROM mines_joueur WHERE id_planete = ? AND id_mine = ?'); // 
    	$mine->execute(array($planete_utilise,6));
    	$mine_org=$mine->fetch();
     
     
    	$derniereActualisation = $mine_o['temps']; // récupération du timestamp dans la BDD
     
    	$production_base_or 			= 15; // Or produites par heure.
    	$production_base_titane 		= 25; // Titane produites par heure.
    	$production_base_orinia 		= 5; // Orinia produites par heure.
    	$production_base_cristal 		= 15; // Cristal produites par heure.
    	$production_base_orinium 		= 10; // Orinium produites par heure.
    	$production_base_matiere_organique 	= 65; // Matière Organique produites par heure.
     
    	$nombre_ouvrier_or					= $mine_o['ouvrier']; // récupération du nombre d'ouvrier de la mine d'or dans la BDD
    	$nombre_ouvrier_titane				= $mine_t['ouvrier']; // récupération du nombre d'ouvrier de la mine de titane dans la BDD
    	$nombre_ouvrier_orinia				= $mine_c['ouvrier']; // récupération du nombre d'ouvrier de la mine d'orinia dans la BDD
    	$nombre_ouvrier_cristal				= $mine_orinia['ouvrier']; // récupération du nombre d'ouvrier de la mine de cristal dans la BDD
    	$nombre_ouvrier_orinium				= $mine_orinium['ouvrier']; // récupération du nombre d'ouvrier de la mine d'orinium dans la BDD
    	$nombre_ouvrier_matiere_organique	= $mine_org['ouvrier']; // récupération du nombre d'ouvrier de la mine de matière organique dans la BDD
     
    	$production_ouvrier			= 1; // Ressources produites par heure.
     
    	$nombre_esclave_or					=$mine_o['esclave'] ; // récupération du nombre d'esclave de la mine d'or dans la BDD
    	$nombre_esclave_titane				= $mine_t['esclave']; // récupération du nombre d'esclave de la mine de titane dans la BDD
    	$nombre_esclave_orinia				= $mine_c['esclave']; // récupération du nombre d'esclave de la mine d'orinia dans la BDD
    	$nombre_esclave_cristal				= $mine_orinia['esclave']; // récupération du nombre d'esclave de la mine de cristal dans la BDD
    	$nombre_esclave_orinium				= $mine_orinium['esclave']; // récupération du nombre d'esclave de la mine d'orinium dans la BDD
    	$nombre_esclave_matiere_organique	=$mine_org['esclave']; // récupération du nombre d'esclave de la mine de matière organique dans la BDD
     
    	$production_esclave			= 2; // Ressources produites par heure.
     
    // On mets tout ça à jour :
     
    	$OrDuJoueur 			+= (time() - $derniereActualisation) * ($production_base_or / (3600)) + (($nombre_ouvrier_or * $production_ouvrier) / (3600)) + (($nombre_esclave_or * $production_esclave) / (3600));
    	$TitaneDuJoueur 		+= (time() - $derniereActualisation) * ($production_base_titane / (3600)) + (($nombre_ouvrier_titane * $production_ouvrier) / (3600)) + (($nombre_esclave_titane * $production_esclave) / (3600));
    	$OriniaDuJoueur 		+= (time() - $derniereActualisation) * ($production_base_orinia / (3600)) + (($nombre_ouvrier_orinia * $production_ouvrier) / (3600)) + (($nombre_esclave_orinia * $production_esclave) / (3600));
    	$CristalDuJoueur 		+= (time() - $derniereActualisation) * ($production_base_cristal / (3600)) + (($nombre_ouvrier_cristal * $production_ouvrier) / (3600)) + (($nombre_esclave_cristal * $production_esclave) / (3600));
    	$OriniumDuJoueur 		+= (time() - $derniereActualisation) * ($production_base_orinium / (3600)) + (($nombre_ouvrier_orinium * $production_ouvrier) / (3600)) + (($nombre_esclave_orinium * $production_esclave) / (3600));
    	$Matiere_organiqueDuJoueur 	+= (time() - $derniereActualisation) * ($production_base_matiere_organique / (3600)) + (($nombre_ouvrier_matiere_organique * $production_ouvrier) / (3600)) + (($nombre_esclave_matiere_organique * $production_esclave) / (3600));
     
     
    	$mineo=$bdd->prepare('UPDATE ressource SET gold = gold+?, titane=titane+?, cristal=cristal+?, orinia=orinia+?, orinium=orinium+?, organique=organique+? WHERE id_planete = ? AND id_membre = ?');
    	$mineo->execute(array($OrDuJoueur,$TitaneDuJoueur,$CristalDuJoueur,$OriniaDuJoueur,$OriniumDuJoueur,$Matiere_organiqueDuJoueur,$planete_utilise,$id_membre));
     
    ?>
    Cordialement, merci

  15. #15
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Je t'ai déjà dit ce qu'il fallait regarder :
    est-ce que mon code calcule bien le temps écoulé entre deux actions ?
    Je ne pense pas puisque le strtotime() n'est pas là.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  16. #16
    Futur Membre du Club Avatar de Lothaliel
    Homme Profil pro
    IT Project Manager
    Inscrit en
    Juillet 2016
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : IT Project Manager
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2016
    Messages : 7
    Points : 8
    Points
    8
    Par défaut
    Bonjour,

    Serait-il possible d'avoir plus d'explication sur l'utilisation de :

    1 : UNIX_TIMESTAMP() - UNIX_TIMESTAMP(temps)
    2 : strtotime()

    La fonction strtotime() s'ecrit comme cela : int strtotime ( string $time [, int $now = time() ] ) ou on l'utilise comme dans ce cas : $derniereActualisation = strtotime($mine_j['temps']); ?

    Ma question est comment mettre en place la fonction strtotime() et utiliser UNIX_TIMESTAMP() - UNIX_TIMESTAMP(temps) dans notre cas ?

    Merci d'avance

  17. #17
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Soit tu utilises UNIX_TIMESTAMP() dans la requête, soit strtotime() en PHP.

    Au passage, la structure actuelle de la base de donnée n'est pas bonne et faire 6 requêtes pour récupérer les 6 types de ressources c'est caca.
    Le type de ressource devrait être décrit dans la table des mines.
    Et l'id de la planète devrait être dans la table des mines également et pas dans la table des mines du joueurs puisque je suppose que les mines ne se déplacent pas.
    Également les ressources du joueurs devraient être dans une table indépendante avec une ligne par ressource par joueur.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  18. #18
    Futur Membre du Club Avatar de Lothaliel
    Homme Profil pro
    IT Project Manager
    Inscrit en
    Juillet 2016
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : IT Project Manager
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2016
    Messages : 7
    Points : 8
    Points
    8
    Par défaut
    Merci pour les conseils. Tu me conseil d'utiliser UNIX_TIMESTAMP() ou strtotime() ? Comment les utiliser ?

  19. #19
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    J'ai montré comment faire avec les deux dans les messages plus haut.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  20. #20
    Futur Membre du Club Avatar de Lothaliel
    Homme Profil pro
    IT Project Manager
    Inscrit en
    Juillet 2016
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : IT Project Manager
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2016
    Messages : 7
    Points : 8
    Points
    8
    Par défaut
    Voici la page php actuelle :

    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
    <?php
     
    	require_once 'connexion_bdd.php';
    	$planete_utilise=htmlentities($_SESSION['planete_utilise']);
    	$id_membre=htmlentities($_SESSION['id']);
     
    		$mine=$bdd->prepare('SELECT * FROM mines_joueur WHERE id_planete = ? AND id_mine = ?'); // RECUPERE LES INFOS POUR LA MINE 1 : MINE OR
    		$mine->execute(array($planete_utilise,1));
    		$mine_o=$mine->fetch();
     
    		$mine=$bdd->prepare('SELECT * FROM mines_joueur WHERE id_planete = ? AND id_mine = ?'); // RECUPERE LES INFOS POUR LA MINE 2 : MINE TITANE
    		$mine->execute(array($planete_utilise,2));
    		$mine_t=$mine->fetch();
     
    		$mine=$bdd->prepare('SELECT * FROM mines_joueur WHERE id_planete = ? AND id_mine = ?'); // RECUPERE LES INFOS POUR LA MINE 3 : MINE ORINIA
    		$mine->execute(array($planete_utilise,3));
    		$mine_c=$mine->fetch();
     
    		$mine=$bdd->prepare('SELECT * FROM mines_joueur WHERE id_planete = ? AND id_mine = ?'); // RECUPERE LES INFOS POUR LA MINE 4 : MINE CRISTAL
    		$mine->execute(array($planete_utilise,4));
    		$mine_orinia=$mine->fetch();
     
    		$mine=$bdd->prepare('SELECT * FROM mines_joueur WHERE id_planete = ? AND id_mine = ?'); // RECUPERE LES INFOS POUR LA MINE 5 : MINE ORINIUM
    		$mine->execute(array($planete_utilise,5));
    		$mine_orinium=$mine->fetch();
     
    		$mine=$bdd->prepare('SELECT * FROM mines_joueur WHERE id_planete = ? AND id_mine = ?'); // RECUPERE LES INFOS POUR LA MINE 6 : MINE MATIERE ORGANIQUE
    		$mine->execute(array($planete_utilise,6));
    		$mine_org=$mine->fetch();
     
    		// RECUPERE STOCK DE Ressources
    		$ress=$bdd->prepare('SELECT * FROM ressource WHERE id_planete = ? AND id_membre = ?'); // RECUPERE LES INFOS DE STOCK
    		$ress->execute(array($planete_utilise,$id_membre));
    		$r=$ress->fetch();
     
    	$derniereActualisation 			= strtotime($mine_j['temps']); // Récupération du temps depuis la dernière actualisation dans la BDD
     
    	$reserve_or				= $r['gold']; // Récupération de l'or possédé par le joueur dans la BDD
    	$reserve_titane				= $r['titane']; // Récupération du titane possédé par le joueur dans la BDD
    	$reserve_cristal			= $r['cristal']; // Récupération du cristal possédé par le joueur dans la BDD
    	$reserve_orinia				= $r['orinia']; // Récupération de l'orinia possédé par le joueur dans la BDD
    	$reserve_orinium			= $r['orinium']; // Récupération de l'orinium possédé par le joueur dans la BDD
    	$reserve_matiere_organique		= $r['organique']; // Récupération de la matière organique possédé par le joueur dans la BDD
     
    	$production_base_or 			= 15; // Or produites par heure.
    	$production_base_titane 		= 25; // Titane produites par heure.
    	$production_base_cristal 		= 15; // Cristal produites par heure.
    	$production_base_orinia 		= 5; // Orinia produites par heure.
    	$production_base_orinium 		= 10; // Orinium produites par heure.
    	$production_base_matiere_organique 	= 65; // Matière Organique produites par heure.
     
    	$nombre_ouvrier_or			= $mine_o['ouvrier']; // Récupération du nombre d'ouvrier de la mine d'or dans la BDD
    	$nombre_ouvrier_titane			= $mine_t['ouvrier']; // Récupération du nombre d'ouvrier de la mine de titane dans la BDD
    	$nombre_ouvrier_cristal			= $mine_orinia['ouvrier']; // Récupération du nombre d'ouvrier de la mine de cristal dans la BDD
    	$nombre_ouvrier_orinia			= $mine_c['ouvrier']; // Récupération du nombre d'ouvrier de la mine d'orinia dans la BDD
    	$nombre_ouvrier_orinium			= $mine_orinium['ouvrier']; // Récupération du nombre d'ouvrier de la mine d'orinium dans la BDD
    	$nombre_ouvrier_matiere_organique	= $mine_org['ouvrier']; // Récupération du nombre d'ouvrier de la mine de matière organique dans la BDD
     
    	$production_ouvrier			= 1; // Ressources produites par heure grâce à un ouvrier.
     
    	$nombre_esclave_or			= $mine_o['esclave'] ; // Récupération du nombre d'esclave de la mine d'or dans la BDD
    	$nombre_esclave_titane			= $mine_t['esclave']; // Récupération du nombre d'esclave de la mine de titane dans la BDD
    	$nombre_esclave_cristal			= $mine_orinia['esclave']; // Récupération du nombre d'esclave de la mine de cristal dans la BDD
    	$nombre_esclave_orinia			= $mine_c['esclave']; // Récupération du nombre d'esclave de la mine d'orinia dans la BDD
    	$nombre_esclave_orinium			= $mine_orinium['esclave']; // Récupération du nombre d'esclave de la mine d'orinium dans la BDD
    	$nombre_esclave_matiere_organique	= $mine_org['esclave']; // Récupération du nombre d'esclave de la mine de matière organique dans la BDD
     
    	$production_esclave			= 2; // Ressources produites par heure grâce à un esclave.
     
    // On mets les ressources du joueur à jour :
     
    	$OrDuJoueur 			= $reserve_or + ((time() - $derniereActualisation) * ($production_base_or / 3600) + (($nombre_ouvrier_or * $production_ouvrier) / 3600) + (($nombre_esclave_or * $production_esclave) / 3600));
    	$TitaneDuJoueur 		= $reserve_titane + ((time() - $derniereActualisation) * ($production_base_titane / 3600) + (($nombre_ouvrier_titane * $production_ouvrier) / 3600) + (($nombre_esclave_titane * $production_esclave) / 3600));
    	$CristalDuJoueur 		= $reserve_cristal + ((time() - $derniereActualisation) * ($production_base_cristal / 3600) + (($nombre_ouvrier_cristal * $production_ouvrier) / 3600) + (($nombre_esclave_cristal * $production_esclave) / 3600));
    	$OriniaDuJoueur 		= $reserve_orinia + ((time() - $derniereActualisation) * ($production_base_orinia / 3600) + (($nombre_ouvrier_orinia * $production_ouvrier) / 3600) + (($nombre_esclave_orinia * $production_esclave) / 3600));
    	$OriniumDuJoueur 		= $reserve_orinium + ((time() - $derniereActualisation) * ($production_base_orinium / 3600) + (($nombre_ouvrier_orinium * $production_ouvrier) / 3600) + (($nombre_esclave_orinium * $production_esclave) / 3600));
    	$Matiere_organiqueDuJoueur 	= $reserve_matiere_organique + ((time() - $derniereActualisation) * ($production_base_matiere_organique / 3600) + (($nombre_ouvrier_matiere_organique * $production_ouvrier) / 3600) + (($nombre_esclave_matiere_organique * $production_esclave) / 3600));
     
    	$mineo=$bdd->prepare('UPDATE ressource SET gold = gold+?, titane=titane+?, cristal=cristal+?, orinia=orinia+?, orinium=orinium+?, organique=organique+? WHERE id_planete = ? AND id_membre = ?');
    	$mineo->execute(array($OrDuJoueur,$TitaneDuJoueur,$CristalDuJoueur,$OriniaDuJoueur,$OriniumDuJoueur,$Matiere_organiqueDuJoueur,$planete_utilise,$id_membre));
     
     
    ?>
    Le probleme est que la production ne respecte pas les chiffres. Comment faire ?

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. problème avec la gestion du temps
    Par jurams dans le forum SDL
    Réponses: 10
    Dernier message: 08/07/2011, 10h24
  2. [SDL-jeux]problème gestion de temps
    Par men1n2 dans le forum SDL
    Réponses: 33
    Dernier message: 13/11/2007, 18h06
  3. Aide pour l'analyse d'un problème de gestion de temps
    Par PAINCO dans le forum Décisions SGBD
    Réponses: 8
    Dernier message: 03/06/2005, 15h49
  4. [VB.NET] Gestion en temps réel d'une bdd access
    Par qwiskas dans le forum Windows Forms
    Réponses: 6
    Dernier message: 12/02/2005, 19h37
  5. fonction de gestion du temps
    Par fati dans le forum C
    Réponses: 5
    Dernier message: 26/12/2002, 16h32

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