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 :

Utilisation de fonction


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    mai 2012
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : mai 2012
    Messages : 83
    Points : 63
    Points
    63
    Par défaut Utilisation de fonction
    Bonjour à tous,

    Je débute en php et étant plutôt habitué au C#/java j'ai du mal à comprendre la philosophie de ce langage...
    Partons d'un problème simple:

    Je souhaiterai afficher sur ma page web le mois, partant du mois en cours (jusque là j'y suis arrivé),
    puis ajouter 2 boutons qui me permettrons de changer de mois, dans un sens ou dans l'autre, avec donc pour contrainte que les mois vont de 1 à 12. Au delà il faudra changer aussi l'année.

    Je pense que c'est quelque chose de simple à réaliser, en tout cas ça l'est en C#, mais je ne comprends pas comment y parvenir en html/php...

    Je vous donne mon code actuel:

    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
    <?php
            $currentMonth = date("m");
            $selectedMonth = $currentMonth;
     
            function nextMonth()
            {
                if($selectedMonth < 12)
                {
                    $selectedMonth++;
                }
                else
                {
                    $selectedMonth = 1;
                }
                return $selectedMonth;
            }
     
            function prevMonth()
            {
                if($selectedMonth > 1)
                {
                    $selectedMonth--;
                }
                else
                {
                    $selectedMonth = 12;
                }
                return $selectedMonth;
            }
        ?>
     
        <div>
            <input type="button" class="buttonNextPrev" name="buttonPrevMonth" value="<" onclick="">
            <label class="LabelSelectedMonth"><?php echo $selectedMonth;?></label>
            <input type="button" class="buttonNextPrev" name="buttonNextMonth" value=">" onclick="">
        </div>

  2. #2
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    juin 2003
    Messages
    8 105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : juin 2003
    Messages : 8 105
    Points : 12 618
    Points
    12 618
    Par défaut
    pour commencer la base du web est qu'un URL donné présente toujours les même informations avec une requête GET.
    donc l'appel de votre page sera du genre "liste_evenements.php?mois=3&annee=2021"

    la 1re étape est de vérifier si les arguments d'entrée sont corrects, de la façon suivante par exemple
    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
    $mois_actuel = date("m");
    $annee_actuelle = date("Y");
     
     
    if (!isset($_GET["mois"])) { // si le mois n'est pas indiqué dans l'URL
    	$mois = $mois_actuel;
    } else {
    	$mois = floor($_GET["mois"]);
    }
     
    if (!isset($_GET["annee"])) { // si l'année n'est pas indiquée dans l'URL
    	$annee = $annee_actuelle;
    } else {
    	$annee = floor($_GET["annee"]);
    }
     
    // ici vous pouvez tester si le mois est entre 1 ou 12 s'il y a besoin
    les blocs "if" peuvent être compressés avec l'opérateur "??" :
    https://www.php.net/manual/fr/langua...rison.coalesce


    ensuite la 2e étape est de calculer les valeurs des mois suivants et précédents pour construire les liens "mois précédent" et "mois suivant".

  3. #3
    Membre du Club
    Homme Profil pro
    Inscrit en
    mai 2012
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : mai 2012
    Messages : 83
    Points : 63
    Points
    63
    Par défaut
    Merci, mais désolé je n'ai pas du tout compris votre réponse...

    J'ai peut être raté un épisode sur la conservation des variables ?
    Mais en tout cas dans l'URL de ma page je n'ai rien après le ".php".

    Mais ce qui m'intéresse surtout (Et si c'est lié alors j'ai raté quelque chose) c'est justement "l'étape 2", celle de l'appel des fonctions via l’évènement click sur un bouton.
    A l'heure actuelle, si je rajoute l'appel de mes fonctions dans le "onclick=", j'obtiens un message warning sur ma page comme quoi "selectedMonth" n'est pas déclarée. Et rien ne se passe a l'appuie sur mes boutons.

  4. #4
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    juin 2003
    Messages
    8 105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : juin 2003
    Messages : 8 105
    Points : 12 618
    Points
    12 618
    Par défaut
    Citation Envoyé par BartRoX Voir le message
    Mais en tout cas dans l'URL de ma page je n'ai rien après le ".php".
    ces paramètres dans l'url, c'est le point de départ avant même de commencer à écrire votre code.

  5. #5
    Membre du Club
    Homme Profil pro
    Inscrit en
    mai 2012
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : mai 2012
    Messages : 83
    Points : 63
    Points
    63
    Par défaut
    Sinon, quelqu'un pour m'aider à comprendre le php au travers de ce problème basique ?

  6. #6
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Architecte Web / Android
    Inscrit en
    août 2003
    Messages
    6 268
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Architecte Web / Android
    Secteur : Industrie

    Informations forums :
    Inscription : août 2003
    Messages : 6 268
    Points : 18 011
    Points
    18 011
    Par défaut
    Ton problème n'est pas réellement un problème de compréhension de PHP mais du web et de http.
    Php est très proche de java ou c# en terme de syntaxe et de fonctionnement , si tu es à l'aise dans ses langages tu n'auras pas de problème avec php.

    Pour ta problématique.
    Quand tu ajoute un bouton sur page html , tu ne peux pas le voir comme un bouton sur une UI C# ou JAVA avec le quel on peut déclencher un événement, sauf si tu code en javascript.

    Quand ta page html s'affiche , PHP à déjà fini de s'exécuter et plus aucune interaction n'est possible.
    Il faut donc réenvoyer une requête à PHP pour pouvoir faire quelque chose.

    Donc ademettons tu ouvre ta page "mois.php" Elle affiche 4
    Pour aller au mois suivant , il va falloir dire à PHP quel est le mois en cours et que tu veux aller au mois suivant. I lfaut donc un lien du type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <a href="http://monsite.com/mois.php?current=4&action=next"></a>
    Je rappel ici le script PHP avec 2 paramètres :
    current qui vaut 4 et correspond à mon mois en cours
    actionqui vaut "next" et qui indique ce que je veux faire.

    LE script PHP devras donc gérer ces 2 paramètres pour réaliser ce qu'on lui demande :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $current = $_GET['current'] ?? date("m"); // récup des paramètre si existant , sinon valeur par défaut
    $action = $_GET['action'] ?? null;
     
    if($action == 'next') {
    	nextMonth($current);
    } else if ($action == 'prev') {
    	prevMonth($current);
    } else {
    	currentMonth();
    }
    Et il faut ensuite mettre à jour les liens de navigation en fonction de ce qu'on recois de PHP.

    Un exemple complet basé sur ton code :

    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
    <?php
    $current = $_GET['current'] ?? date("m");
    $current = intval($current);
    $action = $_GET['action'] ?? null;
     
    if($action == 'next') {
    	$current = nextMonth($current);
    } else if ($action == 'prev') {
    	$current = prevMonth($current);
    }
     
    function nextMonth($selectedMonth)
    {
    	if($selectedMonth < 12)
    	{
    		$selectedMonth++;
    	}
    	else
    	{
    		$selectedMonth = 1;
    	}
    	return $selectedMonth;
    }
     
    function prevMonth($selectedMonth)
    {
    	if($selectedMonth > 1)
    	{
    		$selectedMonth--;
    	}
    	else
    	{
    		$selectedMonth = 12;
    	}
    	return $selectedMonth;
    }
        ?>
     
    <div>
    	<a href="?current=<?=$current?>&action=prev"> < </a>
    	<label class="LabelSelectedMonth"><?php echo $current;?></label>
    	<a href="?current=<?=$current?>&action=next"> > </a>
    </div>
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Membre du Club
    Homme Profil pro
    Inscrit en
    mai 2012
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : mai 2012
    Messages : 83
    Points : 63
    Points
    63
    Par défaut
    Merci beaucoup pour ta réponse,
    complété par quelques recherches de mon côté ça me permet déjà d'y voir plus clair.

    Néanmoins 2 choses:
    - Premièrement, il se passe effectivement quelque chose mais en l'état ce n'est pas fonctionnel:
    A l'ouverture de la page, j'ai le mois "4" qui s'affiche. Nous sommes en Avril, jusque là tout va bien.
    Maintenant si je clic sur "suivant", j'ai le mois "1" qui s'affiche... Et j'ai un Warning:
    Warning: Undefined variable $selectedMonth in MonFichier.php on line 12
    (J'ai réajuster avec le numéro de ligne avec le code fourni)
    Et par la suite même si j'appuie sur suivant rien ne se passe (pas surpris au vu de ce qu'il se passe)
    Ah, par contre je pense que tu as laissé mes fonctions tel quel mais tu as changé le nom de la variable au début (current), j'ai donc tout mis au même nom (selectedMonth).
    J'ai donc le code suivant:
    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
    <?php
    $selectedMonth = $_GET['selectedMonth '] ?? date("m");
    $selectedMonth = intval($selectedMonth );
    $action = $_GET['action'] ?? null;
     
    if($action == 'next') {
    	$selectedMonth = nextMonth($selectedMonth );
    } else if ($action == 'prev') {
    	$selectedMonth = prevMonth($selectedMonth );
    }
     
    function nextMonth($selectedMonth)
    {
    	if($selectedMonth < 12)
    	{
    		$selectedMonth++;
    	}
    	else
    	{
    		$selectedMonth = 1;
    	}
    	return $selectedMonth;
    }
     
    function prevMonth($selectedMonth)
    {
    	if($selectedMonth > 1)
    	{
    		$selectedMonth--;
    	}
    	else
    	{
    		$selectedMonth = 12;
    	}
    	return $selectedMonth;
    }
        ?>
     
    <div>
    	<a href="?selectedMonth =<?=$selectedMonth ?>&action=prev"> < </a>
    	<label class="LabelSelectedMonth"><?php echo $selectedMonth ;?></label>
    	<a href="?selectedMonth =<?=$selectedMonth ?>&action=next"> > </a>
    </div>
    - Deuxièmement, je souhaiterai utiliser des boutons (stylisés via CSS) et non un simple lien qui est très moche...
    Mais j'ai essayé de diverse façon d'inclure la partie "href" dans l’évènement "onclick" mais sans succès...
    Est-ce possible au moins ?

  8. #8
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Architecte Web / Android
    Inscrit en
    août 2003
    Messages
    6 268
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Architecte Web / Android
    Secteur : Industrie

    Informations forums :
    Inscription : août 2003
    Messages : 6 268
    Points : 18 011
    Points
    18 011
    Par défaut
    J'avais volontairement changé les noms de variables pour éviter les confusions selon le scope des variables.
    Le code donné en exemple fonctionne : https://phpsandbox.io/n/odd-base-r0pb-zfy6q (il peut être nécessaire d'actualiser la partie droite)

    Un lien href peut très bien avoir la forme d'un bouton , c'est juste du css.
    Si tu veux passer par un véritable bouton et un événement onclick , il va falloir gérer du javascript en plus , ce qui complexifie encore la chose :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    <button onclick="location.href='http://url.com'" type="button">Texte</button>
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  9. #9
    Responsable Systèmes


    Homme Profil pro
    Technicien maintenance
    Inscrit en
    août 2011
    Messages
    14 223
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : août 2011
    Messages : 14 223
    Points : 32 682
    Points
    32 682
    Par défaut
    J'ai peut être raté un épisode sur la conservation des variables ?
    Attention, en PHP les variables sont détruites à la fin d’exécution du script PHP. Si tu veux les conserver entre plusieurs scripts/fichiers PHP, il faut les copier dans la session. Tu devrais trouver des ressources sur la notion de session ici. Si on compare avec C#/Java, les sessions c'est un peu comme si tu sauvegarde/restaure tes variables dans un fichiers en les sérialisant. Par ailleurs, par défaut les variables ne sont pas typées comme dans les langages type C/Java (on peut maintenant le faire mais d'autres répondront mieux que moi, je suis pas spécialiste PHP). Ce sont des points qui peuvent te dérouter.

    PHP ne parle pas directement avec ton navigateur. PHP envoie du code HTML à ton navigateur, qu'il devra interpréter. Quand tu utilises un formulaire, les données sont soit transmises via GET, les données sont encodées dans le l'URL, Avec POST, ton script PHP lit les variables et les stocke dans un tableau spécial nommé $_GET ou $_POST selon le cas de figure. Tu affecteras ensuite la valeur de chaque entrée de ce tableau que tu souhaites utiliser à une variable (globale à ton script ou locale à ta fonction comme en C). Si tu veux faire persister ces variables, tu les copiera dans ta session. Pour utiliser une session il faudra lancer session_start() en début de script qui servira à créer une session ou à te connecter à une session existante (ça c'est un truc à comprendre dès le départ pour pas galérer).

    Vu que tu viens du monde Java, tu peux programme PHP en mode objet ou en procédural.

    Ensuite, Regardes Ajax que tu devras peut-être utiliser plus tard.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur la création d'un système : http://chrtophe.developpez.com/tutoriels/minisysteme/
    Mon article sur le P2V : http://chrtophe.developpez.com/tutoriels/p2v/
    Consultez nos FAQ : Windows, Linux, Virtualisation

  10. #10
    Membre du Club
    Homme Profil pro
    Inscrit en
    mai 2012
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : mai 2012
    Messages : 83
    Points : 63
    Points
    63
    Par défaut
    OK, faute d'inattention de ma part, je n'avais pas mis de paramètre d'entrée aux fonctions... Maintenant ça fonctionne, merci !
    (De base quand j'avais commencé à coder j'étais parti sur le principe de variable globale au fichier, comme je l'aurai fait en C#, donc pas besoin de paramètre d'entrée aux fonctions...)

    Pour le style aussi, j'ai effectivement pu styliser comme un bouton comme je voulais.

    Pour la conservation des variables c'est effectivement ce que j'avais vu dans les tutos.
    J'ai aussi vu les sessions dans les tutos, mais ne l'ayant encore jamais utilisé concrètement, ça reste encore quelque chose que je ne maitrise pas...
    Et j'en viens a ma question suivante: Maintenant que les mois s’incrémente et décrémente comme il faut, il me faut pouvoir changer l'année quand je passe au-delà de 1 ou 12.
    Or si les variables ne sont pas conservées, ce n'est pas possible de le faire aussi simplement qu'en C#, simplement en incrémentant (ou vice-versa) la variable de l'année dans mes fonctions actuelles, là où je check le débordement de 1 ou 12, et afficher ensuite cette variable. En PHP ce n'est donc pas possible, faut-il donc passer par les sessions ? Ou est-ce qu'il y a d'autre méthode plus simple (ou juste différente) pour le faire ?

  11. #11
    Responsable Systèmes


    Homme Profil pro
    Technicien maintenance
    Inscrit en
    août 2011
    Messages
    14 223
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : août 2011
    Messages : 14 223
    Points : 32 682
    Points
    32 682
    Par défaut
    Si tu connais les fonctions C, tu les retrouve en général en PHP. Faire attention, il y a quelque différences quelque fois avec les foncions C, bien voir la doc PHP (qui est bien faite). Si tu utilises mktime par exemple, tu pourras incrémenter/décrémenter le mois, la fonction calculera la date valide en conséquence.
    Pour la gestion de la date dans le formulaire, utilises <input type="date">, la valeur fixée par défaut (avec value="") doit l'être au format YYYY-MM-DD, l'affichage se fera selon la locale du navigateur.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur la création d'un système : http://chrtophe.developpez.com/tutoriels/minisysteme/
    Mon article sur le P2V : http://chrtophe.developpez.com/tutoriels/p2v/
    Consultez nos FAQ : Windows, Linux, Virtualisation

  12. #12
    Membre du Club
    Homme Profil pro
    Inscrit en
    mai 2012
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : mai 2012
    Messages : 83
    Points : 63
    Points
    63
    Par défaut
    Hum, j'ai du mal m'exprimer.
    J'affiche la date en texte, pour le moment de la manière suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <?php
    ...
            $selectedYear = date("Y");
    ...
    ?>
    <div>
    ...
        <label class="LabelDisplayedDate"><?php echo $selectedYear;?>/<?php echo $selectedMonth;?></label>
    </div>
    Ce qui m'affiche 2021/4 pour le moment.
    Mais si par exemple je décrémente de 4 mois, je dois me retrouver en 2020/12.
    Comment faire pour changer l'année ?

  13. #13
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    juin 2003
    Messages
    8 105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : juin 2003
    Messages : 8 105
    Points : 12 618
    Points
    12 618
    Par défaut
    Citation Envoyé par BartRoX Voir le message
    Mais si par exemple je décrémente de 4 mois, je dois me retrouver en 2020/12.
    Comment faire pour changer l'année ?
    c'est bien pour ça que chrtophe vous a proposé la fonction "mktime".
    cette fonction vous retournera un timestamp que vous utiliserez ensuite avec la fonction "date".

    si vous avez besoin de la documentation d'une fonction php, vous pouvez aller à l'adresse "php.net/ + nom de la fonction" -> http://php.net/mktime

  14. #14
    Membre du Club
    Homme Profil pro
    Inscrit en
    mai 2012
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : mai 2012
    Messages : 83
    Points : 63
    Points
    63
    Par défaut
    Fonction intéressante, mais j'ai beau chercher et essayer des trucs j'en reviens toujours au même problème:
    ma variable $selectedYear est mise à jour à l'ouverture de la page, donc elle prend la valeur 2021, mais ensuite elle n'est plus connue dans mes fonctions... Et quand bien même je bricole quelque chose dans mes fonctions pour modifier l’année la valeur ne sera pas modifiée dans mon label car il n'est pas remis à jour non plus...
    Encore une fois, j'ai du mal à comprendre la mécanique entre serveur et client pour appeler des fonctions afin d'effectuer mes algorithmes...


    Ou sinon avec le code suivant j'arrive à décrementer l’année d'un an quand je passe en Décembre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $selectedYear = date("Y");
     
    if($action == 'prev') 
    {
          $selectedMonth = prevMonth($selectedMonth);
          if($selectedMonth == 12)
          {
              $selectedYear = date("Y", mktime(0, 0, 0, 0, $selectedMonth, $selectedYear));
          }
    }
    Mais par contre si je re-clique une fois je repasse en 2021, puisque la variable est réinitialiser via la première ligne...

  15. #15
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    juin 2003
    Messages
    8 105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : juin 2003
    Messages : 8 105
    Points : 12 618
    Points
    12 618
    Par défaut
    relisez le code que vous ai montré plus haut, il permet de lire les paramètres passés à la page donc vous aurez les variables $mois et $annee pour le mois à afficher :
    https://www.developpez.net/forums/d2.../#post11706585

    au final, un script php appelé par le navigateur aura souvent cette forme (gardez les commentaires dans votre fichier pour bien structurer votre fichier)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <?php
    // 1 : lecture des paramètres et vérification de leur cohérence
     
     
     
    // 2 : calculs et préparation des données qui seront affichées
     
     
     
    // 3 : affichage du résultat en html

  16. #16
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Architecte Web / Android
    Inscrit en
    août 2003
    Messages
    6 268
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Architecte Web / Android
    Secteur : Industrie

    Informations forums :
    Inscription : août 2003
    Messages : 6 268
    Points : 18 011
    Points
    18 011
    Par défaut
    Au même titre que tu passe le mois en cours à ton script il faut aussi lui passer l'année.

    Ainsi tu peux gérer complètement la date et incrémenter/décrémenter les années si nécessaire.
    Le plus simple est même de passer par un objet Datetime qui va s'occuper pour toi de l'incrément/décrement des mois et année.

    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
    <?php
    $currentMonth = $_GET['month'] ?? date("m");
    $currentMonth = intval($currentMonth);
     
    $currentYear = $_GET['year'] ?? date("Y");
    $currentYear = intval($currentYear);
     
    $action = $_GET['action'] ?? null;
     
    if($action == 'next') {
    	list($currentMonth,$currentYear) = nextMonth($currentMonth,$currentYear);
    } else if ($action == 'prev') {
    	list($currentMonth,$currentYear) = prevMonth($currentMonth,$currentYear);
    }
     
    function nextMonth($selectedMonth,$selectedYear)
    {
    	$dt = new DateTime($selectedYear.'-'.$selectedMonth.'-01');
        $dt->add(new DateInterval('P1M'));
    	return [$dt->format('m'),$dt->format('Y')];
    }
     
    function prevMonth($selectedMonth,$selectedYear)
    {
    	$dt = new DateTime($selectedYear.'-'.$selectedMonth.'-01');
        $dt->sub(new DateInterval('P1M'));
    	return [$dt->format('m'),$dt->format('Y')];
    }
        ?>
     
    <div>
    	<a href="?month=<?=$currentMonth?>&year=<?=$currentYear?>&action=prev"> < </a>
    	<label class="LabelSelectedMonth"><?php echo $currentMonth.'/'.$currentYear;?></label>
    	<a href="?month=<?=$currentMonth?>&year=<?=$currentYear?>&action=next"> > </a>
    </div>
    Dans un cas comme celui ci les variable de sessions n'ont pas vraiment d'intérêt.
    Il faut voir les sessions surtout comme une variable qui à besoin de vivre longtemps et d'être disponible partout. Un peu l'équivalent d'une variable globale dans un soft standard alors qu'ici on est plus dans des variables qu'on passe en paramètre entre fonction.
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  17. #17
    Membre du Club
    Homme Profil pro
    Inscrit en
    mai 2012
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : mai 2012
    Messages : 83
    Points : 63
    Points
    63
    Par défaut
    Vraiment top, super merci ! J'ai encore appris pleins de choses !

    Juste un détail:
    Avec le code tel quel, le mois s'affiche au départ "4", puis si je fais précédent ou suivant, le format passe en "03" ou "05", avec un "0" devant.
    Pour y remédier je converti le résultat en entier comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    return [(int)$dt->format('m'), $dt->format('Y')];
    De cette façon le "0" ne s'affiche jamais devant le mois, et c'est parfait.

    Encore merci !
    J'aurai surement encore d'autres questions durant le développement de mon projet, mais pour ce topic je le clos en résolu.

  18. #18
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Architecte Web / Android
    Inscrit en
    août 2003
    Messages
    6 268
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Architecte Web / Android
    Secteur : Industrie

    Informations forums :
    Inscription : août 2003
    Messages : 6 268
    Points : 18 011
    Points
    18 011
    Par défaut
    Citation Envoyé par BartRoX Voir le message
    Avec le code tel quel, le mois s'affiche au départ "4", puis si je fais précédent ou suivant, le format passe en "03" ou "05", avec un "0" devant.
    C'est parce que j'ai pas fait l'effort de normaliser mais effectivement pour bien faire :
    - On convertit le paramètre à envoyer en entier
    - On le reformate à l'affichage pour avoir un format de date plus "normal"

    Ou on traite tout en entier car le 0 ne nous intéresse pas

    Ou on traite tout en chaine

    Mais effectivement un mix des deux comme j'ai fais n'est pas l'idéal
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

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

Discussions similaires

  1. [ASP] Utiliser la fonction PAD
    Par Hell dans le forum ASP
    Réponses: 4
    Dernier message: 31/03/2005, 16h23
  2. manuel d'utilisation de fonction
    Par SteelBox dans le forum Langages de programmation
    Réponses: 1
    Dernier message: 11/10/2004, 01h28
  3. Utiliser des fonctions Pascal
    Par Neilos dans le forum C++Builder
    Réponses: 2
    Dernier message: 07/03/2004, 15h43
  4. Réponses: 11
    Dernier message: 22/12/2003, 21h06
  5. impossible d'utiliser ma fonction dans un insert
    Par caramel dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 10/04/2003, 15h04

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