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

Langage PHP Discussion :

Afficher infos en fonction de la semaine


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2008
    Messages : 112
    Points : 48
    Points
    48
    Par défaut Afficher infos en fonction de la semaine
    Bonjour,

    Je bloque sur un script, il s'agit de menus de la semaine, stockés en base de donnée et qu'il faudrait afficher en fonction de la semaine en cours. Le souci étant qu'il y a 4 menus (pour 4 semaines) et qu'à la semaine 5 on affiche celui de la semaine 1 et ainsi de suite...

    J'utilise la fonction date("W"), pour connaitre la semaine en cours (semaine actuelle la 24, mais ensuite comment gérer les conditions ?

    semaine 24 -> afficher menu 1
    semaine 25 -> afficher menu 2
    semaine 26 -> afficher menu 3
    semaine 27 -> afficher menu 4
    semaine 28 -> afficher menu 1
    semaine 29 -> afficher menu 2
    etc...

    Voici mon code, mais il ne fonctionne pas correctement, mon approche ne semble pas correcte (4 est de toute façon divisible par 2 du coup ça coince) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $semaine=date("W");	
     
    if($semaine % 4 == 0)
      echo 'Menu semaine 4';
    elseif($semaine % 3 == 0)
      echo 'Menu semaine 3';
    elseif($semaine % 2 == 0)
      echo 'Menu semaine 2';	
    else
      echo 'Menu semaine 1';
    Merci d'avance pour votre aide et meilleures salutations !

  2. #2
    Membre régulier
    Homme Profil pro
    Inscrit en
    Novembre 2010
    Messages
    273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 273
    Points : 73
    Points
    73
    Par défaut
    Tu peux pas faire un truc du genre (en partant du principe qu'il y a 52 semaines dans une année):

    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    for ($i = 1; $i <= 13 ; $i = $i +4) {
        $semaine[$i] = 1; // case 1 puis 5 puis 9... prendra la valeur 1
        $i++;    
        $semaine[$i] = 2; //case  2 puis 6 puis 10... prendra la valeur 2
        $i++;
        $semaine[$i] = 3; // case 3 puis 7 puis 11... prendra la valeur 3
        $i++;
        $semaine[$i] = 4; // case  4 puis 8 puis 12... prendra la valeur 4
     
    }
     
    $semaine_en_cours = date('W');
    echo "menu numéro ".$semaine[$semaine_en_cours];
    En gros initialise ton tableau pour l'année. Après suivant la semaine que tu es, tu fais appel à la case qui correspond...

    Je sais pas si mon code est clair?

  3. #3
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Salut,

    @Benduroy
    Ton code peut se résumer à ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $pos = array();
    for ($i = 1, $w = 0 ; $i < 54 ; ++$i)
    {
        $pos[$i] = (++$w === 5) ? $w = 1 : $w;
    }

  4. #4
    Membre régulier
    Homme Profil pro
    Inscrit en
    Novembre 2010
    Messages
    273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 273
    Points : 73
    Points
    73
    Par défaut
    En effet c'est pas con

  5. #5
    Membre habitué
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Transports

    Informations forums :
    Inscription : Février 2011
    Messages : 146
    Points : 172
    Points
    172
    Par défaut
    pour rester dans la logique de base :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $semaine=date("W");	
     
    if($semaine % 4 == 0)
      echo 'Menu semaine 4';
    elseif($semaine+1 % 4 == 0)
      echo 'Menu semaine 3';
    elseif($semaine+2 % 4 == 0)
      echo 'Menu semaine 2';	
    else
      echo 'Menu semaine 1';

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2008
    Messages : 112
    Points : 48
    Points
    48
    Par défaut
    Hello,

    Merci pour votre aide, j'ai testé vos deux solutions mais ça ne fonctionne pas.

    Pour celle de Benduroy
    J'ai une erreur :
    Warning: Cannot use a scalar value as an array in
    Et celle de Aurélien LEQUOY ne fonctionne simplement pas, les valeurs renvoyées ne correspondent pas...

    J'ai pensé sinon créer dans la base de donnée un champ avec le numéro de semaine et un autre avec une valeur qu'on incrémente de 1 à 4 et faire une condition en php avec un update a chaque nouvelle semaine si la semaine est différente de celle stockée en BD, mais ça me parait un peu lourd comme soluce, il me semble que ça doit être possible de faire qqch simplement en PHP non ??

  7. #7
    Membre confirmé Avatar de satenske
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2011
    Messages
    143
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 143
    Points : 477
    Points
    477
    Par défaut
    Si tu fais comme ça, est-ce que ça correspond à tes besoins ?

    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $semaine = date("W");	
     
    if($semaine % 4 == 0) { // Semaine 24 => Menu 1
        echo 'Menu semaine 1';
    } else if(($semaine-1) % 4 == 0) {  // Attention aux parenthèses…
        echo 'Menu semaine 2';
    } else if(($semaine-2) % 4 == 0) {
        echo 'Menu semaine 3';	
    } else {
        echo 'Menu semaine 4';
    }
    « Only wimps use tape backup: _real_ men just upload their important stuff on ftp, and let the rest of the world mirror it. » – Linus Torvalds

  8. #8
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Euh, je ne vois pas où tu coinces ?

    Fais comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $pos = array();
    for ($i = 1, $w = 0 ; $i < 54 ; ++$i)
    {
        $pos[$i] = (++$w === 5) ? $w = 1 : $w;
    }
     
    echo "Menu semaine {$pos[date('W')]}";

  9. #9
    Membre confirmé Avatar de satenske
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2011
    Messages
    143
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 143
    Points : 477
    Points
    477
    Par défaut
    Citation Envoyé par rawsrc Voir le message
    Euh, je ne vois pas où tu coinces ?

    Fais comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $pos = array();
    for ($i = 1, $w = 0 ; $i < 54 ; ++$i)
    {
        $pos[$i] = (++$w === 5) ? $w = 1 : $w;
    }
     
    echo "Menu semaine {$pos[date('W')]}";
    Je ne trouve pas que gérer le problème comme ceci soit une bonne idée. Effectivement ça marche.
    Sauf que ça demande de faire une boucle de 54 itérations et de remplir un tableau, alors qu'on en a pas du tout l'utilité (Les modulos, ça marche…)

    Je suis d'accord que ce n'est pas la peine de se prendre la nouille pour gagner 3 octets et 1ms, mais dans ce cas là, ça me parait tout aussi simple d'utiliser l'autre solution
    « Only wimps use tape backup: _real_ men just upload their important stuff on ftp, and let the rest of the world mirror it. » – Linus Torvalds

  10. #10
    Invité
    Invité(e)
    Par défaut
    bonjour,
    @link.80 : c'était presque ca !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    switch($semaine % 4){
    case 0:
      echo 'Menu semaine 4'; break;
    case 1:
      echo 'Menu semaine 1'; break;
    case 2:
      echo 'Menu semaine 2'; break;
    case 3:
      echo 'Menu semaine 3'; break;
    }
    Qu'on peut simplement résumer ici par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo 'Menu semaine '; echo (($semaine % 4)==0)? '4' : ($semaine % 4);
    L'astuce : on utilise la propriété "modulo" (X % Y) qui renvoie le reste de la division entière de X par Y
    Un exemple d'utilisation ici (pour une bonne compréhension du fonctionnement de modulo).

    N.B. switch/case remplace efficacement if/elseif.

    @rawsrc : est-il bien nécessaire d'utiliser un canon pour écraser une mouche
    Dernière modification par Invité ; 11/06/2013 à 09h13.

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2008
    Messages : 112
    Points : 48
    Points
    48
    Par défaut
    Un très grand merci jreaux62, c'est exactement ce que je cherchait, ça fonctionne parfaitement

    Sujet résolu, merci à tous pour votre aide et excellente journée !

  12. #12
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Bonjour,

    @satenske
    je suis d'accord, le modulo c'est mieux, mais j'ai voulu rester sur l'approche de Benduroy. Bon c'est pas la fin du monde non plus

    @jreaux62
    ton code final se résume à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo 'Menu semaine ', (($semaine % 4) ?: '4');

  13. #13
    Invité
    Invité(e)
    Par défaut
    @rawsrc :arghhhhhh !
    Un prince ! un seigneur ! le Maître de la concision : Sire Concision !!
    (à moi aussi, ça me la coupe...)

    Par contre, si je voyais ton code pour la 1ère fois, il me faudrait sans doute 3 jours pour (peut-être) le comprendre...

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

Discussions similaires

  1. [MySQL] Afficher tableau en fonction de semaine/jour
    Par Ankh2 dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 19/03/2013, 05h05
  2. Réponses: 2
    Dernier message: 04/10/2006, 17h12
  3. Réponses: 1
    Dernier message: 18/07/2006, 23h38
  4. [SGBD] afficher infos issues de php/mysql dans html
    Par php_de_travers dans le forum Requêtes
    Réponses: 11
    Dernier message: 22/10/2005, 00h28
  5. affiche résultat en fonction du login windows
    Par bichonjp dans le forum ASP
    Réponses: 4
    Dernier message: 18/08/2005, 16h04

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