IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Compte à rebours style Ogame


Sujet :

PHP & Base de données

  1. #1
    Membre averti
    Inscrit en
    Avril 2006
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 15
    Par défaut Compte à rebours style Ogame
    Bonjour à tous,
    Je cherche à créé un petit compt à rebour.
    Au début cela me parraissait simple mais maintenant j'ai trop d'exigences envers mon script et je n'y arrive plus.

    Ce que je voudrais:

    On clique sur un lien nommé "acheter" (le compte à rebour s'affiche et démarre).
    Pendant ce temps on peut quitter le net vister d'autres pages...
    Le compte à rebour est terminé: le mot TERMINE apparait à la place du compteur.
    A ce moment (dans ma bdd mysql avc phpmyadmin) je voudrais passer le valeur de "dolzz" à 40.
    dolzz bigint(20) Non 50 et augmenter la valeur de "capacitée" à 3.
    capacitee bigint(20) Non 1
    Puis un fois cliqué sur le mot TERMINE le lien nommé "acheté" réapparait.

    Durdur on peut le faire ensemble amis programmeurs?

    Mon script (meme s'il ne fait pas tout ce que je souhaiterais... snif)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    function t(){ v=new Date(); n=new Date(); o=new Date(); for(cn=1;cn<=anz;cn++){ bxx=document.getElementById('bxx'+cn); ss=bxx.title; s=ss-Math.round((n.getTime()-v.getTime())/1000.); m=0;h=0; if(s<0){ bxx.innerHTML="-" }else{ if(s>59){ m=Math.floor(s/60); s=s-m*60 } if(m>59){ h=Math.floor(m/60); m=m-h*60 } if(s<10){ s="0"+s } if(m<10){ m="0"+m } bxx.innerHTML=h+":"+m+":"+s+""; } bxx.title=bxx.title-1; } window.setTimeout("t();",999);}

  2. #2
    Membre Expert

    Homme Profil pro
    Expert PHP
    Inscrit en
    Novembre 2004
    Messages
    2 127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Expert PHP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 127
    Par défaut
    stp, tu pourrais utiliser la balise CODE ?
    merci.

  3. #3
    Membre averti
    Inscrit en
    Avril 2006
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 15
    Par défaut
    Salut alors j'ai revu le code entier ça donne ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
     
    <SCRIPT type=text/javascript>
    function CD_ZP(objVal){
    var str=""+objVal;
    var strl=str.length;
    return(strl!=2?"0"+str:str)
    };
    function pa_time(Time_Left){
    if(Time_Left == 0) {
    //Time_Left = 0;
    window.open("test.php","_self");
    }else{
    var heures = Math.floor(Time_Left / 3600);
    var minutes = Math.floor(((Time_Left / 3600) - Math.floor(Time_Left / 3600)) * 60);
    var seconds = Time_Left - ((Math.floor(Time_Left / 60)) * 60);
    document.getElementById("pa_time").innerHTML = CD_ZP(heures) + ':' + CD_ZP(minutes) + ':' + CD_ZP(seconds);
    setTimeout('pa_time(' + (Time_Left-1) + ');', 1000);
    }
    }
    </SCRIPT>
    <?
    //+++++++++++++++++++++++++++++++++++++++++++++++++++++
    //on se connecte a la bdd
    $BD_serveur = "localhost";
    $BD_utilisateur = "root";
    $BD_motDePasse = "";
    $BD_base = "";
    $id = $_POST["id"];
    $motDePasse = $_POST["motdepasse"];
    @mysql_pconnect($BD_serveur, $BD_utilisateur, $BD_motDePasse)
    or die("Impossible de se connecter au serveur de bases de données.");
    @mysql_select_db($BD_base)
    or die("Impossible de se connecter à la base de données.");
    //+++++++++++++++++++++++++++++++++++++++++++++++++++++
    $id = 1;
    $req = mysql_query("SELECT mktime,pa FROM tutoriaux_tabletest WHERE id='$id'") or die (mysql_error());
    $data = mysql_fetch_array($req);
    $pa=$data['pa'];
    $pa_fini=$data['mktime'];//le mktime de la table correspond a la date de fin du compte a rebours
    $mktime=mktime();
    if($pa_fini<=$mktime){//si l date de fin est <= au temps d'aujourdhui
    $pa = $pa-1;
    $mktime = $mktime + 60;//test pour 1 minute
    mysql_query("UPDATE tutoriaux_tabletest Set mktime = '$mktime', pa='$pa' WHERE id='$id'") or die (mysql_error());
    }
    $req = mysql_query("SELECT mktime,pa FROM tutoriaux_tabletest WHERE id='$id'") or die (mysql_error());
    $data = mysql_fetch_array($req);
    $pa=$data['pa'];
    $pa_fini=$data['mktime'];//le mktime de la table correspond a la date de fin du compte a rebours
    $mktime=mktime();
    echo 'Pa:'.$pa.'<br>';
    echo 'Prochain dans: <DIV class=valeur id=pa_time></DIV><SCRIPT type=text/javascript>pa_time(';
    $req = mysql_query("SELECT mktime FROM tutoriaux_tabletest WHERE id='$id'") or die (mysql_error());
    $data = mysql_fetch_array($req);
    $pa_fini=$data['mktime'];//réupération de la date en seconde de la fin //du compte à rebours
    echo $pa_fini-mktime();//ici le script va faire la difference entre la date en secondes de maintenant et la date de fin pour savoir dans combien de temps le compte a rebours fini
    echo ')</SCRIPT>';
    ---------------------------------------------------------
    Voila donc vous l'aurez compris c'est le nombre de pa que ce script change à la fin du compte à rebour qui est fixé ici à une minute.
    ---------------------------------------------------------
    Bon passons au bug qu'il faudrait que vous m'aidiez à corriger:
    Notice: Undefined index: id in f:\easyphp1-8\www\autre\compte à rebour.php on line 32
    Notice: Undefined index: motdepasse in f:\easyphp1-8\www\autre\compte à rebour.php on line 33
    Voila pour ce qui est des erreurs.
    ---------------------------------------------------------
    Je cherche également à l'optimiser:
    Pouvoir lancer le script sur un clique d'un lien.
    Pouvoir afficher le mot "TERMINE" à la fin du compte à rebour.
    Pouvoir cliquer ce ce lien TERMINE qui nous ramène au début du script non enclenché.
    Pouvoir quitter la page et revenir le temps du compte à rebour (cela ne doit pas etre infaisable vu que sur le site "ogame" ils l'ont fait...)
    --------------------------------------------------------
    Voila ce serai vraiment simpas de m'aider car j'ai bien galéré.
    ++

  4. #4
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Par défaut
    Salut

    Concernant tes undefined index, c'est que tu vas chercher une valeur aux indexes "id" et "motdepasse" dans la variable globale $_POST alors que tu n'as pas envoyé de formulaire.
    Conséquence : tu accèdes à des variables inexistantes.
    Solution : mettre toute la page (ou presque) dans un test :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if(isset($_POST)){
       // Colle tout ici
    }
    Un gros conseil : met ton code en page. Utilise des sauts de ligne pour séparer les blocs logiques et indente le code pour mettre en valeur (visuellement) les niveaux d'imbrication.
    Je l'ai fait dans l'extrait de code que je te donne dans ce message.
    Au passage, tu peux également utiliser l'outil de mise en couleurs disponible ici :
    http://php.developpez.com/bbcode/

  5. #5
    Membre averti
    Inscrit en
    Avril 2006
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 15
    Par défaut
    Voila j'ai supprimé les erreurs:
    Notice: Undefined index: id in f:\easyphp1-8\www\autre\compte à rebour.php on line 32
    Notice: Undefined index: motdepasse in f:\easyphp1-8\www\autre\compte à rebour.php on line 33

    Le script donne ça maintenant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
     
    <SCRIPT type=text/javascript>
    function CD_ZP(objVal){
    var str=""+objVal;
    var strl=str.length;
    return(strl!=2?"0"+str:str)
    };
    function pa_time(Time_Left){
    if(Time_Left == 0) {
    //Time_Left = 0;
    window.open("test.php","_self");
    }else{
    var heures = Math.floor(Time_Left / 3600);
    var minutes = Math.floor(((Time_Left / 3600) - Math.floor(Time_Left / 3600)) * 60);
    var seconds = Time_Left - ((Math.floor(Time_Left / 60)) * 60);
    document.getElementById("pa_time").innerHTML = CD_ZP(heures) + ':' + CD_ZP(minutes) + ':' + CD_ZP(seconds);
    setTimeout('pa_time(' + (Time_Left-1) + ');', 1000);
    }
    }
    </SCRIPT>
    <?
    //+++++++++++++++++++++++++++++++++++++++++++++++++++++
    //on se connecte a la bdd
    mysql_connect ('localhost','root','');
     $BD_base        = "dolbizz";
     @mysql_select_db($BD_base)
            or die("Impossible de se connecter à la base de données.");
    //+++++++++++++++++++++++++++++++++++++++++++++++++++++
    $id = 1;
    $req = mysql_query("SELECT mktime,pa FROM tutoriaux_tabletest WHERE id='$id'") or die (mysql_error());
    $data = mysql_fetch_array($req);
    $pa=$data['pa'];
    $pa_fini=$data['mktime'];//le mktime de la table correspond a la date de fin du compte a rebours
    $mktime=mktime();
    if($pa_fini<=$mktime){//si l date de fin est <= au temps d'aujourdhui
    $pa = $pa-1;
    $mktime = $mktime + 60;//test pour 1 minute
    mysql_query("UPDATE tutoriaux_tabletest Set mktime = '$mktime', pa='$pa' WHERE id='$id'") or die (mysql_error());
    }
    $req = mysql_query("SELECT mktime,pa FROM tutoriaux_tabletest WHERE id='$id'") or die (mysql_error());
    $data = mysql_fetch_array($req);
    $pa=$data['pa'];
    $pa_fini=$data['mktime'];//le mktime de la table correspond a la date de fin du compte a rebours
    $mktime=mktime();
    echo 'Pa:'.$pa.'<br>';
    echo 'Prochain dans: <DIV class=valeur id=pa_time></DIV><SCRIPT type=text/javascript>pa_time(';
    $req = mysql_query("SELECT mktime FROM tutoriaux_tabletest WHERE id='$id'") or die (mysql_error());
    $data = mysql_fetch_array($req);
    $pa_fini=$data['mktime'];//réupération de la date en seconde de la fin //du compte à rebours
    echo $pa_fini-mktime();//ici le script va faire la difference entre la date en secondes de maintenant et la date de fin pour savoir dans combien de temps le compte a rebours fini
    echo ')</SCRIPT>';
    Cherchons pour la suite...

  6. #6
    Membre averti
    Inscrit en
    Avril 2006
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 15
    Par défaut re
    Pour la bdd je n'ai rien oublié:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    CREATE TABLE `tutoriaux_tabletest` (    `id` int(11) NOT NULL
     auto_increment,    `pa` varchar(10) NOT NULL default '0',    `mktime`
     varchar(10) NOT NULL default '0',    PRIMARY KEY  (`id`)  ) 
    TYPE=MyISAM AUTO_INCREMENT=2 ;INSERT INTO `tutoriaux_tabletest`
     VALUES (1, '4', '1135134580')
    Sinon tu veux bien me refaire le code car la j'y arrive plus je suis sur que je vais choper la crève...

  7. #7
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Par défaut
    Mouarf, relis bien ma réponse précédente : je te dis ce qu'il faut faire mais ce n'est certainement pas de supprimer les lignes incriminées.

  8. #8
    Membre averti
    Inscrit en
    Avril 2006
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 15
    Par défaut
    ok mais après
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    <div style="text-align: left;">if(isset($_POST)){
       </div>
    je colle tout mon code ou seulement la partie php?

  9. #9
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Par défaut
    Essaie d'y réfléchir deux secondes : je te donne une solution pour n'exécuter du code que si le formulaire a été envoyé. Quelle partie de ton code ne doit être exécutée que dans ce cas ?

  10. #10
    Membre averti
    Inscrit en
    Avril 2006
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 15
    Par défaut
    Ecoute tu vas me trouver bete mais je ne comprend de quoi tu veux parler avec ton formulaire ?
    Tu essais de m'aider?

  11. #11
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Par défaut
    Disons que, si tu utilises la variable $_POST, c'est que tu as certainement un formulaire avant... Si ce n'est pas le cas, je suppose que tu as récupéré ce script quelque part et que tu ne sais pas trop comment il fonctionne :/

    Dans les deux cas, tu as visiblement sauté un grand nombre d'étapes...

    Je te recommande ce lien pour commencer :
    http://julp.developpez.com/php/formulaires/

Discussions similaires

  1. [timer] Compte à rebours pour redirection !
    Par Raideman dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 31/12/2005, 20h07
  2. Compte à rebours
    Par Anduriel dans le forum Général JavaScript
    Réponses: 11
    Dernier message: 29/12/2005, 20h12
  3. compte à rebours
    Par Datord dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 17/11/2005, 21h22
  4. compte à rebours
    Par etoile1506 dans le forum C
    Réponses: 10
    Dernier message: 27/10/2005, 15h20
  5. Compte à rebours trop rapide
    Par Anduriel dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 12/06/2005, 20h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo