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 :

Comment obtenir +1 jour avec la date actuelle DE MA BASE DE DONNEES SQL


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Débutant Développeur Web
    Inscrit en
    Décembre 2018
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Débutant Développeur Web

    Informations forums :
    Inscription : Décembre 2018
    Messages : 31
    Par défaut Comment obtenir +1 jour avec la date actuelle DE MA BASE DE DONNEES SQL
    Bonjour, Bonsoir,

    Je voudrais savoir quelle méthode utilisée pour afficher la date de demain ^PAR RAPPORT a la date d'aujourd'hui
    AVEC MA BASE DE DONNEES SQL avec la POO?

    Je précise que j'ai DEJA regardé toute la doc PHP + d'autres forums pour trouver une réponse à ma question.
    ET je suis en formation d'apprentissage Developpeur web.

    J'ai deux fichiers avec des class POO et un fichier index.

    Voici quelques portions de code de mes fichiers :

    Fichier "class personnage"
    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
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
     
    <?php
    // PREMIERE ETAPE : Creer la class Personnage avec ses Attributs prives et ses Methodes
    class Personnage
    {
        // ETAPE 01 : Attributs Prives (= Caracteristiques) de Objet Personnage
        private $_id,
                $_nom, 
                $_dateDernierCoup,
                $_dateDerniereConnexion;
     
        // ETAPE 03 : Constantes
     
        // ETAPE 06 : Le Constructeur
        public function __construct(array $donnees)
        {
            $this->hydrate($donnees);
        }
     
     
        // ETAPE 05 : HYDRATER les Objets
        public function hydrate(array $donnees)
        {
            foreach ($donnees as $key => $value)
            {
                $method = 'set'.ucfirst($key);
     
                if (method_exists($this, $method))
                {
                    $this->$method($value);
                }
            } // FIN DE "foreach ($donnees as $key => $value)"
        }
     
     
        // ETAPE 02 : Methodes (= Fonctionnalites) Publics de Objet Personnage
        public function nomValide()
        {
            return !empty($this->_nom);
        }
     
        // ETAPE 04.01 : Liste de GETTERS (= Accéder à un attribut : l'accesseur ou getter)
        public function id() { return $this->_id; }
        public function nom() { return $this->_nom; }
        public function dateDernierCoup() { return $this->_dateDernierCoup; }
        public function dateDerniereConnexion() { return $this->_dateDerniereConnexion; }
     
     
       // ETAPE 04.02 : Liste des SETTERS (= Modifier la valeur d'un attribut : les mutateurs ou Setters)
     
        public function setId($id)
        {
            $id = (int) $id;
     
            // Verifier que "$id" est SUPERIEUR A 0
            if ($id > 0)
            {
                $this->_id = $id;
            }
        }
     
        public function setNom($nom)
        {
            // Verifier que "$nom" est une chaîne de caractères 
            if (is_string($nom))
            {
                $this->_nom = $nom;
            }
        }
     
        public function setDateDernierCoup($dateDernierCoup)
        {
            // DEFINITION :
            // * " DateTime::createFromFormat " (= code PHP pour le style POO)
            // * Analyse une heure au format texte selon le format spécifié.
            $dateDernierCoup = DateTime::createFromFormat("Y-m-d H:i:s", $dateDernierCoup);
     
            $this->_dateDernierCoup = $dateDernierCoup;
        }
     
        public function setDateDerniereConnexion($dateDerniereConnexion)
        {
            // DEFINITION :
            // * " DateTime::createFromFormat " (= code PHP pour le style POO)
            // * Analyse une heure au format texte selon le format spécifié. 
            $dateDerniereConnexion = DateTime::createFromFormat("Y-m-d H:i:s", $dateDerniereConnexion);
     
            $this->_dateDerniereConnexion = $dateDerniereConnexion;
     
        }
    }
    Fichier "class personnagesManager"
    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
     
    <?php
    /* /// *** DEUXIEME ETAPE : Stockage Base de Donnees (= la class PersonnagesManager) *** /// */
    class PersonnagesManager 
    {
        // ETAPE 01 : Attributs Prives (= Caracteristiques) de Objet PersonnagesManager
        private $_db;
     
        // ETAPE 03 : Le Constructeur
        public function __construct($db)
        {
            $this->setDb($db);
        }
        // ETAPE 02 : Setters
        public function setDb(PDO $db)
        {
            $this->_db = $db;
        }
     
        // ETAPE 04 : Methodes (= Fonctionnalites) Publics de Objet PersonnagesManager
        public function add(Personnage $perso)
        {
            // Préparation de la requête d'insertion.
            $q = $this->_db->prepare('INSERT INTO comparerdates(nom, dateDernierCoup, dateDerniereConnexion) VALUES(:nom, NOW(), NOW())');
            // Assignation des valeurs pour le nom du personnage.
            $q->bindValue(':nom', $perso->nom());
            // Exécution de la requête.
            $q->execute();
     
            $now = new DateTime('NOW');
     
            // Hydratation du personnage passé en paramètre 
            // * avec assignation des Attributs Privés de la class "Personnage"
            // * ( de son identifiant, des dégâts initiaux (= 0), etc...)
            $perso->hydrate([
                'id' => $this->_db->lastInsertId(),
                // format('d-m-Y à H: i: s')
                'dateDernierCoup' => $now->format('Y-m-d H:i:s'),
                'dateDerniereConnexion' => $now->format('Y-m-d H:i:s'),  
            ]); 
        }
     
        // ... ...
     
        public function update(Personnage $perso)
        {
            // Prépare une requête de type UPDATE.
            $q = $this->_db->prepare('UPDATE comparerdates SET dateDernierCoup = :dateDernierCoup, dateDerniereConnexion = :dateDerniereConnexion WHERE id = :id');
            // Assignation des valeurs à la requête.
            $q->bindValue(':id', $perso->id(), PDO::PARAM_INT);
            $q->bindValue(':dateDernierCoup', $perso->dateDernierCoup()->format('Y/m/d H:i:s'), PDO::PARAM_STR);
            $q->bindValue(':dateDerniereConnexion', $perso->dateDerniereConnexion()->format('Y/m/d H:i:s'), PDO::PARAM_STR);
            // Exécution de la requête.
            $q->execute();
        }   
    }
    ?>
    FICHIER INDEX
    Code html : 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
     
    if (isset($perso)) 
    {
    ?>
        <p>le nom du perso est :
            <?= htmlspecialchars($perso->nom()) ?><br>
            la date du dernier coup est le
            <?= $perso->dateDernierCoup()->format('d/m/Y à H:i:s') ; ?><br>
            la date de derniere connexion est le
            <?= $perso->dateDerniereConnexion()->format('d/m/Y à H:i:s') ; ?>
        </p>
                <?php
            
            // PARTIE "dernierCoup"
            //$dc = $perso->dateDernierCoup();
             
            // Creation de Nouveau Objet DATETIME
            $dateDerCoup = new DateTime();
            // Ajout d'une periode de 1Jour
            $dateDerCoup->add(new DateInterval('P1D'));
            
            // PARTIE "derniereConnexion"
            $dconex = $perso->dateDerniereConnexion()->format('d/m/Y à H:i:s');
             
            // Creation de Nouveau Objet DATETIME
            $dateCo = new DateTime($deconex);
            // Ajout d'une periode de 1Jour
            $dateCo->add(new DateInterval('P1D'));
            ?>
        <p>
            Coups Portés : <?php echo ' ils seront remis à zéro le : ', $dateDerCoup->format('d-m-Y à H:i:s'); ?><br />
            DerniereConnexion : <?php echo $dateCo->format('d-m-Y à H:i:s'); ?>
        </p>
        <?php   
    }

    sur le navigateur, cela m'affiche :
    Nom : CaptureMiniJeuCombat12.JPG
Affichages : 601
Taille : 57,2 Ko

  2. #2
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 506
    Par défaut
    Bonjour,

    Quelle moteur de base de données ?
    Où, à quelle endroit, pendant quel select ?

  3. #3
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    De ce que je vois dans ton script, tu as déjà un ajout de jour à la date du jour ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    // Creation de Nouveau Objet DATETIME
            $dateDerCoup = new DateTime();
            // Ajout d'une periode de 1Jour
            $dateDerCoup->add(new DateInterval('P1D'));
    Il suffirait d'appliquer la même procédure à la date souhaitée, par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $dateDerCoupPlusUn = clone $perso->dateDernierCoup();
    $dateDerCoupPlusUn->add(new DateInterval('P1D'));
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  4. #4
    Membre averti
    Homme Profil pro
    Débutant Développeur Web
    Inscrit en
    Décembre 2018
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Débutant Développeur Web

    Informations forums :
    Inscription : Décembre 2018
    Messages : 31
    Par défaut
    Citation Envoyé par Celira Voir le message
    De ce que je vois dans ton script, tu as déjà un ajout de jour à la date du jour ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    // Creation de Nouveau Objet DATETIME
            $dateDerCoup = new DateTime();
            // Ajout d'une periode de 1Jour
            $dateDerCoup->add(new DateInterval('P1D'));
    Il suffirait d'appliquer la même procédure à la date souhaitée, par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $dateDerCoupPlusUn = clone $perso->dateDernierCoup();
    $dateDerCoupPlusUn->add(new DateInterval('P1D'));
    Bonjour, merci d'avoir répondu à mon problème de gestion de dates.
    Je viens à l'instant (= à l'heure où je vous écris) que j'ai essayé votre morceau de code
    ET Résultat : Cela a fonctionné.

    Merci de votre aide

  5. #5
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 506
    Par défaut
    Bonjour,
    Content que @Celira vous ai donné une solution.
    Je vais être plus exhaustif afin de répondre à votre question par rapport à votre db et au titre de ce post pour les recherches futur.

    Votre moteur de base de données est soit MySQL soit MariaDB, je le sais grâce au print screen de phpMyAdmin

    Sinon, pour la date vous auriez pu créer un alias dans votre requête SQL


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     $q = $this->_db->query('SELECT id, nom, dateDernierCoup, dateDerniereConnexion,DATE_ADD(dateDerniereConnexion, INTERVAL 1 DAY) AS tomorrow  FROM comparerdates WHERE id = '.$info);
    Et modifier votre classe personnage comme ceci :

    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
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
     
    <?php
    // PREMIERE ETAPE : Creer la class Personnage avec ses Attributs prives et ses Methodes
    class Personnage
    {
        // ETAPE 01 : Attributs Prives (= Caracteristiques) de Objet Personnage
        private $_id,
                $_nom, 
                $_dateDernierCoup,
                $_dateDerniereConnexion;
                $_tomorrow
     
        // ETAPE 03 : Constantes
     
        // ETAPE 06 : Le Constructeur
        public function __construct(array $donnees)
        {
            $this->hydrate($donnees);
        }
     
     
        // ETAPE 05 : HYDRATER les Objets
        public function hydrate(array $donnees)
        {
            foreach ($donnees as $key => $value)
            {
                $method = 'set'.ucfirst($key);
     
                if (method_exists($this, $method))
                {
                    $this->$method($value);
                }
            } // FIN DE "foreach ($donnees as $key => $value)"
        }
     
     
        // ETAPE 02 : Methodes (= Fonctionnalites) Publics de Objet Personnage
        public function nomValide()
        {
            return !empty($this->_nom);
        }
     
        // ETAPE 04.01 : Liste de GETTERS (= Accéder à un attribut : l'accesseur ou getter)
        public function id() { return $this->_id; }
        public function nom() { return $this->_nom; }
        public function dateDernierCoup() { return $this->_dateDernierCoup; }
        public function dateDerniereConnexion() { return $this->_dateDerniereConnexion; }
        public function tomorrow() { return $this->_tomorrow; }
     
     
       // ETAPE 04.02 : Liste des SETTERS (= Modifier la valeur d'un attribut : les mutateurs ou Setters)
     
        public function setId($id)
        {
            $id = (int) $id;
     
            // Verifier que "$id" est SUPERIEUR A 0
            if ($id > 0)
            {
                $this->_id = $id;
            }
        }
     
        public function setNom($nom)
        {
            // Verifier que "$nom" est une chaîne de caractères 
            if (is_string($nom))
            {
                $this->_nom = $nom;
            }
        }
     
     
        public function setDateDernierCoup($dateDernierCoup)
        {
            // DEFINITION :
            // * " DateTime::createFromFormat " (= code PHP pour le style POO)
            // * Analyse une heure au format texte selon le format spécifié.
            $dateDernierCoup = DateTime::createFromFormat("Y-m-d H:i:s", $dateDernierCoup);
     
            $this->_dateDernierCoup = $dateDernierCoup;
        }
     
        public function setDateDerniereConnexion($dateDerniereConnexion)
        {
            // DEFINITION :
            // * " DateTime::createFromFormat " (= code PHP pour le style POO)
            // * Analyse une heure au format texte selon le format spécifié. 
            $dateDerniereConnexion = DateTime::createFromFormat("Y-m-d H:i:s", $dateDerniereConnexion);
     
            $this->_dateDerniereConnexion = $dateDerniereConnexion;
     
        }
     
        public function setTomorrow($tomorrow)
        {
            // DEFINITION :
            // * " DateTime::createFromFormat " (= code PHP pour le style POO)
            // * Analyse une heure au format texte selon le format spécifié.
            $tomorrow = DateTime::createFromFormat("Y-m-d H:i:s", $tomorrow);
     
            $this->_tomorrow = $tomorrow;
        }
     
    }

  6. #6
    Membre averti
    Homme Profil pro
    Débutant Développeur Web
    Inscrit en
    Décembre 2018
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Débutant Développeur Web

    Informations forums :
    Inscription : Décembre 2018
    Messages : 31
    Par défaut
    Citation Envoyé par MaitrePylos Voir le message
    Bonjour,
    Content que @Celira vous ai donné une solution.
    Je vais être plus exhaustif afin de répondre à votre question par rapport à votre db et au titre de ce post pour les recherches futur.

    Votre moteur de base de données est soit MySQL soit MariaDB, je le sais grâce au print screen de phpMyAdmin

    Sinon, pour la date vous auriez pu créer un alias dans votre requête SQL


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     $q = $this->_db->query('SELECT id, nom, dateDernierCoup, dateDerniereConnexion,DATE_ADD(dateDerniereConnexion, INTERVAL 1 DAY) AS tomorrow  FROM comparerdates WHERE id = '.$info);
    Et modifier votre classe personnage comme ceci :

    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
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
     
    <?php
    // PREMIERE ETAPE : Creer la class Personnage avec ses Attributs prives et ses Methodes
    class Personnage
    {
        // ETAPE 01 : Attributs Prives (= Caracteristiques) de Objet Personnage
        private $_id,
                $_nom, 
                $_dateDernierCoup,
                $_dateDerniereConnexion;
                $_tomorrow
     
        // ETAPE 03 : Constantes
     
        // ETAPE 06 : Le Constructeur
        public function __construct(array $donnees)
        {
            $this->hydrate($donnees);
        }
     
     
        // ETAPE 05 : HYDRATER les Objets
        public function hydrate(array $donnees)
        {
            foreach ($donnees as $key => $value)
            {
                $method = 'set'.ucfirst($key);
     
                if (method_exists($this, $method))
                {
                    $this->$method($value);
                }
            } // FIN DE "foreach ($donnees as $key => $value)"
        }
     
     
        // ETAPE 02 : Methodes (= Fonctionnalites) Publics de Objet Personnage
        public function nomValide()
        {
            return !empty($this->_nom);
        }
     
        // ETAPE 04.01 : Liste de GETTERS (= Accéder à un attribut : l'accesseur ou getter)
        public function id() { return $this->_id; }
        public function nom() { return $this->_nom; }
        public function dateDernierCoup() { return $this->_dateDernierCoup; }
        public function dateDerniereConnexion() { return $this->_dateDerniereConnexion; }
        public function tomorrow() { return $this->_tomorrow; }
     
     
       // ETAPE 04.02 : Liste des SETTERS (= Modifier la valeur d'un attribut : les mutateurs ou Setters)
     
        public function setId($id)
        {
            $id = (int) $id;
     
            // Verifier que "$id" est SUPERIEUR A 0
            if ($id > 0)
            {
                $this->_id = $id;
            }
        }
     
        public function setNom($nom)
        {
            // Verifier que "$nom" est une chaîne de caractères 
            if (is_string($nom))
            {
                $this->_nom = $nom;
            }
        }
     
     
        public function setDateDernierCoup($dateDernierCoup)
        {
            // DEFINITION :
            // * " DateTime::createFromFormat " (= code PHP pour le style POO)
            // * Analyse une heure au format texte selon le format spécifié.
            $dateDernierCoup = DateTime::createFromFormat("Y-m-d H:i:s", $dateDernierCoup);
     
            $this->_dateDernierCoup = $dateDernierCoup;
        }
     
        public function setDateDerniereConnexion($dateDerniereConnexion)
        {
            // DEFINITION :
            // * " DateTime::createFromFormat " (= code PHP pour le style POO)
            // * Analyse une heure au format texte selon le format spécifié. 
            $dateDerniereConnexion = DateTime::createFromFormat("Y-m-d H:i:s", $dateDerniereConnexion);
     
            $this->_dateDerniereConnexion = $dateDerniereConnexion;
     
        }
     
        public function setTomorrow($tomorrow)
        {
            // DEFINITION :
            // * " DateTime::createFromFormat " (= code PHP pour le style POO)
            // * Analyse une heure au format texte selon le format spécifié.
            $tomorrow = DateTime::createFromFormat("Y-m-d H:i:s", $tomorrow);
     
            $this->_tomorrow = $tomorrow;
        }
     
    }
    Bonjour,
    Merci pour l'aide que vous me donniez et pour cette explication concrete avec un code tirée de la BDD.
    Cela me fait voir une autre façon de coder et manipuler les dates avec la POO via la BDD.

    PS : j'ai mis un post sur mes raisons d'avoir posté sur la gestion de dates.
    AUSSI, je vous mettrai, un peu tard, différents scripts de code,
    que j'avais trouvé sur le forum ,
    qui ont deux façons différentes de coder pour obtenir le même résultat.

    Et je voulais avoir des exemples concrets sur la manipulation des dates à partir de la BDD en utilisant les fonctions comme modify(), diff(), add() etc...
    La, où la doc PHP ne mettait que des exemples avec des 'strings' et non avec une BDD avec la POO.

    Merci encore pour cet exemple concret utilisant la BDD en POO

  7. #7
    Membre averti
    Homme Profil pro
    Débutant Développeur Web
    Inscrit en
    Décembre 2018
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Débutant Développeur Web

    Informations forums :
    Inscription : Décembre 2018
    Messages : 31
    Par défaut
    Citation Envoyé par MaitrePylos Voir le message
    Bonjour,
    Content que @Celira vous ai donné une solution.
    Je vais être plus exhaustif afin de répondre à votre question par rapport à votre db et au titre de ce post pour les recherches futur.

    Votre moteur de base de données est soit MySQL soit MariaDB, je le sais grâce au print screen de phpMyAdmin

    Sinon, pour la date vous auriez pu créer un alias dans votre requête SQL


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     $q = $this->_db->query('SELECT id, nom, dateDernierCoup, dateDerniereConnexion,DATE_ADD(dateDerniereConnexion, INTERVAL 1 DAY) AS tomorrow  FROM comparerdates WHERE id = '.$info);
    Et modifier votre classe personnage comme ceci :

    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
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
     
    <?php
    // PREMIERE ETAPE : Creer la class Personnage avec ses Attributs prives et ses Methodes
    class Personnage
    {
        // ETAPE 01 : Attributs Prives (= Caracteristiques) de Objet Personnage
        private $_id,
                $_nom, 
                $_dateDernierCoup,
                $_dateDerniereConnexion;
                $_tomorrow
     
        // ETAPE 03 : Constantes
     
        // ETAPE 06 : Le Constructeur
        public function __construct(array $donnees)
        {
            $this->hydrate($donnees);
        }
     
     
        // ETAPE 05 : HYDRATER les Objets
        public function hydrate(array $donnees)
        {
            foreach ($donnees as $key => $value)
            {
                $method = 'set'.ucfirst($key);
     
                if (method_exists($this, $method))
                {
                    $this->$method($value);
                }
            } // FIN DE "foreach ($donnees as $key => $value)"
        }
     
     
        // ETAPE 02 : Methodes (= Fonctionnalites) Publics de Objet Personnage
        public function nomValide()
        {
            return !empty($this->_nom);
        }
     
        // ETAPE 04.01 : Liste de GETTERS (= Accéder à un attribut : l'accesseur ou getter)
        public function id() { return $this->_id; }
        public function nom() { return $this->_nom; }
        public function dateDernierCoup() { return $this->_dateDernierCoup; }
        public function dateDerniereConnexion() { return $this->_dateDerniereConnexion; }
        public function tomorrow() { return $this->_tomorrow; }
     
     
       // ETAPE 04.02 : Liste des SETTERS (= Modifier la valeur d'un attribut : les mutateurs ou Setters)
     
        public function setId($id)
        {
            $id = (int) $id;
     
            // Verifier que "$id" est SUPERIEUR A 0
            if ($id > 0)
            {
                $this->_id = $id;
            }
        }
     
        public function setNom($nom)
        {
            // Verifier que "$nom" est une chaîne de caractères 
            if (is_string($nom))
            {
                $this->_nom = $nom;
            }
        }
     
     
        public function setDateDernierCoup($dateDernierCoup)
        {
            // DEFINITION :
            // * " DateTime::createFromFormat " (= code PHP pour le style POO)
            // * Analyse une heure au format texte selon le format spécifié.
            $dateDernierCoup = DateTime::createFromFormat("Y-m-d H:i:s", $dateDernierCoup);
     
            $this->_dateDernierCoup = $dateDernierCoup;
        }
     
        public function setDateDerniereConnexion($dateDerniereConnexion)
        {
            // DEFINITION :
            // * " DateTime::createFromFormat " (= code PHP pour le style POO)
            // * Analyse une heure au format texte selon le format spécifié. 
            $dateDerniereConnexion = DateTime::createFromFormat("Y-m-d H:i:s", $dateDerniereConnexion);
     
            $this->_dateDerniereConnexion = $dateDerniereConnexion;
     
        }
     
        public function setTomorrow($tomorrow)
        {
            // DEFINITION :
            // * " DateTime::createFromFormat " (= code PHP pour le style POO)
            // * Analyse une heure au format texte selon le format spécifié.
            $tomorrow = DateTime::createFromFormat("Y-m-d H:i:s", $tomorrow);
     
            $this->_tomorrow = $tomorrow;
        }
     
    }
    Re-Bonjour, MaitrePylos,
    Je voudrais savoir si il faut aussi modifier le "INSERT INTO avec son hydrate" et le "UPDATE" de mon fichier "PersonnagesManager" :
    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
     
        public function add(Personnage $perso)
        {
            // Préparation de la requête d'insertion.
            $q = $this->_db->prepare('INSERT INTO comparerdates(nom, dateDernierCoup, dateDerniereConnexion) VALUES(:nom, NOW(), NOW())');
            // Assignation des valeurs pour le nom du personnage.
            $q->bindValue(':nom', $perso->nom());
            // Exécution de la requête.
            $q->execute();
     
            $now = new DateTime('NOW');
     
            // Hydratation du personnage passé en paramètre 
            // * avec assignation des Attributs Privés de la class "Personnage"
            // * ( de son identifiant, des dégâts initiaux (= 0), etc...)
            $perso->hydrate([
                'id' => $this->_db->lastInsertId(),
                // format('d-m-Y à H: i: s')
                //'dateDernierCoup' => '0000-00-00 00:00:00',
                'dateDernierCoup' => $now->format('Y-m-d H:i:s'),
                //'dateDerniereConnexion' => '0000-00-00 00:00:00',
                //'dateDerniereConnexion' => $now->format('d-m-Y H:i:s'), 
                'dateDerniereConnexion' => date('Y-m-d H:i:s'),
                //'tomorrow' => '0000-00-00 00:00:00',
            ]); 
        }
    avec quel format de code pour 'tomorrow' :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    $now = new DateTime('NOW');
    'tomorrow' => $now->format('d-m-Y H:i:s'), 
    // OU
    'tomorrow' => date('Y-m-d H:i:s'),
    // OU
    'tomorrow' => '0000-00-00 00:00:00',
    ET la fonction "UPDATE" du fichier "PersonnagesManager" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    public function update(Personnage $perso)
    {
            // Prépare une requête de type UPDATE.
            $q = $this->_db->prepare('UPDATE comparerdates SET dateDernierCoup = :dateDernierCoup, dateDerniereConnexion = :dateDerniereConnexion WHERE id = :id');
     
            // Assignation des valeurs à la requête.
            $q->bindValue(':id', $perso->id(), PDO::PARAM_INT);
            $q->bindValue(':dateDernierCoup', $perso->dateDernierCoup()->format('Y/m/d H:i:s'), PDO::PARAM_STR);
            $q->bindValue(':dateDerniereConnexion', $perso->dateDerniereConnexion());//->format('Y/m/d H:i:s'), PDO::PARAM_STR);
     
            // Exécution de la requête.
            $q->execute();
        }
    Dans les fonctions ci-dessus, add() ET update(), vous verrez que j'ai fait des différents tests sur le format de date.

  8. #8
    Membre averti
    Homme Profil pro
    Débutant Développeur Web
    Inscrit en
    Décembre 2018
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Débutant Développeur Web

    Informations forums :
    Inscription : Décembre 2018
    Messages : 31
    Par défaut
    Bonjour, Bonsoir,

    Je vous écris sur la raison de la publication de ce post.

    J'ai écrit ce post CAR je voulais savoir SI il y avait une autre façon de coder en PHP AVEC LA POO sur les dates tirées d'une BDD.
    Dans d'autres forums, la réponse fut "Regarde la doc PHP sur la fonction XXX (= XXX étant, par exemple, modify() , add() , diff() ) "

    Le problème de la doc PHP est que leurs exemples sont "simples".
    Exemples de quelques fonction PHP avec leurs exemples "simples" sur les dates :
    Nom : CaptureMiniJeuCombat15.JPG
Affichages : 575
Taille : 25,2 KoNom : CaptureMiniJeuCombat16.JPG
Affichages : 646
Taille : 26,8 Ko

    Et dans un cours sur la gestion de dates,
    il y a que des exemples "simples".

    Quand je dis "Exemples simples" je me rapporte à ce genre d'exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    $dateHasard = new DateTime('20-05-2005 10:10:20');
    echo $dateHasard->format('d-m-Y à H:i:s') . "<br>";
    // Modifier la variable $dateTo
    $dateHasard->modify('-2 day -1 month'); 
    echo $dateHasard->format('d-m-Y à H:i:s') . "<br>";
    Où , à l'intérieur de new DateTime, c'est de la forme 'string' et non, de ce genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    // PARTIE "dernierCoup"
    $dc = $perso->dateDernierCoup()->format('d/m/Y à H:i:s'); 
    // OU $dc = $perso->dateDernierCoup();
    // Creation de Nouveau Objet DATETIME
     $dateDerCoup = new DateTime($dc);
    // Ajout d'une periode de 1Jour
    $dateDerCoup->add(new DateInterval('P1D'));
    Où, la, bien sur, ce code affichera une "Fatal error".

    Voila, Voila pour mes raisons


    DONC, oui, pour la doc PHP mais il faudrait des exemples avec l'utilisation d'une BDD ce qui,
    en plus, je pense, qu''en entreprise comme en Freelance, on se basera PLUS A PARTIR d'une BDD
    pour faire les différentes manipulations sur les dates tirées de la BDD
    qu'un SIMPLE STRING du genre '20-05-2020'
    surtout si c'est en utilisant la POO de PHP

    C'est ce que je me pense. Bien sur, je peux avoir faux mais je sens que ça va étre, comme je l'ai dit, en tirant et en manipulant les données de la BDD.

    Je mettrai plus tard, différents script de codes qui fonctionnent que j'ai vu et testé sur la manipulation des dates
    basé sur le TP mini jeu de combat du cours sur la POO en PHP, que j'ai aussi fait
    ET QUE j'ai fait des tests en prenant certains morceaux de code de ces différents codes en les mélangeant par ci par la, pour voir ce que j'obtendrais.

    Merci de votre compréhension et merci de votre aide.

    Si je pouvais avoir des exemples concrets sur l'utilisation de certaines fonctions qui manipulent les dates tirées de la BDD alors je suis prenant.
    Comme ça, je saurai plus tard, après avoir fini ma formation, comment BIEN manipuler les dates en PHP.

    Bien sur, il y avait la doc SQL sur la manipulation dees dates comme :
    https://dev.mysql.com/doc/refman/8.0...ction_date-add
    OU
    https://www.w3schools.com/sql/func_mysql_date_add.asp

    Mais je voulais faire en appliquant le PHP AVEC LA POO comme le cours sur la POO que je suis en train de suivre qui est assez dur pour les débutants comme moi.

    Bon, désolé, si ce fut long comme message avec un peu de "life"

  9. #9
    Membre averti
    Homme Profil pro
    Débutant Développeur Web
    Inscrit en
    Décembre 2018
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Débutant Développeur Web

    Informations forums :
    Inscription : Décembre 2018
    Messages : 31
    Par défaut
    Citation Envoyé par MaitrePylos Voir le message
    Bonjour,

    Quelle moteur de base de données ?
    Où, à quelle endroit, pendant quel select ?
    Bonjour, pour votre question demoteur de base de données, euh, je repondrai que je suis en serveur local.

    + Voici une image de ma BDD :
    Nom : CaptureMiniJeuCombat13.JPG
Affichages : 518
Taille : 81,9 Ko

    Et voici un morceau de code du fichier "PersonnagesManager" avec le mot-clé "SELECT" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
        public function get($info)
        { 
            // Si le paramètre est un entier, on veut récupérer le personnage avec son identifiant.
            if (is_int($info))
            // Exécute une requête de type SELECT avec une clause WHERE, et retourne un objet Personnage.
            {
                $q = $this->_db->query('SELECT id, nom, dateDernierCoup, dateDerniereConnexion FROM comparerdates WHERE id = '.$info);
                // PDO::FETCH_ASSOC retourne un tableau indexé par le nom de la colonne
                // comme retourné dans la Table "ppersonnagessevolu"
                $donnees = $q->fetch(PDO::FETCH_ASSOC);
     
                return new Personnage($donnees);
            }
    Voila voila
    Euh, j'espère que je vous ai bien répondu à votre question sur le moteur de base de données.
    Désolé d'avance si ce n'est pas la bonne réponse à votre question

    Et merci d'avoir répondu SANS me donner un "regarde la doc PHP de la fonction XXX (= exemple : modify() )"
    CAR le problème de la doc PHP sur les fonctions sur les dates est que ce ne sont que des exemples "simples"
    ET PAS des exemples tirés à partir d'une BDD.


    D'où, mon appel d'aide sur le forum sur un exemple de gestion de dates (ajouter / soustraire, comparer avec diff etc...) AVEC l'utilisation d'une BDD.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] Comment récupérer des données de la date actuelle(jour/mois)
    Par Aiglichon dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 26/12/2012, 19h39
  2. Comment obtenir une chaine avec Date/heure ?
    Par Flow_75 dans le forum VBA Word
    Réponses: 4
    Dernier message: 05/05/2008, 16h18
  3. Comment obtenir un .ico avec un .bmp ou .jpeg ?
    Par tarbala dans le forum Imagerie
    Réponses: 11
    Dernier message: 23/08/2006, 18h17
  4. Réponses: 4
    Dernier message: 19/05/2006, 23h14
  5. Comment obtenir la différence entre deux dates ?
    Par jbat dans le forum Langage
    Réponses: 4
    Dernier message: 02/06/2005, 09h34

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