Faut utiliser un cron pour ça.
Si personne n'est là pour exécuter les scripts alors rien ne va se passer.
Tu peux toujours t'inspirer de ce tuto pour comprendre le mécansime: http://www.jeuweb.org/board/showthread.php?tid=530
Si le joueur doit rafraîchir la page, c'est simplement parce que tu exécutes ta construction à la fin de ton script, après ton affiche. Commence par tes traitements sur les données et fait l'affichage seulement après.
Sinon quelques conseils à la volée pour ta bdd. A priori tu n'utilises qu'une seule table avec des SELECT *, c'est pas, mais alors vraiment pas la meilleure solution.
Divise tes tables ça te simplifierais beaucoup de choses. Tu pourrais très bien avoir les tables suivantes
- membres (id_membre, pseudo,mail, pwd,...)
- batiments(id_membre, id_batiment, niveau...) (dans ce cas un batiment pas enregistrement, mais tu pourrais avoir l'intégralité des bâtiments du joueur dans la liste)
- batiments_encours(id_membre, id_batiment, temps_fin,...)
- liste_batiments(id_batiment, nom_batient, description,...)
Avec cette répartition, tu peux très facilement voir pour un joueur donné quels sont ses bâtiments en cours de construction, et quand la construction est achevée, il suffit de supprimer l'enregistrement de la table batiment_encours.
Ce n'est là qu'un exemple, des solutions il y en a énormément, mais tout mettre dans une seule table est à proscrire.
Va voir ce tuto: http://www.jeuweb.org/board/showthread.php?tid=2157 et il y en a encore d'autres qui traînent
Ensuite, au niveau des connexion/déconnexion à la bdd. Au lieu de faire une connexion avant chaque requête et de la refermer juste après, préfère faire une connexion au début de tes traitement et une déconnexion en sortie de tes traitements. Dans ton cas, tu ne devrais avoir qu'une seule connexion et une seule déconnexion. En continuant sur ce chemin, passe par des include ou des appels de fonctions pour les gérer. Là si tu utilise un autre utilisateur que "root" ce qui est souhaitable et même obligatoire quand ça sera en ligne) tu devras le changer dans tous tes scripts, en passant par des fonctions ou des include, tu n'auras plus qu'un fichier à modifier.
@Kassak: Imaginons que tu te retrouves avec 2.000 joueurs sur ton site, tu vas vraiment faire la mise à jour pour l'intégralité de tes joueurs. Si tes traitements sont simples ça va passer, mais si tu dois faire une boucle pour rentrer dans les détails de chaque joueur, tu risque d'avoir des petits soucis. Personnellement, j'ai opté pour une solution où chaque joueur met à jour son propre compte, et j'ai un cron qui fait une mise à jour générale toutes les heures
Si personne n'est là pour exécuter les scripts alors rien ne va se passer.
Tu peux toujours t'inspirer de ce tuto pour comprendre le mécansime: http://www.jeuweb.org/board/showthread.php?tid=530
Si le joueur doit rafraîchir la page, c'est simplement parce que tu exécutes ta construction à la fin de ton script, après ton affiche. Commence par tes traitements sur les données et fait l'affichage seulement après.
Sinon quelques conseils à la volée pour ta bdd. A priori tu n'utilises qu'une seule table avec des SELECT *, c'est pas, mais alors vraiment pas la meilleure solution.
Divise tes tables ça te simplifierais beaucoup de choses. Tu pourrais très bien avoir les tables suivantes
- membres (id_membre, pseudo,mail, pwd,...)
- batiments(id_membre, id_batiment, niveau...) (dans ce cas un batiment pas enregistrement, mais tu pourrais avoir l'intégralité des bâtiments du joueur dans la liste)
- batiments_encours(id_membre, id_batiment, temps_fin,...)
- liste_batiments(id_batiment, nom_batient, description,...)
Avec cette répartition, tu peux très facilement voir pour un joueur donné quels sont ses bâtiments en cours de construction, et quand la construction est achevée, il suffit de supprimer l'enregistrement de la table batiment_encours.
Ce n'est là qu'un exemple, des solutions il y en a énormément, mais tout mettre dans une seule table est à proscrire.
Va voir ce tuto: http://www.jeuweb.org/board/showthread.php?tid=2157 et il y en a encore d'autres qui traînent
Ensuite, au niveau des connexion/déconnexion à la bdd. Au lieu de faire une connexion avant chaque requête et de la refermer juste après, préfère faire une connexion au début de tes traitement et une déconnexion en sortie de tes traitements. Dans ton cas, tu ne devrais avoir qu'une seule connexion et une seule déconnexion. En continuant sur ce chemin, passe par des include ou des appels de fonctions pour les gérer. Là si tu utilise un autre utilisateur que "root" ce qui est souhaitable et même obligatoire quand ça sera en ligne) tu devras le changer dans tous tes scripts, en passant par des fonctions ou des include, tu n'auras plus qu'un fichier à modifier.
@Kassak: Imaginons que tu te retrouves avec 2.000 joueurs sur ton site, tu vas vraiment faire la mise à jour pour l'intégralité de tes joueurs. Si tes traitements sont simples ça va passer, mais si tu dois faire une boucle pour rentrer dans les détails de chaque joueur, tu risque d'avoir des petits soucis. Personnellement, j'ai opté pour une solution où chaque joueur met à jour son propre compte, et j'ai un cron qui fait une mise à jour générale toutes les heures