Script et bdd

Fermé
nicoj - Modifié par jordane45 le 15/12/2015 à 00:09
jordane45 Messages postés 38346 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 décembre 2024 - 15 déc. 2015 à 00:13
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 lundi 22 octobre 2007 Statut Membre Dernière intervention 19 décembre 2016 285
14 déc. 2015 à 15:58
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 38346 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 décembre 2024 4 718
15 déc. 2015 à 00:13
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