[php/mysql] compte a rebour

Fermé
neo2099 Messages postés 164 Date d'inscription vendredi 13 avril 2007 Statut Membre Dernière intervention 9 avril 2020 - 14 sept. 2007 à 22:15
 Spounky - 11 janv. 2009 à 19:05
Bonjour ou bonsoir

Voila avec quelque amis on a décider que créer un jeu style Ogame (c'est plus un defis que autre chose vu qu'on est dans une filiere informatique), le jeu un pratiquement finit mais 1 probleme se pose c'est avec le compte a rebours biensur j'en ai trouver des tonnes et des tonnes sur le net, mais pas celui que je voulais exactement. En faite, j'essaie de faire un compte a rebours en passant par php, puis stocker le compte a rebours dans mysql puis l'afficher dynamiquement avec javascript.
Sa fait quelque jour que j'essaie mais la je pète un cable(desoler d'etre grossier) au bout d'un moment j'ai reussi mais a l'envers par ex il est 9h30 pour arriver a 10h donc il reste 30mn00sec ben moi sa fait 30mn01sec 30mn02sec etc... puis c'est tous ce que j'ai reussi a faire et j'ai toujours pas reussi a stocker le temps dans la BDD,
alors si vous pouviez m'aider je vous en serai reconnaissant

Un grand merci d'avance
A voir également:

25 réponses

pour creer un compte à rebourds infini en php:
creer une base (ici ma base) avec un champ heuredeplace, et heurerefer mettre les timestamp correspondant(heurerefer etant plus petit). inserer ce script dans toutes les pages.


$chrono="ma base";
$duree=60*60; // durée du compte à rebours (mn X 60 sec)
$query = 'SELECT * FROM '.$chrono;
$result = mysql_query($query);
while ($val = mysql_fetch_array($result)) {
// Variables
$heure_serveur = time(); // heure actuelle
$heuredeplace=$val['heuredeplace']; // ton heure de deplacement (style time dans ta bdd)
$heure_refer=$val['heurerefer']; // ton heure de reference (style time dans ta bdd)
}
// Calcul nouveaux cours
if (time()>=($heuredeplace)){
// Calcul du prochain cours ou redirection pour action, dans ce cas mettre ce qui est entre parentheses dans ta page d'action.
$ope=abs(time()-$heure_refer);
$entier=floor($ope/$duree);
$heure_refer=$heure_refer+($entier*$duree);
$heuredeplace = $heure_refer + $duree;
// Mise à jour du compte à rebourds
$sql = 'UPDATE "'.$chrono.'" SET heureserveur= "'.$heure_serveur.'", heuredeplace = "'.$heuredeplace.'" where id="1" LIMIT 1';
$req = mysql_query($sql) or die ('Erreur SQL !'.$sql.''.mysql_error());
}
// Horloge
$timestampb = abs($heuredeplace - time());
$diff_heure = floor($timestampb / 3600); //Calcul des heures
$timestampb = $timestampb - ($diff_heure * 3600);
$diff_min = $timestampb / 60; //Calcul des minutes
$diff_min = floor(abs($diff_min));
$secb=($heuredeplace - time())/60;// Calcul des secondes
$diff_sec = floor(abs($secb));
$sec3=(($heuredeplace - time())-($diff_sec*60)); // pour afficher l'horloge echo $diff_heure."h".$diff_min."mn".$sec3."sec";
1
pitxu Messages postés 689 Date d'inscription vendredi 7 septembre 2007 Statut Membre Dernière intervention 25 mars 2015 94
15 sept. 2007 à 07:41
Bonjour,

et si tu postais ton code pour qu'on ait une idée précise de ce que tu souhaites faire ?
0
PhP Messages postés 1767 Date d'inscription lundi 11 décembre 2000 Statut Membre Dernière intervention 23 décembre 2009 606
15 sept. 2007 à 10:55
Bjr

J'avais déjà un fait compte à rebour en PHP/Javascript mais sans utiliser MySQL. De tte manière dans MySQL tu ne dois enregister que l'heure de début, l'heure de fin et/ou la duréé.

Voici un ex :

http://www.nobodysperfect.freesurf.fr/countdown/countdown.php

Voilà
0
pitxu Messages postés 689 Date d'inscription vendredi 7 septembre 2007 Statut Membre Dernière intervention 25 mars 2015 94
15 sept. 2007 à 11:24
En gros tu veux savoir comment faire une requete sql en php ...

<?
$connect=mysql_connect('host','login','pass') or die ("Erreur de connexion au serveur SQL");
mysql_select_db('dbname',$connect) or die ("Erreur de connexion à la base de données");
$sql = "SELECT * FROM table"; // Pour une lecture de données
$sql = "INSERT INTO table VALUES()"; // Pour un enregistrement de données
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
$data = mysql_fetch_assoc($req); // Inutile pour enregistrement
?>
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
neo2099 Messages postés 164 Date d'inscription vendredi 13 avril 2007 Statut Membre Dernière intervention 9 avril 2020 12
15 sept. 2007 à 18:53
Bonjour et merci pour vos réponse.

Merci surtout a php, mais j'avais déjà trouver ton code et je les modifier pour le stocker dans ma BDD et les problemes que j'ai eu c'est que quand j'arrête ton cpt j'avais fait une condition pour dire quand on clique sur stop rien n'est ajouter et quand il se finit passer au niveau supérieur mais le probleme c'est que dans les deux cas il me passe quand meme le niveau.

avec ton form_stop.php



<img id="seq_0" src="c0.gif"><img id="seq_1" src="c0.gif"><img src="colon.gif"><img id="seq_2" src="c0.gif"><img id="seq_3" src="c0.gif"><img src="colon.gif"><img id="seq_4" src="c0.gif"><img id="seq_5" src="c0.gif">


<form id="exec" name="exec" action="index.php" method="get">
<input type="hidden" name="last" id="last" value="stop">
<input type="submit" value="Stop">
</form>
<?
if($last == "stop")
{
mysql_connect('localhost','root','');
mysql_select_db('test');
$data = mysql_query('SELECT usine, tpsusine FROM batiment');
while($donnees = mysql_fetch_array($data))
{
$usine1 = $donnees['usine'];
$tpsusine1 = $donnees['tpsusine'];
$usine = $usine1;
$tpsusine = $tpsusine1;


mysql_connect('localhost','root','');
mysql_select_db('test');
mysql_query("INSERT INTO batiment VALUES ('$usine','$tpsusine','','')");
mysql_close();

}
}
else
{
mysql_connect('localhost','root','');
mysql_select_db('test');
$data = mysql_query('SELECT usine, tpsusine FROM batiment');
while($donnees = mysql_fetch_array($data))
{
$usine1 = $donnees['usine'];
$tpsusine1 = $donnees['tpsusine'];
$usine = $usine1 + 1;
$tpsusine = $tpsusine1 * 2;


mysql_connect('localhost','root','');
mysql_select_db('test');
mysql_query("INSERT INTO batiment VALUES ('$usine','$tpsusine','','')");
$essai = mysql_query('SELECT DATEDIFF (tpsusine, NOW()) FROM batiment');
echo $essai;
mysql_close();

}
}
?>

bon je sais il y a des lignes qui serve a rien, c'est normal je fonctionne comme sa puis une fois finit je simplifie.

Si vous pouviez un peu m'aider sa m'arrangerait

Re-merci d'avance
0
pitxu Messages postés 689 Date d'inscription vendredi 7 septembre 2007 Statut Membre Dernière intervention 25 mars 2015 94
16 sept. 2007 à 08:58
Fais un echo $last; à la fin de ton code pour vérifier la valeur de $last
0
neo2099 Messages postés 164 Date d'inscription vendredi 13 avril 2007 Statut Membre Dernière intervention 9 avril 2020 12
16 sept. 2007 à 15:32
ben j'ai remarquer que quand je ne clique pas $last = go quand je clique $last = stop mais le probleme que j'ai vu aussi c'est que une fois le cpt finit $last = stop quand meme donc sa marche pas j'ai modifier mon fichier a partir

du form_go.php (donc la suite)

<?
mysql_connect('localhost','root','');
mysql_select_db('test');
$data = mysql_query('SELECT * FROM batiment Order by usine desc LIMIT 1');
while($donnees = mysql_fetch_array($data))
{

?>
<center>
Niveau <? echo $donnees['usine']; ?>
<?
$tpsusine = $donnees['tpsusine'];
$usine = $donnees['usine'];

?>
<form id="exec" name="exec" action="index.php" method="get">
Durée <? echo $tpsusine * $usine; ?> <input id="duree" name="duree" type="hidden" value="<? echo $tpsusine * $usine ; ?>" size="8" length="8">sec.
<input type="hidden" name="last" id="last" value="go">
<input type="submit" value="Démarrer">
</form>
<?
}
mysql_close();
?>
comme ceci le nouveau
form_stop.php

<img id="seq_0" src="c0.gif"><img id="seq_1" src="c0.gif"><img src="colon.gif"><img id="seq_2" src="c0.gif"><img id="seq_3" src="c0.gif"><img src="colon.gif"><img id="seq_4" src="c0.gif"><img id="seq_5" src="c0.gif">


<form id="exec" name="exec" action="index.php" method="get">
<input type="hidden" name="last" id="last" value="stop">
<input type="submit" value="Stop">
</form>
<?
echo $_GET['duree'];
if(($_GET['last'] == 'stop') && $_GET['duree'] == 0)

{
mysql_connect('localhost','root','');
mysql_select_db('test');
$data = mysql_query('SELECT usine, tpsusine FROM batiment');
while($donnees = mysql_fetch_array($data))
{
$usine1 = $donnees['usine'];
$tpsusine1 = $donnees['tpsusine'];
$usine = $usine1 + 1;
$tpsusine = $tpsusine1 * 2;


mysql_connect('localhost','root','');
mysql_select_db('test');
mysql_query("INSERT INTO batiment VALUES ('$usine','$tpsusine','','')");
$essai = mysql_query('SELECT DATEDIFF (tpsusine, NOW()) FROM batiment');
echo $essai;
mysql_close();

}
}
else
{
mysql_connect('localhost','root','');
mysql_select_db('test');
$data = mysql_query('SELECT usine, tpsusine FROM batiment');
while($donnees = mysql_fetch_array($data))
{
$usine1 = $donnees['usine'];
$tpsusine1 = $donnees['tpsusine'];
$usine = $usine1;
$tpsusine = $tpsusine1;


mysql_connect('localhost','root','');
mysql_select_db('test');
mysql_query("INSERT INTO batiment VALUES ('$usine','$tpsusine','','')");
mysql_close();

}

}
?>

et pendant que j'i suis je vais mettre aussi le fichier principal

countdown.php

<?php
//session_start();
$now=getdate();

$restant=0;
$last = "stop";
$_duree = isset($_GET["duree"]) ? intval($_GET["duree"]) : 0;

if (isset($_GET["last"])) {$last = $_GET["last"];}



if (!isset($_GET["last"]))
{
if (isset($_SESSION['start_time'])) { $_SESSION['start_time']=0;}
}

if ($last == "stop")
{

if (isset($_SESSION['start_time'])) { $_SESSION['start_time']=0;}
}
else
{
if (isset($_SESSION['start_time']) && $_SESSION['start_time'])
{

$restant= $_duree-(intval($now['hours'])*3600+intval($now['minutes'])*60+intval($now['seconds']))+$_SESSION['start_time'];
}
else
{
$_SESSION['start_time']=intval($now['hours'])*3600+intval($now['minutes'])*60+intval($now['seconds']);
$restant=$_duree;
}
}
?>

<html>
<head>
<title>Game</title>
<style>

body
{
font-size:10pt;
font-family:Arial;
}

div img
{
padding:0px;
margin:0px;
display:inline;
border-width:0px;
}

</style>
<script type="text/javascript">
<!--

function toHMS(duree)
{
var temps = new Array();

var hh = Math.floor(duree/3600);
var mm = Math.floor((duree-hh*3600)/60);
var ss = duree-hh*3600-mm*60;


temps[0]=Math.floor(hh/10);
temps[1]=hh-temps[0]*10;
temps[2]=Math.floor(mm/10);
temps[3]=mm-temps[2]*10;
temps[4]=Math.floor(ss/10);
temps[5]=ss-temps[4]*10;

return temps;
}


var restant=<?php echo $restant; ?>;

function decompte()
{
var seq = toHMS(restant);
for (var i=0; i < 6; i++)
{
document.getElementById("seq_"+i).src="c"+seq[i]+".gif";
}

if (restant)
{
restant--;
window.setTimeout("decompte()",1000);
}
else
{
alert("Game over !");
document.getElementById("exec").submit();
}
}



function go()
{
restant=parseInt(document.getElementById("duree").value);
decompte();
}


// -->
</script>
</head>
<body <?php if ($restant) echo "onload=\"decompte()\"";?>>


<div>
<center>

<!--<img id="seq_0" src="c0.gif"><img id="seq_1" src="c0.gif"><img src="colon.gif"><img id="seq_2" src="c0.gif"><img id="seq_3" src="c0.gif"><img src="colon.gif"><img id="seq_4" src="c0.gif"><img id="seq_5" src="c0.gif"> !-->
</center>
</div>

</br>
</br>
</br>
</br>

<?php
if ($last == "stop")
{


include("usine/form_gousine.php");

}
else
{

include("usine/form_stopusine.php");


}
?>
</html>

donc sa fait du code a lire biensur mais je galere surtout, avec toujour le meme probleme je n'arrive pas a faire que le cpt a rebour est interrompu le niveau ne doit pas monter et quand le cpt finit il monte de 1 niveau puis biensur quand on quitte la page que le cpt ne s'arrete et ne revienne a zero avec 1 niveau en plus lol si quelqu'un pouvait essayer a ce qu'il ne s'arrete pas sa serait un plus pour moi(j'ai pas essayer)

re re-merci d'avance et merci aux personne qui reponde
0
PhP Messages postés 1767 Date d'inscription lundi 11 décembre 2000 Statut Membre Dernière intervention 23 décembre 2009 606
16 sept. 2007 à 17:08
Re

Honnêtement je comprends rien à ce que tu essais de faire ni ce que tu veux enregistrer dans ta base MySQL ni le rapport avec un compte à rebours ... Je sais ça fait beaucoup ! Lol


T'as combien de pages php ? Comment s'appellent-elles, que font-elles, qu'affichent-elles ?
Au final qu'est censé voir l'utilisateur ?

Sinon niveau code y'a des trucs qui ne vont pas :

Ex : dans le code ci-dessous tu ouvres 2 fois la connexion à la même base de données : c'est inutile !
De plus tu fermes le connexion dans la boucle while : non !
Les variables intermédiaires $usine1et $tpsusine1 ne servent à priori à rien ...
Enfin le code ne fait que de dupliquer des enregistrements dans la base de données : est-ce normal ?

mysql_connect('localhost','root',''); 
mysql_select_db('test'); 
$data = mysql_query('SELECT usine, tpsusine FROM batiment'); 
while($donnees = mysql_fetch_array($data)) 
{ 
$usine1 = $donnees['usine']; 
$tpsusine1 = $donnees['tpsusine']; 
$usine = $usine1; 
$tpsusine = $tpsusine1; 


mysql_connect('localhost','root',''); 
mysql_select_db('test'); 
mysql_query("INSERT INTO batiment VALUES ('$usine','$tpsusine','','')"); 
mysql_close(); 

} 



ce qui devrait être :

$link=mysql_connect('localhost','root',''); 
mysql_select_db('test',$link); 
$data = mysql_query('SELECT usine, tpsusine FROM batiment',$link); 
while($donnees = mysql_fetch_array($data)) 
{ 
$usine = $donnees['usine']; 
$tpsusine = $donnees['tpsusine']; 
mysql_query("INSERT INTO batiment VALUES ('$usine','$tpsusine','','')",$link); 
} 

mysql_close(); 



0
neo2099 Messages postés 164 Date d'inscription vendredi 13 avril 2007 Statut Membre Dernière intervention 9 avril 2020 12
16 sept. 2007 à 17:53
oui je c'est que j'ouvre deux fois la connexion c'est parce que j'essai plusieurs truc en meme temps et c'est vrai que sa ren confus tout mon code en gros j'ai ma page index.php qui affiche 1 tableau diviser en 3 avec l'image de la construction, un descriptif puis le cpt quand tu lance ton cpt une fois arriver a la fin tu monte de niveau pour ta contruction la variable $usine et le niveau $tpsusine est le temps de la construction.
Puis quand le cpt est finit, je veux que dans la BDD le niveau de l'usine monte de 1 et que le temps se multiplie par 2, et que quand j'arrete le cpt avant la fin du cpt rien n'est augmenter et aussi que quand je ferme le navigateur le cpt continue a fonctionner et ne s'arrete pas quand je retourne sur ma page.

Voila j'espere que cette fois j'ai été assez clair.

Merci quand meme et merci pour les prochaine reponse
0
PhP Messages postés 1767 Date d'inscription lundi 11 décembre 2000 Statut Membre Dernière intervention 23 décembre 2009 606
16 sept. 2007 à 20:23
Ouais c'est un peu plus clair... mais comme je suis pas un spécialiste des jeux. Une usine : tu construis quoi au juste ? c'est interractif ? T'aurais pas un screenshoot ou une démo en ligne pour que je me fasse une idée ?
Il faut obligatoirement attendre la fin du compteur ou bien on peut gagner avant ?

Pour le reste je comprends maintenant pourquoi tu utilises les sessions : je suppose que le joueur se connecte avec un pseudo + mot de passe et que tu veux recharger son contexte à partir de la base de données (score, niveau dans le jeu, temps etc ...)


0
neo2099 Messages postés 164 Date d'inscription vendredi 13 avril 2007 Statut Membre Dernière intervention 9 avril 2020 12
16 sept. 2007 à 21:56
Ben en faite pour gagner un niveau effectivement il faut attendre la fin du compte a rebours puis en fonction du niveau de l'usine tu gagne certaine ressource pour pouvoir construire d'autre truc, c'est comme le jeu ogame.fr sur ce jeu ta une planete puis tu dois construire certain batiment pour gagner des ressources et pour avoir des nouvelles armes, pour aller faire la guerre contre des ennemis.

Puis effectivement le joueur se connecte avec un mot de passe et en fonction du pseudo et du mdp la BDD charge son score ses niveau pour ces usines, son armé etc etc.
A ton avis c'est possible que tu puisse m'aider un peu pour le probleme que j'ai( je rappel au passage que ce projet que je fait avec des amis et un défis enfin voila quoi).
0
PhP Messages postés 1767 Date d'inscription lundi 11 décembre 2000 Statut Membre Dernière intervention 23 décembre 2009 606
16 sept. 2007 à 23:01
Ouais je pense que ton jeu est réalisable mais ça demande qd même des notions en prog plutôt pointues.
Mais bon t'es dans la filière info (quel niveau ?) donc c'est ton domaine normalement ... :-p


Si ton cpte à rebours dure un certain temps (mettons 10 min) et que l'utilisateur ferme son navigateur (ou plus probablement que son navigateur plante ;-) il devra recommencer son niveau depuis le début !!! pas cool

Tu dois donc trouver un moyen de sauvegarder le contexte à intervalles réguliers (une fois par minute par ex) pour pouvoir le restaurer à chaque reconnexion.
Le pb c'est que le protocole HTTP étant un protocole déconnecté la seule façon de pouvoir mettre à jour ta base de données est de charger une page. C'est aussi pour ça qu'on ne peut pas faire un vrai chat directement en HTML.

Pour réaliser cette sorte de sauvegarde auto il faut bien sûr utiliser JavaScript et au niveau de la page web tu peux :

soit recharger la page principale : mais là c'est injouable ! lol

soit utiliser des frames et recharger toutes les minutes un cadre invisible en envoyant les paramètres du contexte (ça risque peut être de figer un peu le cadre principal càd le jeu )

soit utiliser une iframe et la recharger toutes les minutes (idem pour le pb de freeze : à vérifier)

soit utiliser AJAX en mode asynchrone : LA solution que j'adopterais évidemment. On n'a pas besoin de cadre et on minimise les freezes.
Par contre c''est la solution la plus complexe à mettre en oeuvre. Disons qu'avec AJAX t'a plus besoin de recharger la page en cours pour communiquer avec ta base de données : en fait on recharge bien une page mais en tâche de fond et ça change tout ...



Voilà alors bon développement

0
neo2099 Messages postés 164 Date d'inscription vendredi 13 avril 2007 Statut Membre Dernière intervention 9 avril 2020 12
17 sept. 2007 à 00:00
Oui je suis bien dans la filiere info plus précisement en 2ème année de bts informatique de gestion administrateur de réseaux (donc je suis pas sensé faire de la progra puis je m'y connais que en HTML, mysql et php j'ai commencer il y a environ 2mois et demi et le javascript je m'y suis pas encore m'y lol).

Pour en revenir avec ce que tu dit pour le cpt, si le temps est sauvegarder dans la BDD a la reouverture du navigateur le temps aura diminuer j'avais penser faire un truc avec le timestamp de mysql, mais je me suis retrouver avec des erreur pas possible donc j'ai abandonnées cette solution.
Puis j'avais dans l'idee de sauvegarder tout mon tralala par cookies puis je me suis dit sa va pas pouvoir marcher parce que pas tous le monde accepte les cookies (puis en plus j'ai galerer pour mettre en place des cookies).

AJAX je connais que de nom (c'est la deuxieme fois que j'en entend parler a vrai dire lol.)
Le javascript me parait etre une solution avec un systeme de frame. Tu t'y connais bien en javascript?? pourrait tu m'aider si ta le temps et que tu n'est pas trop occuper bien sur tout en m'expliquant.

Un grand merci
0
PhP Messages postés 1767 Date d'inscription lundi 11 décembre 2000 Statut Membre Dernière intervention 23 décembre 2009 606
17 sept. 2007 à 11:10
Bjr

J'sais pas c'que vous avez tous à vouloir faire du réseau ... lol Faut croire que ça doit être la planque comme job ;-)

Tu t'y connais bien en javascript??

Ben disons que je touche pas mal ... lol

De toute façon pour utiliserAJAX t'es obligé de connaître JavaScript. Si tu connais déjà le PHP, la syntaxe du JavaScript ne devrait pas te poser de pb. C'est très proche également de l'ActionScritpt de Flash si tu connais.

Le truc que tu dois apprendre en JS c'est à manipuler DOM : la structure arborescente dans laquelle le navigateur stocke chaque page HTML dans la RAM.

Enfin je te conseille fortement d'apprendre à programmer OBJET en JS; en PHP aussi d'ailleurs ;-)



Pour le compteur moi je voyais plutôt lorsque l'utilisateur se reconnecte le compte à rebours reprend là où il en était lors de la dernière sauvegarde.

Le TIMESTAMP dans MySQL c'est galère : mieux vaut utiliser le DATETIME

Quant aux cookies je confirme c'est un bordel sans nom ! Les sessions c'est mieux.
0
neo2099 Messages postés 164 Date d'inscription vendredi 13 avril 2007 Statut Membre Dernière intervention 9 avril 2020 12
17 sept. 2007 à 16:58
ouai le reseau moi j'aime bien puis le développement j'aime bien aussi (mais ce qu'il proposer en developpement ne m'interresser pas tu parle Visual Basic Génial!!!! lol) toi t'es dans quoi??

ok je regarderai pour le javascipt.
Pour le compteur le truc c'est que l'utilisateur ne va pas rester 150 ans sur sa page pour attendre que le cpt arrive a zero donc il faut qu'il continue jusqu'au meme quand il est pas connecter.

Je regarderai aussi pour le datetime (j'espere qu'il est pas galere celui la lol) enfin maintenant il me faut du temp et pour l'instant la j'en ai plus trop entre les cours de 8h-18h mon permis et le trajet et le bts a preparer sa va etre short lol)

bon des que j'aurai modifier je mettrai ma source ici.
Merci pour tout
0
neo2099 Messages postés 164 Date d'inscription vendredi 13 avril 2007 Statut Membre Dernière intervention 9 avril 2020 12
23 sept. 2007 à 00:21
Bonjour

Voila c'est re-moi je me suis re-mi a zero et tout recommencer, et j'ai créer un nouveau script il marche en partie mais pas tout a fait.

<META http-equiv="refresh" content="1; URL=index.php">
<?

$date = time()+100;
$fin = time();

mysql_connect('localhost','root','');
mysql_select_db('essai');
mysql_query("INSERT INTO essai VALUES('$date','')");
$rep = mysql_query("SELECT date FROM essai") or die(mysql_error());
while($data = mysql_fetch_array($rep))
{
$tot = ($data['date'] - $fin);
}
$minutes= 0;
$heure=0;
if($tot > 60);
{
$secondes = $tot - 60;
while($secondes > 60)
{
$minutes++;
}
}
if($minutes > 60);
{
$minutes1 = $minutes - 60;
while($minutes1 > 60)
{
$heure++;
}
}
if($minutes > 0 && $secondes < 0)
{
$secondes = 59;
}
elseif($heure = 0 && $minutes = 0 && $secondes = 0)
{
echo "votre mine est finit";
exit;
}

echo "$heure h $minutes mn $secondes sec";

mysql_close();
?>

Voila ce que j'aimerais c'est est-ce que quelqu'un pourrait m'aider a finir ce compte a rebours, il marche mais pas toujours puis une fois a zero il continue dans les négatifs et ma base de données explose de données lol. Puis je me doute qu'il y est des erreurs donc si quelqu'un pouvait me dire la ou il y en as svp.

Un gros merci d'avance
0
PhP Messages postés 1767 Date d'inscription lundi 11 décembre 2000 Statut Membre Dernière intervention 23 décembre 2009 606
23 sept. 2007 à 10:25
Bjr

Hum ... t'as bien fait de t'orienter vers le réseau ! LOL
Parce que ton code ben, comment dire ..., il est pas génial


mysql_query("INSERT INTO essai VALUES('$date','')"); 

D'abord tu n'es pas obligé d'insèrer un nouvel enregistrement à chaque fois qu'un joueur recharge la page (sauf si tu veux logger tous les accès). Tu peux te contenter de mettre à jour la date dans un nouveau champ que tu pourrais appeller par ex date_dernier_acces.





$rep = mysql_query("SELECT date FROM essai") or die(mysql_error()); 
while($data = mysql_fetch_array($rep)) 
{ 
$tot = ($data['date'] - $fin); 
} 

Pourquoi est-ce que tu ne tries pas tes enregistrements par date décroissante dans la requête ?
Comme ça il te suffit de lire juste le 1er enregistrement retourner : il contiendra forcément la date la plus récente. Et tu n'as plus besoin de boucler.

De toute façon ici relire ta base de données ne sert à rien, puisque tu sais déjà que $tot = $date - $fin; !!! Et que le résultat vaut -100 dans presque tous les cas ! Hé oui !


Quant au reste je vois pas trop ce que tu essaies de faire : peut être convertir une durée en HH:MM:SS ?
En tout cas :
while($secondes > 60) 
{ 
$minutes++; 
} 

ça risque d'assommer voir de planter le serveur PHP si le timeout est trop long ! ce que tu as écrit s'appelle une boucle infinie ! Et y'en a d'autres !!!!!

Bref tu me mets ce code sur un serveur en prod et je te tues ! lol

Désolé mais faut tout réécrire : c'est pas juste une petite correction ici ou là .

0
neo2099 Messages postés 164 Date d'inscription vendredi 13 avril 2007 Statut Membre Dernière intervention 9 avril 2020 12
23 sept. 2007 à 13:07
ok ok eh ben c'est pas facile le développement lol heureusement que je suis en réseaux lol

Merci d'être franc
0
PhP Messages postés 1767 Date d'inscription lundi 11 décembre 2000 Statut Membre Dernière intervention 23 décembre 2009 606
23 sept. 2007 à 21:12
Re

Aller voici un petit exemple : game.php

<?php

$pseudo="";

$restant=0;

// Si le pseudo est passé à la page en tant que paramètre
if (isset($_POST["pseudo"])) 
{
	$command="";
	if (isset($_POST["command"])) $command = $_POST["command"];

	$pseudo =$_POST["pseudo"];

	// Connexion à MySQL
	$cfg_hostname="localhost";
	$cfg_username="root";
	$cfg_password="";
	$cfg_database="game";


	$link=mysql_connect($cfg_hostname, $cfg_username, $cfg_password) or die("Can\'t connect to MySql server !");

	// Sélection de la base de données 
	$result=mysql_select_db($cfg_database,$link) or die("Impossible de sélectionner la base ".$cfg_database." !");

	// Recherche si le pseudo du joueur est déjà dans la table player

	$query = "SELECT * FROM player WHERE pla_pseudo='".$pseudo."'";
 
	$result=mysql_query($query,$link);

	
	if (!$result)
	{
		echo "query = ".$query."\n";
		echo "mysql_errno = ".mysql_errno($link)."\n";
		echo "mysql_error = ".mysql_error($link)."\n";	
		exit;
	}

	// Aucun résultat retourné par le SELECT -> le joueur n'est pas dans la table
	if (mysql_num_rows($result) == 0)
	{
		
		$date=date("Y-m-d H:i:s");
		
		// Ajoute le joueur dans la table	
		$query = "INSERT INTO player (pla_pseudo,pla_date) VALUES ('".$pseudo."','".$date."')";
	
		$result=mysql_query($query,$link);
	}
	else
	{

		if ($command == "new") // Si une commande pour nouvelle partie
		{
			$date=date("Y-m-d H:i:s");
		
			// Met à jour la date pour le joueur dans la table	
			$query = "UPDATE player SET pla_date='".$date."' WHERE pla_pseudo='".$pseudo."'";
	
			$result=mysql_query($query,$link);
		}
		else
		{
			// Lit la date et l'heure à laquelle le jeu à commencer 
			$row = mysql_fetch_object($result);
			$date = $row->pla_date;
		}
	}	


	// Convertit la date au format "YYYY-MM-DD HH:MM:SS" en TimeStamp
	$timestamp=mktime(substr($date,11,2),substr($date,14,2),substr($date,17,2),substr($date,5,2),
			substr($date,8,2),substr($date,0,4));
	$startdate=date("d/m/Y à H:i:s",$timestamp);

	$duree = 100; // Durée allouée à la partie : 100 secondes

	$restant=$duree-(time()-$timestamp);
	if ($restant < 0) { $restant = 0; }
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" dir="ltr" lang="en">
<head>
<title>Game</title>
<style>

body
{
font-size:10pt;
font-family:Arial;
}

div img
{
padding:0px;
margin:0px;
display:inline;
border-width:0px;
}

</style>
<script type="text/javascript">
<!--

function toHMS(duree)
{
	var temps = new Array();
	
	var hh = Math.floor(duree/3600);
	var mm = Math.floor((duree-hh*3600)/60);
	var ss = duree-hh*3600-mm*60;

	
	temps[0]=Math.floor(hh/10);
	temps[1]=hh-temps[0]*10;
	temps[2]=Math.floor(mm/10);
	temps[3]=mm-temps[2]*10;
	temps[4]=Math.floor(ss/10);
	temps[5]=ss-temps[4]*10;
	
	return temps;
}


var restant=<?php echo $restant; ?>;

function decompte()
{
	var seq = toHMS(restant);
	for (var i=0; i < 6; i++)
	{
		document.getElementById("seq_"+i).src="c"+seq[i]+".gif";
	}

	if (restant)
	{
		restant--;
		window.setTimeout("decompte()",1000);
	}
	else
	{
		alert("Game over !");
	}	
}




// -->
</script>
</head>
<body <?php if ($restant) echo "onload=\"decompte()\"";?>>
<?php if (isset($pseudo) && ($pseudo)) {echo "Bienvenue ".$pseudo."<br/><br/>";} ?>
<?php if (isset($startdate)) {echo "Partie démarrée le ".$startdate."<br/><br/>";} ?>
<div>
Temps restant <img id="seq_0" src="c0.gif"><img id="seq_1" src="c0.gif"><img src="colon.gif"><img id="seq_2" src="c0.gif"><img id="seq_3" src="c0.gif"><img src="colon.gif"><img id="seq_4" src="c0.gif"><img id="seq_5" src="c0.gif">
</div>

<br/>
<br/>
<br/>
<br/>
<?php
if (!isset($_POST["pseudo"])) 
{
	echo "<form action=\"".$_SERVER['PHP_SELF']."\" method=\"post\">\n";
	echo "Entrez votre pseudo ";
	echo "<input type=\"text\" id=\"pseudo\" name=\"pseudo\">\n";
	echo "<input type=\"submit\" value=\"Connecter\">\n";
}
else
{
	echo "<form action=\"".$_SERVER['PHP_SELF']."\" method=\"post\">\n";
	echo "<input type=\"hidden\" id=\"command\" name=\"command\" value=\"new\">\n";
	echo "<input type=\"hidden\" id=\"pseudo\" name=\"pseudo\" value=\"".$pseudo."\">\n";
	echo "<input type=\"submit\" value=\"Recommencer une nouvellle partie\">\n";

}
?>
</html>



Tu dois créer une base nommée game et à l'intérieur une table nommée player avec la structure suivante :

CREATE TABLE `player` (
  `pla_id` int(11) NOT NULL auto_increment,
  `pla_pseudo` varchar(40) NOT NULL default '',
  `pla_date` datetime NOT NULL default '0000-00-00 00:00:00',
  PRIMARY KEY  (`pla_id`)
) TYPE=MyISAM AUTO_INCREMENT=3 ;


cet exemple réutilise les images de mon précédent compteur.

La première fois qu'on lance la page game.php le compteur ne tourne pas et tu dois entrer un pseudo. Ensuite la page est rechargée et le compteur tourne. A tout moment tu peux fermer ton navagateur et te reconnecter : le compteur sera alors mis à jour.
Tu peux aussi relancer une nouvelle partie avant la fin du jeu.
Nota : j'ai mis 100 secondes comme durée de la partie.

Voilà

0
neo2099 Messages postés 164 Date d'inscription vendredi 13 avril 2007 Statut Membre Dernière intervention 9 avril 2020 12
23 sept. 2007 à 23:25
Un grand merci sa marche nickel mais le truc c'est que une fois le navigateur fermer le cpt reviens a zero et moi je voudrais qu'il continue, mais tu en as déjà beaucoup fait si sa te derange pas je pourrais essayer de le modifier pour le faire tourner a ma sauce.
Puis des que c'est fait tu me dira se que tu en pense.

En tout cas un grand merci de me mettre sur la voix
0