Partage
  • Partager sur Facebook
  • Partager sur Twitter

Compte à rebours

entre l'heure stocké et décompte prédéfini

    11 avril 2010 à 1:12:28

    Bonjour / Bonsoir à tous.

    Voila je viens vers vous après que l'on me l'ai conseillé...

    je ne suis pas un développeur mais plutôt un passionnée.. donc j'ai appris par moi même en cherchant sur le net comment faire ce que je voulais mais sur ce coup j'ai pas trouvé le chemin à suivre sur google d'autant plus que je ne connais mais absolument rien sur le javascript... fin voila pour ma petite présentation personnelle.

    J'ai fait un script pour rentré des infos sur un jeu (réservation de village) dans ma bdd une fois la réservation faite j'aimerai qu'il y ai un compte à rebours de cinq jours qui s'enclenche et si le membre qui à réservé son village n'est pas venus modifié le statut sur Annulation ou Colonisé le script le fera lui même u bout des cinq jours débloquant le village pour qu'un autre puisse s'il le veut le réservé lui même.

    Alors voici la structure de ma table
    --
    -- Structure de la table `village_reservation`
    --

    CREATE TABLE `village_reservation` (
    `Id` int(11) NOT NULL auto_increment,
    `IdJoueur` varchar(50) NOT NULL,
    `Continent` varchar(3) NOT NULL,
    `Coordonner` varchar(12) NOT NULL,
    `Lien` varchar(100) NOT NULL,
    `Statut` varchar(20) NOT NULL,
    `DateReservation` varchar(35) NOT NULL,
    `RapportEspionnage` varchar(255) default NULL,
    `DateNoblage` varchar(35) NOT NULL,
    `RapportNoblage` varchar(255) default NULL,
    `Tribu` varchar(20) NOT NULL,
    `DateNow` datetime NOT NULL,
    PRIMARY KEY (`Id`)
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=4 ;


    Voici mon script pour rentré les info dans ma bd, l'heure de la réservation est rentré avec la fonction Now() dans ma requête
    <?php
    $IdJoueur = addslashes(htmlspecialchars($_POST['IdJoueur']));
    if($IdJoueur = $_SESSION["Account"])
    {
    if($_POST['IdJoueur'] != '' && $_POST['Coordonner'] != "" && $_POST['Lien'] != "" && $_POST['DateReservation'] != "") // on commence par vérifier que les info obligatoire sont bien rentrée
    {
    //On fait en sorte que les Coordonner soit tjrs du genre (XXX/XXX) meme si le joueur rentre les coordonnee comme ceci XXX-XXX ou XXX,XXX ou XXX\XXX ou XXX/XXX
    $txtCoordonne= $_POST['Coordonner'];
    $txtCoordonne= trim($txtCoordonne, '()[]');
    $separateursPossibles= array("-", ",", "\\", "/");
    $txtCoordonne= str_replace($separateursPossibles, "|", $txtCoordonne);
    $positionSeparateur= strripos($txtCoordonne, "|");
    //Ici on verifie le format
    if ($positionSeparateur === false) {
    echo 'Le format est invalide';
    }
    else {
    $x= intval(substr($txtCoordonne, 0, $positionSeparateur));
    $y= intval(substr($txtCoordonne, $positionSeparateur + 1));
    //on initialise les variables avec des addslashes pour échapper les éventuelles injections SQL pour les valeurs récupérée
    $IdJoueur = addslashes(htmlspecialchars($_SESSION["Account"]));
    $Continent = addslashes(htmlspecialchars($_POST['Continent']));
    $Coordonner = "(".$x."/".$y.")"; // Ici les Coordonner revienne de la modification faite par la récuperation de Deepak
    $Lien = addslashes(htmlspecialchars($_POST['Lien']));
    $Statut = addslashes(htmlspecialchars($_POST['Statut']));
    $DateReservation = addslashes(htmlspecialchars($_POST['DateReservation']));
    $RapportEspionnage = addslashes(htmlspecialchars($_POST['RapportEspionnage']));

    //on initialise la connexion à la BDD, sinon on pourra jamais l'utiliser
    Connect(DB_GT);
    //on vérifie si le village n'est pas déjà dans la bdd
    $req = "SELECT Coordonner, Statut FROM village_reservation WHERE Continent= '" . $Continent . "' AND Coordonner= '" . $Coordonner . "' AND Statut!='Annulation' ";
    $res = mysql_query ($req);
    $nb = mysql_num_rows ($res);
    /* while ($donnees = mysql_fetch_array($req))
    {
    $name = $donnees["IdJoueur"];
    */
    if($nb == 0)
    { //si le village n'est pas ancore réservé
    //à partir d'ici, on traite les données qu'on a recueillies, mais y a pas beaucoup à traiter XD
    $sql = "INSERT INTO village_reservation VALUES('', '$IdJoueur', '$Continent', '$Coordonner', '$Lien', '$Statut', '$DateReservation', '$RapportEspionnage', '', '', 'LAD', NOW())"; //on dit quelle requete on veut faire
    mysql_query($sql); // on l'exécute ^^
    mysql_close(); //on en a fini avec la base de données, on ferme la connexion
    echo '
    <tr>
    <font color="green">
    Le village <font color="#0A1FE5">"{' . $Continent . '} ' . $Coordonner . '"</font> a été ajouté avec succés !!!<br /><br />
    le lien vers le village : <font color="#0A1FE5">' . $Lien . '</font><br />
    Statut de la réservation : <font color="#0A1FE5">' . $Statut . '</font><br />
    Date du début de la réservation : <font color="#0A1FE5">' . $DateReservation . '</font><br />
    Lien vers le rapport d\'espionnage : <font color="#0A1FE5">' . $RapportEspionnage . '</font><br /><br />
    </font>
    </tr><br />
    '; //et on dit qu'on l'a bien fait !
    //traitement des données terminé, on affiche le formulaire maintenant
    } else{
    echo '
    <tr>
    <br /><br /><br /><font color="red"><b><u>ATTENTION</u></b><br /><br /><br />
    <b>le village aux coordonnées : <font color="#0A1FE5">"' . $Coordonner . '"</font> est déjà réserver <!--par "' . $name .'" -->!!!
    <br />
    Vous ne pouvez réserver que des villages qui ne le sont pas encore.</b> <br />
    </font>
    </tr>
    ';
    }
    /*}*/

    }
    }else{
    echo '
    <tr>
    <br /><br /><br /><br /><br /><br />
    <font color="#0A1FE5">
    <b><u>Deux erreur possible :</u> <br /><br /></font>
    <font color="#CC0000"> Erreur : contenu vide! Vous devez mettre les coordonnée du village, le lien vers celui ci et une date !!!<br />
    Erreur : Nom de membre invalide, mauvaise session d\'identification !!!</b>
    </font>
    </tr>
    ';//message d'erreur
    }
    }
    else {
    echo "
    <br /><br /><br /><br /><br /><br />
    <font color='red'>
    Erreur de manipulation veuillez recommencer !!!
    </font>
    ";
    }
    }
    else {
    echo '<br /><br /><br /><br /><p style="color:#FF0000; font-weight:bold;">Vous êtes actuellement déconnecter.<br /><br />
    Voulez-vous vous <a href="connection.php?action=logout" title="Connexion">connecter</a> ?</p>';
    }
    ?>


    et c'est ici que je devrais mettre mon compte à rebours qui je suppose une fois fini lance un script de mise à jours de ma bdd, mais le joueur peu avoir plusieurs village de réserver donc plusieurs compte à rebours différents avec des temps restant différents... et je sais absolument pas comment réalisé ça alors que c'est tout ce que j'aimerai encore faire sur mon script pour qu'il soit fini...

    <?php
    	// Lancement d'une session
    	session_start();
    
    	include('header.php'); 
    
    	if ($_SESSION["Account"] != "")
    	{
    		require_once(dirname(__FILE__) ."./includes/fonctions.php");
    		
    		// Spacer maison (créé des saut de ligne sans taper 10 000 <br />
    		for ($i = 0; $i < 3; $i++) 
    		{
    			echo "			<br />";
    		}
    ?>
    			<table align="center" border="1" cellpadding="7" cellspacing="0" width='70%'>
    				<!-- Affichage des villages réservé -->
    				<thead>
    					<tr>
    						<th colspan="12"><center>
    							<object width="183" height="60"> 
    								<param name="movie" value="titre_village_reservation.swf"> 
    								<param name="wmode" value="high"> 
    								<embed src="swf/titre_village_reservation.swf" width="516" height="61" wmode="transparent"></embed> 
    							</object></center>
    						</th>
    					</tr>
    					<tr>
    						<th valign="top" align="center"><font color="Red"><center><b>Coordonné du village</b></center></font></th>
    						<th valign="top" align="center"><font color="Red"><center><b>Lien vers le village</b></center></font></th>
    						<th valign="top" align="center"><font color="Red"><center><b>Statut du village</b></center></font></th>
    						<th valign="top" align="center"><font color="Red"><center><b>Date de la réservation</b></center></font></th>
    						<th valign="top" align="center"><font color="Red"><center><b>Rapport d'espionnage</b></center></font></th>
    						<th valign="top" align="center"><font color="Red"><center><b>Date du noblage</b></center></font></th>
    						<th valign="top" align="center"><font color="Red"><center><b>Rapport de noblage</b></center></font></th>
    					</tr>
    				</thead>
    				<!-- Fin du tableau avec les zones d'entete -->
    				
    				<?php	
    					connect(DB_GT);				
    					
    					// Requete pour rechercher les infos dans la table village_reservation
    					$req1 = mysql_query("SELECT Id, IdJoueur, Continent, Coordonner, Lien, Statut, DateReservation, RapportEspionnage, DateNoblage, RapportNoblage, Tribu  FROM village_reservation WHERE IdJoueur='" . $_SESSION['Account'] . "' AND Tribu='LAD' ORDER BY Statut");
    					$res1 = mysql_num_rows($req1);
    		
    					$i=0;
    					while ($i != $res1) {
    						$Id = mysql_result($req1,$i,"Id");
    						$Continent = mysql_result($req1,$i,"Continent");
    						$Coordonner = mysql_result($req1,$i,"Coordonner");
    						$Lien = mysql_result($req1,$i,"Lien");
    						$Statut = mysql_result($req1,$i,"Statut");
    						$DateReservation = mysql_result($req1,$i,"DateReservation");
    						$RapportEspionnage = mysql_result($req1,$i,"RapportEspionnage");
    						$DateNoblage = mysql_result($req1,$i,"DateNoblage");
    						$RapportNoblage = mysql_result($req1,$i,"RapportNoblage");
    					$i++;
    					
    						echo '
    							<tr>
    								<td class="texte1" bordercolordark="white" bordercolorlight="black" valign="top" align="center" border=1><font color="#404AA4">{'. $Continent .'}' . $Coordonner . '</font></td>
    								<td class="texte1" bordercolordark="white" bordercolorlight="black" valign="top" align="center" border=1><font color="#404AA4"><a href=' . $Lien . ' target="_blank">' . $Coordonner . '</a></font></td>
    								
    								<td class="texte1" bordercolordark="white" bordercolorlight="black" valign="top" align="center" border=1><font color="#404AA4">' . $Statut . '</font></td>
    								<td class="texte1" bordercolordark="white" bordercolorlight="black" valign="top" align="left" border=1><font color="#404AA4">' . $DateReservation . '</font></td>
    								
    								<td class="texte1" bordercolordark="white" bordercolorlight="black" valign="top" align="left" border=1><font color="#404AA4"><a href=' . $RapportEspionnage . ' target="_blank">Rapport d\'espionnage</a></font></td>
    								<td class="texte1" bordercolordark="white" bordercolorlight="black" valign="top" align="left" border=1><font color="#404AA4">' . $DateNoblage . '</font></td>
    								<td class="texte1" bordercolordark="white" bordercolorlight="black" valign="top" align="left" border=1><font color="#404AA4"><a href=' . $RapportNoblage . ' target="_blank">Rapport de noblage</a></font></td>
    							<tr>
    						';
    					}		
    					
    					mysql_close();
    				?>
    			</table>
    			<!-- Fin de l'affichage des villages réservés -->		
    		<br />
    <?php		
    	}
    	else
    	{
    		echo '<br /><br /><br /><br /><p style="color:#FF0000; font-weight:bold;">Vous êtes actuellement déconnecter.<br /><br />
    				Voulez-vous vous <a href="connection.php?action=logout" title="Déconnexion">connecter</a> ?</p>';				
    	}
    ?>
    		</center>
    <?php 
    	include('footer.php'); 
    	include('copyright.php');
    ?>
    




    Fin voila si quelqu'un pouvait 'aider pour réalisez ce compte à rebours avec des explication étape par étape si ce n'est pas trop demander pour que je puisse comprendre et apprendre en même temps pour que la prochaine fois que je doive le refaire je puisse le faire seul.

    Merci d'avance.
    • Partager sur Facebook
    • Partager sur Twitter
      11 avril 2010 à 2:15:50

      Bah... sans offense, c'est trop demander... :-°

      Surtout si tu ne connais rien au JS... et que tu n'as même pas de base de script sur laquelle travailler.

      Si vraiment un bout de piste peut t'aider, il faut que tu utilises l'objet Date().
      Tu l'initialises par rapport au temps restant (donné par ton serveur).
      Tu fais une récursion toutes les secondes avec un setTimeout ou setInterval.

      Quand le temps restant est écoulé, tu rediriges vers une page qui se chargera de libérer la réservation.
      • Partager sur Facebook
      • Partager sur Twitter
        11 avril 2010 à 2:22:22

        Bonsoir.
        Le compte à rebours, en javascript, pourquoi pas.
        Ceci dit, on part sur un compte à rebours de 5 jours là. Donc il faudrait supposer que tes utilisateurs gardent leur navigateur ouvert, sans changer de page, pensant 5 jours. Tendu non?
        J'ai fait ce genre de script une fois, pour un compte à rebours de 20h. Voilà comment je m'y suis pris :
        J'ai sur mon serveur un fichier texte qui contient le timestamp de la dernière sauvegarde. Je l'ai mis sur un fichier texte, mais dans ton cas, tu le fais dans la BDD (ce qui est normal vu le nombre de demandes à gérer).

        Etape 1 : en début de toutes tes pages PHP, tu ajoutes une vérification de ta table de tes timestamps, et tu regardes si un d'eux est vieux de plus de 5 jours. Si c'est le cas, tu passes à l'étape 2. Sinon, fin du script.
        Etape 2 : ton "compte à rebours" se déclenche. Tu libères les maisons alouées à tes utilisateurs, ou peu importe, mais tu fais ce que tu voulais faire.

        Pour optimiser le tout, je t'invite à :
        - créer un chtit fichier texte contenant le timestamp le plus ancien des timestamps à vérifier.
        - comparer ce timestamp à time()-5jours
        - passer ton chemin si rien n'est à faire
        - faire toutes les sauvegardes nécessaires sinon
        - une fois les sauvegardes fait, mettre à jour ton fichier texte avec le nouveau timestamp le plus ancien.

        Résultat de tout ceci :
        Quand un utilisateur ouvre une page sur ton site, une mise à jour se fait en premier lieu. Donc la page qui lui est affichée est à jour.
        Ton script n'est déclenché que par les visites des utilisateurs. Donc si personne ne passe, rien ne se fait.
        Seule solution pour contrer ceci : faire toi même tourner une page qui s'actualise régulièrement et qui fasse tourner ce script, mais je ne vois pas l'utilité de mettre à jour quand personne ne visite.
        Donc au final, pas de javascript, que du php.

        Ca te semble clair?
        • Partager sur Facebook
        • Partager sur Twitter
          11 avril 2010 à 2:29:07

          @ golmote

          euh si j'ai une base.. ta pas vus que j'ai mit le code visible de la ou j'ai besoin de mettre le code javascript du compte à rebours...
          maintenant je peux même mettre les liens vers mes deux script pour montrer à quoi ça ressemble mais bon pour quelqu'un qui sait faire du javascript faut pas me dire que c'est beaucoup de boulot, j'ai chercher sur google pendant quelques jours avant de venir ici et j'ai vus pas mal de compte à rebours et le code n'était pas très long... mais aucun n'avait de connexion avec une bdd pour aller chercher l'heure donc je ne savais pas le modifier pour moi vus que je ne connais pas le javascript...

          Maintenant je ne demande pas qu'on me dise quoi faire on la déjà fait mais je le répète encore une fois pour être sur que vous le compreniez... je ne connais pas le javascript alors rien ne sert de m'aiguiller je ne saurai le faire... la je demande bien une aide complète avec explication.

          Sure je ne m'attend pas à ce que l'on me donne la solution j'ai déjà fait quelques endroit ou à chaque fois on ce fait remballer comme des mal propre, j'espère simplement un jour tombé sur une personne sympa qui m'aidera sans plus :)

          @ Guizmus vus que ta répondu pendant que j'écrivais ma réponse.

          un ami ma dit de simplement faire une comparaison entre l'heure mise dans la bdd et l'heure actuel et si le temps est > que 5jours alors il modifie le statut

          ah pour info même si je ne m'y connais pas.. il n'est pas nécessaire de garder une fenêtre ouverte, je joue à des jeu par navigateur d'où mon script justement et la aussi il y a des comptes à rebours sur nos construction et je suppose que dés notre connexion il y a une verif qui ce fait et modifie les infos avant de les afficher avec la mise à jours et c'est ce que je recherche à faire justement.
          Et si j'ai besoin du javascript car le php n'est pas dynamique et avoir un compte à rebours qui décompte pas je vois pas l'utilité.
          • Partager sur Facebook
          • Partager sur Twitter
            11 avril 2010 à 2:43:16

            Citation : Guizmus

            Le compte à rebours, en javascript, pourquoi pas.
            Ceci dit, on part sur un compte à rebours de 5 jours là. Donc il faudrait supposer que tes utilisateurs gardent leur navigateur ouvert, sans changer de page, pensant 5 jours. Tendu non?



            Bé non ! En BDD, tu stockes le timestamp du début du compte à rebours.

            Au chargement de la page, tu compares ce timestamp à celui d'un new Date(), et tu en déduis le temps restant.
            Tu lances le compte à rebours à partir de ce résultat... histoire d'animer le décompte quoi :p

            @Satcoy :

            Non, en effet, faire un compte à rebours en soi c'est pas compliqué. Mais l'intégrer comme tu vas le vouloir, avec les détails qui se rapportent à ton cas précis, c'est relou.
            Et personnellement, je n'ai pas l'intention de te le faire. Après, libre à quelqu'un d'autre de se lancer. (Quelques bonnes âmes passeront peut-être ?)

            "remballer comme des mal propres", c'est peut-être un peu exagéré... mais le problème est simple :
            "vous" (ceux qui demandent des scripts tout faits car ils ne connaissent pas le JS) ne faîtes pas la différence entre un forum d'aide et un forum de recrutement. Et c'est nous prendre pour des larbins :-° Et sans rémunération, qui plus est :o

            Le recrutement c'est là-bas.
            http://www.siteduzero.com/forum-81-200 [...] -projets.html
            • Partager sur Facebook
            • Partager sur Twitter
              11 avril 2010 à 2:50:43

              @Golmote

              non non je te jure sur certaine board on m'insultait quasi au premier message poster d'où mon léger dégout de certaine population d'entre aide en informatique mais bon des c** y en a malheureusement partout lol

              Peux tu m'expliquer pourquoi dans mon cas précis tu trouves ça relou? comme je l'ai dit moi je ne sais pas le faire mais j'aimerai comprendre comment le faire mais sans connaitre le langage c'est un peu dure sans exemple concret de ma situation.
              De ce que moi je m'imagine dans ma demande c'est au début de mon script d'affichage faire le code qui va vérifié si le statut du village n'est pas marqué Annulation ou Colonisé et comparer ma date de ma bdd avec la date actuel et si entre les deux il n'y a pas cinq jours de passé affiché le décompte du reste du temps dynamiquement et à la fin du temps lancer un script d'upadte de ma bdd je suppose ui lui sera fait normalement en php donc ça je sais faire sans souci

              la ou moi je bloque c'est pour faire la comparaison des dates (j'ai tjrs eu du mal avec les dates en php... :S) et affiché le chrno en javascript...
              • Partager sur Facebook
              • Partager sur Twitter
                11 avril 2010 à 3:38:17

                Bah déjà, pour moi c'est trop. Je fais pas ça gratos :p (C'est même pas fun comme script. :euh: )

                Bref. En espérant pour toi que quelqu'un se dévoue.
                • Partager sur Facebook
                • Partager sur Twitter

                Compte à rebours

                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                • Editeur
                • Markdown