Fêter anniversaire en PHP

Résolu
cha7ri Messages postés 236 Statut Membre -  
cha7ri Messages postés 236 Statut Membre -
Bonjour,
je veux savoir comment peut on avoir une liste de mes adhérents qui vont fêter leurs anniversaire cette semaine à partir de leurs date de naissance, ....... y t il qlq un qui peut me donner un exemple qui illustre ce principe

merci d'avance

--
Il n'y a jamais de question bête, mais rester dans l'ignorance , ça c'est une erreur !
Configuration: Windows XP
Firefox 3.0.10

13 réponses

  1. Mins Messages postés 45 Statut Membre 9
     
    Si tu stockes les dates de naissances dans la DB avec les adhérents, tu peux utiliser between dans ta requète SQL.

    Un exemple plus précis. Tu stockes la date de naissance en tant que timestamp dans la DB

    Tu transformes la date du jour en timestamp.

    Tu fais un select sur la table avec la date de naissance entre le timestamp courant et le timestamp courant + 7 * 24 * 60 * 60

    ^^'

    Je suis très clair dans ma tête, mais je me demande si je vais me faire comprendre :)

    Min's
    1
  2. Mins Messages postés 45 Statut Membre 9
     
    Désolé, je passe, mais pas tous les quarts d'heure :)

    Quand je demandais une structure c'était avec les types de champs, mais on va faire avec :)

    $timestamp_today = mktime(0,0,0); // Aujourd'hui à Minuit
    $timestamp_in_a_week = $timestamp_today + ( 8 * 24 * 60 * 60) -1 //Le timestamp dans 8 jours - une seconde comme ça on reste dedans. 
    $query = "SELECT * FROM adherents WHERE date_naissance BETWEEN ".$timestamp_today." AND ".$timestamp_in_a_week." ORDER BY Nom";


    Par contre, si ta date de naissance est choisie à partir de selectboxes et que tu calcule le TS à minuit, tu peux juste faire un + (7*24*60*60) plutôt que (8*24*60*60)-1 ^^

    au cas ou ton champ date de naissance serait un varchar, il faut penser à mettre des ' ' en plus autour des timestamps

    $timestamp_today = mktime(0,0,0); // Aujourd'hui à Minuit
    $timestamp_in_a_week = $timestamp_today + ( 8 * 24 * 60 * 60) -1 //Le timestamp dans 8 jours - une seconde comme ça on reste dedans. 
    $query = "SELECT * FROM adherents WHERE date_naissance BETWEEN '".$timestamp_today."' AND '".$timestamp_in_a_week."' ORDER BY Nom";


    Ca "doit" marcher comme ça. Ou alors que quelqu'un me corrige :)
    1
  3. cha7ri Messages postés 236 Statut Membre 29
     
    le timestamp de la date de naissance serai tjrs inférieurs à la date d'aujourd'hui , le test [BETWEEN ".$timestamp_today." AND ".$timestamp_in_a_week." ORDER BY Nom"] sera toujours false
    puisque le timestamp désigne le nombre de secondes écoulées depuis le 1er janvier 1970......

    j'espére que je bien expliquer le probléme...........@+

    1
  4. Mins Messages postés 45 Statut Membre 9
     
    ARf... Crétin...

    J'y réfléchis, je te réponds d'ici quelques minutes... ^^'
    1
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. cha7ri Messages postés 236 Statut Membre 29
     
    ça marche pas........ même l'idée est erronée ,mais l'utilisation des timestamp est sur

    0
  7. Mins Messages postés 45 Statut Membre 9
     
    Euh... non, l'idée est correcte normalement, c'est toujours comme ça que j'ai fait.

    Donns plutôt alors la structure de ta base de données et je te donnerai la requête php/mysql qui te faudra.
    0
  8. cha7ri Messages postés 236 Statut Membre 29
     
    La structure de ma base est simple
    une table adhérent(Nom ,Prenom, Date_naissance)

    et merci........
    0
  9. cha7ri Messages postés 236 Statut Membre 29
     
    up please

    0
  10. cha7ri Messages postés 236 Statut Membre 29
     
    SVP

    0
  11. Mins Messages postés 45 Statut Membre 9
     
    Hum.

    Méthode inverse alors, mais si tu as 15000 utilisateurs ça va pas le faire.

    $today=mktime(0,0,0);
    $limit=$today + (7 * 24 * 60 * 60);
    $query="SELECT * FROM adherents ORDER BY date_naissance";
    $res=mysql_query($query);
    while ($row==mysql_fetch_assoc($res)) {
         $naiss=mktime(0,0,0,date("n", $row['date_naiss']), date('j', $row['date_naiss']));
         if (($naiss >= today) AND ($naiss <= $limit)) {
              //Il a sa date dans les temps
         }
    }


    Mais je suis pas convaincu et j'ai le cerveau en bouillie après la journée de boulot donc j'ai difficile de faire mieux......

    :$
    0
  12. cha7ri Messages postés 236 Statut Membre 29
     
    ok je t'attend

    0
  13. Mins Messages postés 45 Statut Membre 9
     
    Euh tu as essayé la méthode juste au dessus de ta réponse ? :)
    0
  14. cha7ri Messages postés 236 Statut Membre 29
     
    je crois que ça marcheras pas......mais j'ai trouvé une solution ........

    <?php
    $req = " SELECT prenom, nom,DATE_FORMAT(Date_naissance, '%e %b.') AS datef,
    (YEAR(CURRENT_DATE)-YEAR(Date_naissance)) - (RIGHT(CURRENT_DATE,5)<=RIGHT(Date_naissance,5)) +1 AS age,
    TO_DAYS(CONCAT(LEFT(CURRENT_DATE,5), RIGHT(Date_naissance, 5))) - TO_DAYS(CURRENT_DATE) AS diff,
    DATE_FORMAT(CONCAT('31-12-',YEAR(CURRENT_DATE)), '%j') AS nbj FROM adherents";
    $res = mysql_query($req, $connection) or die(mysql_error());
    $tab = mysql_fetch_assoc($res);
    $Rows_tab = mysql_num_rows($res);
    <?

    et dans le BODY:
    <table>
    <?php

    $n = 15; //nombre de jours de prévision
    $i=0;
    while($row = mysql_fetch_array($res)){
    if($row['diff']<0) $row['diff'] = $row['diff'] + $row['nbj'];
    if(($row['diff']<$n)&&($row['diff']>=0)){
    $tab[$i][0] = $row['diff'];
    $tab[$i]['nom'] = $row['prenom'];
    $tab[$i]['age'] = $row['age'];
    $tab[$i]['dans'] = $row['diff'];
    $tab[$i]['date'] = $row['datef'];
    ?>
    <tr>
    <td> <? echo $row['prenom'] ." aura "; ?></td>
    <td> <? echo $row['age']."ans dans"; ?></td>
    <td> <? echo $row['diff']; ?></td>
    <td> <? echo "jours (" .$row['datef'] .")" ;?></td>
    </tr>
    <?
    }
    $i++;
    }

    ?>

    </table>

    merci d'avance tu m'as en moin donner par quoi débuterai ma recherche.......thinks
    0