Script et bdd

nicoj -  
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour à tous,

J'ai récupéré un petit jeu avec un script permettant d'attribuer des récompenses chaque jour aux différents gagnant, cependant celui ci ne fonctionne pas. Dans la bdd, impossible de trouver comment faire pour que le classement se regénère tous les jours, débutant à minuit pour finir à 23h59.

Je vous copie ci-dessous le script, si jamais y'a une erreur dedans...

Merci d'avance pour votre aide
<?php

class scriptCS {
    const FREQUENCE_1_JOUR = 1;
    const FREQUENCE_1_HEURE = 2;

    const ID_RELANCE = 1;
    const ID_RECOMPENSES = 2;
    const ID_SALAIRE_PROS = 3;
    const ID_GESTION_ABONNEMENT = 4;
    const ID_CHALLENGE = 5;
    const ID_COUPE_DU_MONDE_PHASE = 6;
    const ID_COUPE_DU_MONDE = 7;

    private $_tabIdScripts = array(self::ID_RELANCE=>self::FREQUENCE_1_JOUR,
                                   self::ID_RECOMPENSES=>self::FREQUENCE_1_JOUR,
                                   self::ID_SALAIRE_PROS=>self::FREQUENCE_1_JOUR,
                                   self::ID_GESTION_ABONNEMENT=>self::FREQUENCE_1_JOUR,
                                   self::ID_CHALLENGE=>self::FREQUENCE_1_JOUR,
                                   self::ID_COUPE_DU_MONDE_PHASE=>self::FREQUENCE_1_JOUR,
                                   self::ID_COUPE_DU_MONDE=>self::FREQUENCE_1_JOUR
                                  );
    private $_idScript = 0;
    private $_numeroScript = 0;

    public function __construct($numero_script) {
        if(!array_key_exists($numero_script,$this->_tabIdScripts)) {
            throw new Exception('Ce script est inconnu, utilisez les constantes de la classe');
        }
        $this->_numeroScript = $numero_script;
        $this->_frequence = $this->_tabIdScripts[$numero_script];
    }

    public function demarrer() {
        if($this->_frequence == self::FREQUENCE_1_JOUR) {
            $query = "SELECT scri_idScript
                            FROM log_Script
                        WHERE scri_Numero='".$this->_numeroScript."' AND
                              scri_Debut>=DATE_FORMAT(NOW(),'%Y-%m-%d 00:00:00') AND
                              scri_Debut<=DATE_FORMAT(NOW(),'%Y-%m-%d 23:59:59')
                        LIMIT 1;";
        } else {
            if($this->_frequence == self::FREQUENCE_1_HEURE) {
                $query = "SELECT scri_idScript
                            FROM log_Script
                        WHERE scri_Numero='".$this->_numeroScript."' AND
                              scri_Debut>=DATE_FORMAT(NOW(),'%Y-%m-%d %H:00:00') AND
                              scri_Debut<=DATE_FORMAT(NOW(),'%Y-%m-%d %H:59:59')
                        LIMIT 1;";
            } else {
                throw new Exception('La fréquence du script est inconnue');
            }
        }
        $result = db_query_read($query);
        if (mysql_num_rows($result) > 0) {
            throw new Exception('Le script a déjà été lancé');
        } else {
            //on crée le démarrage
            $result = db_query_write("INSERT INTO log_Script SET scri_Numero='".$this->_numeroScript."',scri_Etat=0,scri_Debut=NOW();");
            $this->_idScript = mysql_insert_id();
        }
    }

    public function terminer($output) {
        if($this->_idScript > 0) {
            db_query_write("UPDATE log_Script SET scri_Output='".mysql_real_escape_string($output)."',scri_Etat=1,scri_Fin=NOW()
                            WHERE scri_idScript='".$this->_idScript."' LIMIT 1;");
        }
    }

    public function marquerErreur($output) {
        if($this->_idScript > 0) {
            db_query_write("UPDATE log_Script SET scri_Output='".mysql_real_escape_string($output)."',scri_Etat=2,scri_Fin=NOW();");
        }
    }

}
?>


EDIT : Ajout des balises de code.
A voir également:

2 réponses

sipherion Messages postés 1809 Date d'inscription   Statut Membre Dernière intervention   286
 
Bonjour,

De ce que j'ai pu comprendre, il s'agit d'une classe qui doit être appelée ailleurs par une de ses fonctions par
scriptCS::demarrer()
par exemple, donc il faut appeler cette fonction à un certain moment et appeler la fonction
scriptCS::terminer()
quand le classement doit être calculé avant le jour suivant.
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
Bonjour,


Dans la bdd, impossible de trouver comment faire pour que le classement se regénère tous les jours, débutant à minuit pour finir à 23h59.

Dans la BDD ???? Oo .....
Ce genre de chose doit certainement être fait via un planificateur de tâches ... (ou un CRON sous Linux)

Comme le dit sipherion ... le script que tu nous montres doit être utilisé ..... depuis un autre script.....


0