PHP: demande de base de données a également retardé sans la page en direct
Question
Ainsi, par exemple, je clique sur un bouton qui va envoyer quelque chose à la base de données après 1 minutes, mais je veux l'envoyer aussi if I leave the page
:)
Donc, si je quitte la page lorsque 30 secondes des 1 minutes, le compte à rebours se poursuivra jusqu'à atteint 60 secondes, puis envoie les données à la base de données.
L'espoir il est clair. Je pense que je devrais utiliser pour ce SESSION
de mais s'il vous plaît laissez-moi savoir si vous connaissez la réponse, ou quoi que ce soit utile:)
exemple: sur http://www.travian.com/ , quand quand vous commencez à construire quelque chose , vous obtenez un compte à rebours « sera terminé dans xx: xx: xx »; mais vous n'avez pas besoin de garder le navigateur ouvert -. le compte à rebours tourne toujours sur le serveur, même si vous vous déconnectez
Ou disons, un exemple de la vie réelle:
Imaginez un système de blogs comme WordPress, où j'écrire des messages 10
par jour, mais je veux montrer aux utilisateurs que 5/day
.
Ou je veux montrer aux utilisateurs à 8:00 A.M.
Ou une autre prise de Travian:
Imaginez un game
où vous pouvez créer des troupes, mais pour créer des troupes dont vous avez besoin d'attendre parce que la vie est difficile. D, donc for a troop
vous devez attendre 1 minutes
La solution
Ceci est impossible. L'utilisateur peut quitter la page parce que leur connexion Internet a échoué ou parce qu'il ya une panne de courant , à quel moment, il n'y a aucun moyen de les envoyer les informations à la base de données.
Qu'est-ce que vous pouvez faire est de stocker les données dans la base de données immédiatement, avec un « ne pas ouvrir avant » horodatage pour simuler un délai d'une minute, et ajouter la contrainte supplémentaire à toutes les demandes contre cette table:
WHERE createDate < NOW()
Autres conseils
Peut-être que vous voulez utiliser une commande javascript pour lancer le retard, car avec Javascript vous pouvez envoyer des données à PHP via AJAX, et si vous encapsulez cette AJAX dans une fonction, puis appelez cela de votre fonction « retard ».
Pour la page que vous pouvez utiliser en laissant aussi:
window.onbeforeunload=delayFunction;
Hope this helps.
il n'y a aucune garantie pour cette action. Je peux laisser avec fermeture trop navigateur. Construire une solution axée sur base de données est le meilleur.