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

EDI, CMS, Outils, Scripts et API PHP Discussion :

[Calendrier] Anniversaire rappelé quelques jours avant


Sujet :

EDI, CMS, Outils, Scripts et API PHP

  1. #1
    Membre du Club
    Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Novembre 2007
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Novembre 2007
    Messages : 146
    Points : 48
    Points
    48
    Par défaut [Calendrier] Anniversaire rappelé quelques jours avant
    Bonsoir à tous,

    je gère un site, et j'aimerais pour mes membres mettre un système d'annonce d'anniversaire quelques jours avant le jours J.

    Seulement le soucis c'est que j'arrive jamais a géré les date en php.

    je pensais ajouté un champs dans ma table d'user avec leur date de naissance (ou pas si il choisissent de pas la fournir) et avec ma fonction clean_up qui est appelé tout les X temps sur mon site je mettrai ici la recherche des date qui correspond a X jours avant le jour J

    Mais comment testé si la date c'est bientot ou pas ?

    Car je pensais faire la date en int - XXX (ou XXX est un entier qui correspond a 4j par ex) et si ca vérifie cette condition bah je l'affiche en quelques sorte

    Mais sachant que je peu pas faire ca sur une date formaté, je sais pas trop comment faire.


    Merci de votre aide
    Rian

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    en mysql :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE date_add(champ_dateanniv, INTERVAL 5 day) = CURDATE()
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre du Club
    Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Novembre 2007
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Novembre 2007
    Messages : 146
    Points : 48
    Points
    48
    Par défaut
    merci de ta réponse

    Déjà je vois que c'est possible, ca me rassure.

    Donc ensuite, dans la table user, comment devra etre la date dans se cas la, et l'ajouté avec 3 liste déroulante c'est une bonne idée ? (une pour le jour, 1 pour le mois et l'autre pour l'année)

    pour ta ligne par contre je compends pas trop, je n'ai jamais vu une syntaxe comme ca, alors soit il manque le debut de la syntaxe, qui sans doute est logique pour un pro mais pas pour moi, sinon, je ne connais pas du tout

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    oui effectivement j'ai juste ecrit la fin

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT champ,que,tu,veux FROM user WHERE date_add(champ_dateanniv, INTERVAL 5 day) = CURDATE()
    ton champ anniversaire dans ta table user doit etre un champ DATE.
    la facon dont tu fais saisir la date a l'utilisateur est sans importance, tu peux effectivement opter pour 3 listes déroulantes.

    souviens toi juste que dans la requete, il faut recomposer la date au format AAAA-MM-DD
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre du Club
    Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Novembre 2007
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Novembre 2007
    Messages : 146
    Points : 48
    Points
    48
    Par défaut
    Merci missieur


    Je vais commencer à la coder.

    Le champ Année peut être facultatif au moins ?
    A mon avi oui, car si j'ai bien compris, ca check 5 jours avant donc l'année n'a aucun impact

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Le champ Année peut être facultatif au moins ?
    oups je viens de realiser que c'etait bidon ce que je t'ai ecris

    faisons comme ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $dateanniv = mktime(0,0,0, date('m'), date('d') + 5, date('Y'));
     
    $sql = "SELECT champ,que,tu,veux FROM user WHERE DAY(champanniversaire) = " . date('d', $dateanniv) . " AND MONTH(champanniversaire) = " . date('m', $datenniv);
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  7. #7
    Membre du Club
    Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Novembre 2007
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Novembre 2007
    Messages : 146
    Points : 48
    Points
    48
    Par défaut
    Voici ton code traduit a mon cas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $dateanniv = mktime(0,0,0, date('m'), date('d') + 5, date('Y'));
     
    $sql = "SELECT username FROM users WHERE DAY(birth) = " . date('d', $dateanniv) . " AND MONTH(birth) = " . date('m', $datenniv);


    EDIT : Je vire mon deuxième problème j'ai réussi à le réglé.
    PS : Tu a oublié un "a" à ta variable $datenniv ca ma fait tourné en bourique lol ^^


    Par contre ce que tu ma donner ca s'affichera qu'un jour, mais moi je veux l'afficher pendant les 5j (jusqu'à l'anniv quoi ^^)

    J'ai fait un truc qui n'a pas marché :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $dateannivplus = mktime(0,0,0, date('m'), date('d') + 5, date('Y'));
    $dateanniv = mktime(0,0,0, date('m'), date('d'), date('Y'));
     
     
    $sql = mysql_query("SELECT username FROM users WHERE DAY(birth) >= " . date('d', $dateanniv) . " AND DAY(birth) <= " . date('d', $dateannivplus) . " AND MONTH(birth) >= " . date('m', $dateanniv). " AND MONTH(birth) <= " . date('m', $dateannivplus));
    Normal quoi ^^

    Et je voulais faire un truc mais ca me parait vraiment porc et j'aime pas trop ...

    C'est testé ton truc mais avec des OR aussi avec 4 variables en plus, 1 pour le jour + 1 une deuxieme pour le jour + 2 etc ^^

    Gore non ?

  8. #8
    Membre du Club
    Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Novembre 2007
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Novembre 2007
    Messages : 146
    Points : 48
    Points
    48
    Par défaut
    J'ai trouvé comment encadré


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $y = date('Y');
     
     
    $sql =  mysql_query("SELECT username FROM users WHERE DATEDIFF(ADDDATE(birth, INTERVAL $y YEAR),CURDATE()) <= 5 AND DATEDIFF(ADDDATE(birth, INTERVAL $y YEAR),CURDATE()) >=0");
    Voila

    Mais j'en ai chi* a trouvé DATEDIFF ^^

    Au depart je faisait des calculs avec le timestamp ... La grosse galere

  9. #9
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Et tu es sur que ca fonctionne ca ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  10. #10
    Membre du Club
    Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Novembre 2007
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Novembre 2007
    Messages : 146
    Points : 48
    Points
    48
    Par défaut
    Bah écoute, j'ai fait des test, avec la date de 27/06 à 02/07 et ca s'affiche, et si je met 26/06 ou 03/07 ca ne s'affiche plus.

    Je pense que ca passe non ?

    Pour ma table j'ai fait

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ALTER TABLE `users` ADD `birth` date NOT NULL;
    Dans mon fichier a affiché les user j'ai mis :

    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
    $y = date('Y');
     
    $sql =  mysql_query("SELECT id,username,class FROM users WHERE DATEDIFF(ADDDATE(birth, INTERVAL $y YEAR),CURDATE()) <= 5 AND DATEDIFF(ADDDATE(birth, INTERVAL $y YEAR),CURDATE()) >=0");
     
    while ($anniv = mysql_fetch_array($sql))
    	{
            switch($anniv[2]){
            case 1:
                $color = "#660066";// user
                break;
            case 2:
                $color = "#FF6666";// power user
                break;
            case 3:
                $color = "#FF00FF";// RTGirls
                break;
            case 4:
                $color = "#0099FF";// Uploader
                break;
            case 5:
                $color = "#996600";//PowerUploader
                break;
            case 11:
                $color = "#FF9933";//VIP
                break;
            case 12:
                $color = "#575045";// Graphiste
                break;
    		case 13:
                $color = "#3300FF";// Moderator
                break;
    		case 14:
                $color = "#A83838";// SModo
                break;
    		case 15:
                $color = "#00CC33";// Rian
                break;
    		case 16:
                $color = "#ff0000";// Admin
                break;
            }
    	echo "<b><a href=account-details.php?id=$anniv[0]><font color=$color>$anniv[1]</font></a></b>, ";
    	}
    Et pour la page account (pour edit ses options)

    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
    $jsql = mysql_query("SELECT DAYOFMONTH(birth) FROM users WHERE id=$CURUSER[id]") or die;
        $jsql2 = mysql_fetch_array($jsql);
        $j = $jsql2[0];
     
        $msql = mysql_query("SELECT MONTH(birth) FROM users WHERE id=$CURUSER[id]") or die;
        $msql2 = mysql_fetch_array($msql);
        $m = $msql2[0];
     
     
        /* Anniversaire */
        $day = "<option value=00></option>";
        for($i=1;$i < 32;$i++)
         {
               $day .= sprintf("<option value=%02d" . ($j == $i ? " selected" : "") . ">$i</option>\n", $i);
         }
    $mon = "<option value=00></option>";
        for($i=1;$i < 13;$i++)
         {
               $mon .= sprintf("<option value=%02d" . ($m == $i ? " selected" : "") . ">$i</option>\n",$i);
         }
     
             print("<TR><TD align=right class=table_col1><B>Date de Naissance:</B> </TD><TD align=left class=table_col1>Jour: <select name=day>
    $day</select>  Mois: <select name=month>$mon</select></td></tr>");
     
        /*Fin Anniversaire */
    Et quand je clique sur submit :

    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
    $jour = $_POST["day"];
    $mois = $_POST["month"];
            $jsql = mysql_query("SELECT DAYOFMONTH(birth) FROM users WHERE id=$CURUSER[id]") or die;
            $jsql2 = mysql_fetch_array($jsql);
            $j = $jsql2[0];
     
     
     
            $msql = mysql_query("SELECT MONTH(birth) FROM users WHERE id=$CURUSER[id]") or die;
            $msql2 = mysql_fetch_array($msql);
            $m = $msql2[0];
     
            if ($jour != $j) {
                if ($mois != $m)
                    $date = "0000-".$mois."-".$jour."";
                else
                    $date = "0000-".$m."-".$jour."";
            }
     
            if ($jour == $j) {
                if ($mois != $m)
                    $date = "0000-".$mois."-".$j."";
                else
                    $date = "0000-".$m."-".$j."";
            }
     
            $test = mysql_query("UPDATE users SET birth='$date' WHERE id=$CURUSER[id]");

    Pourquoi tu demande ca ? Car tu a testé et ca ne marche pas ?

  11. #11
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Je suis peut etre fatigué mais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DATEDIFF(ADDDATE(birth, INTERVAL $y YEAR),CURDATE()) <= 5
    Si j'ajoute 2009 années à ma date de naissance et que je lui soustrait 2009, a moins d'etre contemporain de Jesus, je n'obtiens pas 5 jours.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  12. #12
    Membre du Club
    Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Novembre 2007
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Novembre 2007
    Messages : 146
    Points : 48
    Points
    48
    Par défaut
    En faite, mes dates sont 0000-XX-YY

    Je ne touche pas à l'année, car ca va posé des soucis ^^

    Le mieux est de laissé par defaut 0000 et chaque année on fait les teste avec le $y que j'ai ajouté

  13. #13
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    hou le vilain tricheur

    Et quand tu voudrais afficher "Dans 5 jours c'est l'anniversaire de toto23, il va avoir 12 ans" ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  14. #14
    Membre du Club
    Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Novembre 2007
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Novembre 2007
    Messages : 146
    Points : 48
    Points
    48
    Par défaut
    La je l'aurai dans le baba

    Ou alors, il faudra que je trouve comment faire avec le timestamp

    Au depart j'avais fait UNIX_TIMESTAMP(birth)-UNIX_TIMESTAMP(CURDATE) <= (3600*24*5)

    Mais ca marché pas, mais en t'écrivant maintenant la tout de suite je viens de comprendre pourquoi ca marché pas. Car mon année été 0000 :/

    Tu m'étonne que ca marchait pas, pfiou la poisse, voila pourquoi j'ai passé la majeur partie de mon aprem a essayé plein de truc xD

    Bon, je vais essayé ca demain

    La dodo

  15. #15
    Membre du Club
    Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Novembre 2007
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Novembre 2007
    Messages : 146
    Points : 48
    Points
    48
    Par défaut
    Bon en y reflechissant, ca sera assez complexe.

    J'ai pensé a faire :

    Si la date est 0000 alors je fait comme maintenant, sinon si la date est différent de 0000, alors je l'extrait, la stock, et remet 0000 pour faire comment avant, et puisque j'ai stocké la vrai date, je m'en sert pour donner l'age.


    Non ?

Discussions similaires

  1. calendrier avec quelques jours inaccessible
    Par kika10 dans le forum Composants VCL
    Réponses: 3
    Dernier message: 04/10/2010, 13h24
  2. Colorer quelques jours du calendrier
    Par kika10 dans le forum Composants VCL
    Réponses: 5
    Dernier message: 30/08/2010, 16h54
  3. [TOMCAT] Tomcat ne répond pas au bout de quelques jours
    Par Bartuk dans le forum Tomcat et TomEE
    Réponses: 7
    Dernier message: 02/03/2006, 17h38
  4. [Date] Obtenir automatiquement jour avant et après
    Par Didier69 dans le forum Collection et Stream
    Réponses: 7
    Dernier message: 18/01/2006, 09h42
  5. [Date] Récuperer la date de 7 jours avant
    Par smy85 dans le forum Collection et Stream
    Réponses: 5
    Dernier message: 11/05/2004, 12h05

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