Vous n'êtes pas identifié(e).
Dernière modification par d4v3 (21-01-2019 12:15:21)
Hors ligne
Dernière modification par pas-si-facile (15-01-2019 22:52:35)
Hors ligne
Il faudrait donc créer une table par type d'élément du jeu avec id, id_station, date_creation ??
Dernière modification par d4v3 (15-01-2019 23:07:32)
Hors ligne
Bonjour,
Sans même passer par du NTP tu dois pouvoitr trouver une fonction date() en PHP.
Tu peux créer un champ pour définir des types d'objets et ainsi définir des sous groupes d'objets sur lesquels appliquer une action particulière pour éviter d'ajouter une table. Mais tu as tout intérêt à définir précisément dès le départ l'ensemble des données dont tu auras besoin et leur organisation en tables dans la base, sous peine de passer pas mal de temps ensuite à refaire la base et adapter toutes les requêtes existantes au nouveau schéma.
D'accord je vais me pencher sur cette solution. Bon mes tables sont déjà créées mais comme je fais vraiment un petit projet ce sera pas long de tout retravailler ^^
des types d'objets et ainsi définir des sous groupes d'objets
J'ai créé des tables "ressources", pour bois et argent par exemple, et "infrastructures", pour caserne et centre-ville par exemple. Mais je ne vois pas comment organiser cela autrement, j'espère que ça se clarifiera en intégrant les notions que j'aurais trouvées durant mes recherches sur la fonction date() !
Merci !
Dernière modification par d4v3 (16-01-2019 01:07:00)
Hors ligne
...
P.S: Et donc il n'y aurait pas besoin de manip' côté serveur ? tout continuerait de se faire dans la gestion dans table ? J'avoue que c'est bien plus pratique pour le développement !
P.S2: Désolé pour le double-post j'ai miss-click..
Dernière modification par d4v3 (16-01-2019 01:13:22)
Hors ligne
Bonjour
=> https://www.w3schools.com/php/php_ref_date.asp
dans un moteur de recherche tu tape par exemple "php time" ou "php date" etc ...
sur le site officiel de php aussi => http://php.net/manual/fr/index.php
il faut juste travailler tes scripts
Merci, j'ai déjà utiliser date() par exemple. Mais je n'avais pas pensé à faire une organisation des tables dépendant de dates, donc je vais me pencher dessus. Je pensais que peut être il aurait fallu passé par un script serveur directement.
il faut juste travailler tes scripts
Qu'entends-tu par scripts ? Parles tu de mon code .php ou de scripts serveurs ?
Hors ligne
Histoire de mettre la grouille, euh... je veux dire de te donner des pistes, tu peux aussi définir et manipuler des dates en SQL directement..
voir par exemple ici https://openclassrooms.com/fr/courses/9 … tes-en-sql
Dans tous les cas ça n'empêche pas de gérer le serveur par NTP, mais ça sera plus facile de passer par les fonctions de PHP ou MySQL que d'écrire un client NTP en PHP.
Aaaah super merci ! Je ne pensais pas une minute à manipuler directement le SQL ! Je vais donc me pencher sur le tuto que tu as collé ici ! Merci
Hors ligne
Et tu fais un cron qui s'exécute très régulièrement (genre toutes les 10 secondes), qui vérifie s'il n'y a pas des tâches qui devraient être exécutées (action_time < now()), les exécute et les retire de la liste (ou les marque comme faites si tu veux un historique)
Donc, un script task_manager.php qui serait exécuté via « php /chemin/vers/ton/task_manager.php » toutes les 10 secondes par le serveur.
captnfab,
Association Debian-Facile, bépo.
TheDoctor: Your wish is my command… But be careful what you wish for.
Hors ligne
Hors ligne
Ah oui c'est cool, en plus ça permet d'avoir un journal de logs grâce à l'historique ! Ca complique la tâche mais ça a l'air plus optimisé je vais essayer !
C'est aussi un moyen plus simple de traites des cas comme « je construis une mine, dès que la mine est terminée, elle va commencer à extraire du fer, comment être sûr que l'extraction a bien commencé au bon moment, etc. » si t'as un cron, ta mine est « effectivement » construite au bon moment.
Donc, l'envoi du formulaire entre la data et task_manager.php dis if action_time < now(){faire le contenu de la data} si j'ai bien compris
Alors, ce que je te propose, c'est que ton task_manager.php soit réservé à cron (tu peux l'appeler cron.php d'ailleurs…). Ton formulaire pour rajouter une tâche, tu l'envoies à un autre fichier qui s'occupe juste de rajouter le truc dans la base de donnée.
Ensuite, dans cron.php, tu fais un truc du genre
Comme ça, tu ne récupères que les tâches qui t'intéressent. Puis tu itères dessus et les effectue.
Pour info, que signifie "a:2:{s:4:"type";s:7:"barraks";s:4:"city";i:13;}". C'est un exemple ou est-ce possible de mettre une commande sql dans la colonne data ?
En fait, ce sont des données PHP transformées en texte via la fonction serialize()
Comme ça, si tu as des champs sur lesquels tu ne souhaites pas faire de requête, qui ne concernent pas toutes les entrées (comme justement des données précises sur la tâche à effectuer), au lieu de créer de nouvelles colonnes dans la base de donnée, tu peux tout simplement stocker dans dans une colonne TEXT, sous forme sérialisée.
Le "a:2", "s:4", "i", ce sont des informations rajoutées par PHP pour être sûr de pouvoir retrouver ses petits… a:2 => tableau à 2 éléments. s:4 => chaîne de caractère de longueur 4, "i" => un entier.
Tu récupères ensuite ça avec un
Sinon sans cron, j'avais pensé à ajouter une table travaux (donc partir du même principe, avec colonne id_station, type, date) mais en effectuant des vérifications au début du code.
Si date < now { SET $type = $type +1}
Mais c'est vrai que ça oblige à faire une table par autre table de référence. https://debian-facile.org/img/smilies/x … chhead.gif
Ah et aussi pour faire un journal ou autre ça complique.
Et surtout, ton code n'est exécuté que lorsque l'on visite la page. Si tu veux par exemple enchaîner deux constructions dans la nuit, et que la première produit une ressource une fois achevée, ben… si tu ne te connectes que le matin, tu as perdu toute la production de bois de la nuit.
Je vais essayer la technique que tu proposes, et je reviendrai poster ici mon avancée (je m'y mettrai sûrement ce week-end)
Ok
captnfab,
Association Debian-Facile, bépo.
TheDoctor: Your wish is my command… But be careful what you wish for.
Hors ligne
Dernière modification par d4v3 (17-01-2019 22:40:42)
Hors ligne
Voilà le code php:
Hors ligne
Dernière modification par d4v3 (20-01-2019 22:02:32)
Hors ligne
Prochaines étapes, continuer d'appliquer cela à toutes les fonctionnalités, faire une page pour afficher des logs et ajouter de l'AJAX pour afficher le temps restant.
Merci à tous de m'avoir répondu
Dernière modification par d4v3 (21-01-2019 12:16:05)
Hors ligne
captnfab,
Association Debian-Facile, bépo.
TheDoctor: Your wish is my command… But be careful what you wish for.
Hors ligne
Juste une petite remarque : si tu as deux requêtes les mêmes à exécuter, alors qd tu en exécutes une, ça marquera l'autre comme exécutée également (parce que ton WHERE ne filtre que sur `data`).
Pour éviter cela, il est bon d'utiliser une colonne ID qui ne contienne que des valeurs uniques (en général, une clé primaire contenant des entiers auto-incrémentés).
Ça donnerait un « SELECT id,data FROM… » et puis « …SET done = 1 WHERE ID = ?'); »
Oui les deux sont marquées, mais comme je veux que certaines choses se passent au même moment je ne trouve pas cela gênant, pour l'instant en tout cas
Bonne continuation, et tiens nous au courant des évolutions de ton jeu !
Encore merci, toutes ces requêtes dans le fichier cron.php, c'est génial !
Ça reste très basique mais si le jeu plaît aux copains, je le mettrais en ligne et posterais dans la rubrique jeu pour tester !
Hors ligne