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 :

[PHP/SQL] Annee , Mois , Jour courant


Sujet :

PHP & Base de données

  1. #1
    Membre régulier
    [PHP/SQL] Annee , Mois , Jour courant
    Bonjour, j'ai une bdd qui contient des dates sous cette forme : 2019-06-27

    Voici mes variables :
    Code php :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
     
     
    $annee = date("Y");  // année courante
    $mois = date("m");  // mois courant
    $jourmois =date("j"); // jour du mois courant
    $premierjourmois = date('j',strtotime("first day of the month"));  // 1er jour du mois
     
    $deuxjourmois = $premierjourmois +1;
    $troisjourmois = $premierjourmois +2;
    $quatrejourmois = $premierjourmois +3;
    $cinqjourmois = $premierjourmois +4;
    $sixjourmois = $premierjourmois +5;
    $septjourmois = $premierjourmois +6;
    $huitjourmois = $premierjourmois +7;
    $neufjourmois = $premierjourmois +8;
    $dixjourmois = $premierjourmois +9;
    $onzejourmois = $premierjourmois +10;
    $douzejourmois = $premierjourmois +11;
    $treizejourmois = $premierjourmois +12;
    $quatorzejourmois = $premierjourmois +13;
    $quinzejourmois = $premierjourmois +14;
    $seizejourmois = $premierjourmois +15;
    $dixseptjourmois = $premierjourmois +16;
    $dixhuitjourmois = $premierjourmois +17;
    $dixneufjourmois = $premierjourmois +18;
    $vingtjourmois = $premierjourmois +19;
    $vingtunjourmois = $premierjourmois +20;
    $vingtdeuxjourmois = $premierjourmois +21;
    $vingttroisjourmois = $premierjourmois +22;
    $vingtquatrejourmois = $premierjourmois +23;
    $vingtcinqjourmois = $premierjourmois +24;
    $vingtsixjourmois = $premierjourmois +25;
    $vingtseptjourmois = $premierjourmois +26;
    $vingthuitjourmois = $premierjourmois +27;
    $vingtneufjourmois = $premierjourmois +28;
    $trentejourmois = $premierjourmois +29;
    $trenteunjourmois = $premierjourmois +30;


    Voici ma requête sql :
    Code php :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     
    $sql_qry="SELECT SUM(CAJOUR) AS count FROM copilotedatas.pfd WHERE date='$annee $mois $premierjourmois'"; // Jour 1 du mois
    $resultCA = $mysqli->query($sql_qry);
    while($record = $resultCA->fetch_array()){
        $CAJour1 = $record['count'];
    }
    $resultCA->close();



    date='$annee $mois $premierjourmois' ne fonctionne pas , comment faire pour que ca fonctionne ?
    “L’homme est la mesure de toute chose” Protagoras
    "Goutte après goutte l'eau finit par creuser le marbre"

    Pensez à mettre !
    Si un message vous a aidé , pensez à mettre !

    Mon Twitter
    Ma Veille Techno

  2. #2
    Modérateur

    Je sais pas bien à quoi servent toute ses variable incrémentées de 1 mais y'a plus intelligent ^^ ,

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    $dt = new DateTime('first day of this month');
    $sql_qry='SELECT SUM(CAJOUR) AS count FROM copilotedatas.pfd WHERE date="'.$dt->format('Y-m-d').'"'; // premier jour du mois en cours


    Ensuite si tu as besoin, tu modifie ta date.
    Ex pour ajouter un jour :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    $dt->add(new DateInterval('P1D'));
    $sql_qry='SELECT SUM(CAJOUR) AS count FROM copilotedatas.pfd WHERE date="'.$dt->format('Y-m-d').'"'; // deuxième jour
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Modérateur

    C'est clair que faire comme t'as fait, c'est direct l'échafaud
    Tu peux aussi tout extraire en une seule fois pour un mois et une année donnés et pour tous les jours de la période :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    $sql_qry = 'SELECT DAY(`date`) AS jour, SUM(CAJOUR) AS ca_jour FROM copilotedatas.pfd WHERE YEAR(`date`) = '.(int)$dt->format('Y').' AND MONTH(`date`) = '.(int)$dt->format('m').' GROUP BY jour ASC';


    N'oublie pas que le mot date est un mot réservé en SQL donc tu ne devrais jamais avoir une colonne avec cette appellation, si tu en as, tu dois obligatoirement utiliser les ``

  4. #4
    Membre régulier
    Citation Envoyé par grunk Voir le message
    Je sais pas bien à quoi servent toute ses variable incrémentées de 1 mais y'a plus intelligent ^^
    c'est mon tuteur qui ma dis de faire comme ça , il est informaticien , pas moi, donc je l'écoute et j'applique ^^

    2
    $dt->add(new DateInterval('P1D'));
    $sql_qry='SELECT SUM(CAJOUR) AS count FROM copilotedatas.pfd WHERE date="'.$dt->format('Y-m-d').'"'; // deuxième jour
    je comprend pas vraiment ta méthode , pourrait tu me dire ce que signifie P1D ?Pour avoir le 3ème jour je fais P2D ? Désolé de paraitre un peu bête , mais je débute .
    Et puis comment je récupère les données sachant que tu les met dans la même variable ?

    J'ai fais ça :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $dt = new DateTime('first day of this month');
    $sql_qry='SELECT SUM(CAJOUR) AS count FROM copilotedatas.pfd WHERE date="'.$dt->format('Y-m-d').'"'; // premier jour du mois en cours
     
     
     
    $dt->add(new DateInterval('P1D'));
    $sql_qry1='SELECT SUM(CAJOUR) AS count FROM copilotedatas.pfd WHERE date="'.$dt->format('Y-m-d').'"'; // deuxième jour


    J'obtient ça :


    BDD ( si ça peut aider ^^') :
    “L’homme est la mesure de toute chose” Protagoras
    "Goutte après goutte l'eau finit par creuser le marbre"

    Pensez à mettre !
    Si un message vous a aidé , pensez à mettre !

    Mon Twitter
    Ma Veille Techno

  5. #5
    Membre régulier
    N'oublie pas que le mot date est un mot réservé en SQL donc tu ne devrais jamais avoir une colonne avec cette appellation, si tu en as, tu dois obligatoirement utiliser les ``
    Merci pour l'info , mais c'est mon tuteur le créateur de la base de donnée , pas moi


    Tu peux aussi tout extraire en une seule fois pour un mois et une année donnés et pour tous les jours de la période :
    Non car je veux récupéré les données une/une pour ensuite les mettre dans un graphique , donc j'ai besoin de les avoirs chacuns dans une variable différentes
    “L’homme est la mesure de toute chose” Protagoras
    "Goutte après goutte l'eau finit par creuser le marbre"

    Pensez à mettre !
    Si un message vous a aidé , pensez à mettre !

    Mon Twitter
    Ma Veille Techno

  6. #6
    Modérateur

    Citation Envoyé par theocbr Voir le message
    c'est mon tuteur qui ma dis de faire comme ça , il est informaticien , pas moi, donc je l'écoute et j'applique ^^
    FAut qu'il envisage une reconversion alors

    Citation Envoyé par theocbr Voir le message

    je comprend pas vraiment ta méthode , pourrait tu me dire ce que signifie P1D ?Pour avoir le 3ème jour je fais P2D ? Désolé de paraitre un peu bête , mais je débute .
    P1D est une représentation d'interval de temps , tu trouveras l'explication ici : https://www.php.net/manual/fr/datein....construct.php
    P = periode
    1 = valeur
    D = day

    Donc effectivement si tu veux ajouter 2 jours à la date courante tu fais :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    $dt->add(new DateInterval('P2D'));


    Citation Envoyé par theocbr Voir le message

    Et puis comment je récupère les données sachant que tu les met dans la même variable ?
    J'ai utiliser la même variable pour l'exemple , après tu t'organise comme tu veux en fonction de ce que tu as besoin de faire.

    Non car je veux récupéré les données une/une pour ensuite les mettre dans un graphique , donc j'ai besoin de les avoirs chacuns dans une variable différentes
    Tu as surtout besoin d'un tableau.
    La proposition de rawsrc est la bonne. Tu fait une requêtes qui ramène toutes les données , tu les récupères dans un tableau et ensuite tu itère sur ce tableau pour récupérer chaque valeur une à une.

    Donc tu utilise datetime pour trouver le premier jour et le dernier jour du mois. Tu utilise ces deux dates dans le where de ta requete (indice , il faut utiliser la clausse BETWEEN) et tu récupère un tablea ude tout tes résultats.
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Membre régulier
    En plus de ne rien comprendre à cette méthode, elle ne fonctionne pas :c



    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    // on se connecte à notre base
    $mysqli = new mysqli("ip", "***", "***", "copilotedatas");
    /* V곩fication de la connexion */
        if ($mysqli->connect_errno) {
        printf("ʣhec de la connexion : %s\n", $mysqli->connect_error);
        exit();
        }
    $sql_qry = 'SELECT DAY(`date`) AS jour, SUM(CAJOUR) AS ca_jour FROM copilotedatas.pfd WHERE YEAR(`date`) = '.(int)$dt->format('Y').' AND MONTH(`date`) = '.(int)$dt->format('m').' GROUP BY jour ASC';
     
    ?>
    “L’homme est la mesure de toute chose” Protagoras
    "Goutte après goutte l'eau finit par creuser le marbre"

    Pensez à mettre !
    Si un message vous a aidé , pensez à mettre !

    Mon Twitter
    Ma Veille Techno

  8. #8
    Modérateur

    Faut faire un effort quand même

    Tu utilise une variable $dt sans l'initialiser ...

    Il manque un $dt = new DateTime(); quelque part avant ta requête
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  9. #9
    Inactif  
    +1 en général quand tu écris plusieurs fois le même fonctionnement de code tu devrais essayer de le factoriser, quitte à l'écrire une première fois comme tu le voulais et ensuite le réécrire, tu gagneras en maintenabilite