PHP-HTML formulaire

Résolu
Bonjour,
J'ai un formulaire en html(php), ma page index est index.php
Voilà le code :
<form class="form" method="post">
            <div class="form-group">
                <label for="annee">Année</label>
                <select class="select" name="annee" id="an">
                    <option value="2017">2017</option>
                    <option value="2018">2018</option>
                    <option value="2019">2019</option>
                    <option value="2020">2020</option>
                    <option value="2021">2021</option>
                </select>
                <button type="submit" class="btn btn-success btn-sm">Envoyer</button>
            </div>
        </form>

et le code php :
<?php

// Autoloading
require './vendor/autoload.php';

// Date du jour 
$date = new Date();
$year = date('Y');

$today = date('Ymd');
$dref = $year . '0630';

// Traitement du formulaire
if (!empty($_POST['annee'])) {
  $annee = htmlspecialchars($_POST['annee']);
  $year  = $annee;
}

Quand je sélectionne une année, j'aimerais que l'année reste affichée, je sais qu'il faut jouer avec selected=selected. Mais, je veux qu'il me mette cela au niveau de la date sélectionnée.
Comment faire ?
Cordialement

3 réponses

  1. Bonjour,
    J'ai trouvé, il fallait ajouter un constructeur, voilà ce que j'ai fait :
    class Month extends Date
    {
        public $year;
        public function __construct($year)
        {
            $this->year = $year;
        }
        public function getMonth($mois)
        {
            $year = $this->year;
            $mois = ($mois < 10 ? '0' : '') . $mois;
            $day = 1;
            $date = $year.'-'.$mois.'-01';
            $nbj = date('t', strtotime($date));
            $nbj = intval($nbj);
    
            $today = date('Y-m-d');
    
            $an = $year.'-01-01';
            $paq = $this->paques($year);
            $lpaq = $this->rtvPaq($year);
            $trav = $year.'-05-01';
            $vict = $year.'-05-08';
            $asc = $this->rtvAsc($year);
            $pent = $this->pentecote($year);
            $lpent = $this->rtvPent($year);
            $fetnat = $year.'-07-14';
            $assomp = $year.'-08-15';
            $toussaint = $year.'-11-01';
            $arm = $year.'-11-11';
            $noel = $year.'-12-25';
        
      
            $feries = [
            $an, $paq, $lpaq, $trav, $vict, $asc, $pent, $lpent, $fetnat, $assomp, $toussaint, $arm, $noel
            ];
        
            for ($i = 1; $i <= $nbj; $i++) {
                $j = ($i < 10 ? '0' : '') . $i;
                $dt = $year.'-'.$mois.'-' . $j;
                $y = date('Y', strtotime($dt));
                $m = date('m', strtotime($dt));
                $d = date('d', strtotime($dt));
                if (in_array($dt, $feries) && ($dt !== $today)) {
                    $r = '<div class="day green">';
                } elseif ($dt == $today) {
                    $r = '<div class="day red">';
                } else {
                    $r = '<div class="day">';
                }
                $r .= '<p>' . $this->rtvDay($dt)  . '</p>';
                $r .= '</div>';
                $r .= '<div class="jour-sem">';
                if (in_array($dt, $feries) && ($dt !== $today)) {
                    $r .= '<div class="daylib green">';
                } elseif ($dt == $today) {
                    $r .= '<div class="daylib red">';
                } else {
                    $r .= '<div class="daylib">';
                }
                $r .= '<p>' . $this->rtvDayOfYear($dt) . '</p>';
                $r .= '</div>';
                if (in_array($dt, $feries) && ($dt !== $today)) {
                    $r .= '<div class="weeklib green">';
                } elseif ($dt == $today) {
                    $r .= '<div class="weeklib red">';
                } else {
                    $r .= '<div class="weeklib">';
                }
                $r .= '<p>' . $this->rtvWeek($dt) . '</p>';
                $r .= '</div></div>';
    
                echo $r;
            }
        }
    }
    

    Merci encore pour ton aide
    Cordialemnt
    1. Bonjour,
      Merci pour la réponse, cela marche très bien.
      Encore un petit problème, j'ai une classe php Month comme suit :
      <?php
      class Month extends Date
      {
      
        /**
         * Libellé du mois
         *
         * @param int $m
         * @return string
         */
          public function rtvDay($date)
          {
              $date = new DateTime($date);
              $j = $date->format('N');
              $d = $date->format('d');
      
              return $this->days[$j] . ' ' . $d;
          }
          public function rtvDayOfYear($date)
          {
              $date = new DateTime($date);
              $date = $date->format('Y-m-d');
          
              return intval(strftime("%j", strtotime($date)));
          }
          public function rtvWeek($date)
          {
              $date = new DateTime($date);
            
              return $date->format('W');
          }
          public function getMonth($mois)
          {
              $year = date('Y');
              $mois = ($mois < 10 ? '0' : '') . $mois;
              $day = 1;
              $date = $year.'-'.$mois.'-01';
              $nbj = date('t', strtotime($date));
              $nbj = intval($nbj);
      
              $today = date('Y-m-d');
      
              $an = $year.'-01-01';
              $paq = $this->paques($year);
              $lpaq = $this->rtvPaq($year);
              $trav = $year.'-05-01';
              $vict = $year.'-05-08';
              $asc = $this->rtvAsc($year);
              $pent = $this->pentecote($year);
              $lpent = $this->rtvPent($year);
              $fetnat = $year.'-07-14';
              $assomp = $year.'-08-15';
              $toussaint = $year.'-11-01';
              $arm = $year.'-11-11';
              $noel = $year.'-12-25';
          
        
              $feries = [
              $an, $paq, $lpaq, $trav, $vict, $asc, $pent, $lpent, $fetnat, $assomp, $toussaint, $arm, $noel
              ];
          
              for ($i = 1; $i <= $nbj; $i++) {
                  $j = ($i < 10 ? '0' : '') . $i;
                  $dt = $year.'-'.$mois.'-' . $j;
                  $y = date('Y', strtotime($dt));
                  $m = date('m', strtotime($dt));
                  $d = date('d', strtotime($dt));
                  if (in_array($dt, $feries) && ($dt !== $today)) {
                      $r = '<div class="day green">';
                  } elseif ($dt == $today) {
                      $r = '<div class="day red">';
                  } else {
                      $r = '<div class="day">';
                  }
                  $r .= '<p>' . $this->rtvDay($dt)  . '</p>';
                  $r .= '</div>';
                  $r .= '<div class="jour-sem">';
                  if (in_array($dt, $feries) && ($dt !== $today)) {
                      $r .= '<div class="daylib green">';
                  } elseif ($dt == $today) {
                      $r .= '<div class="daylib red">';
                  } else {
                      $r .= '<div class="daylib">';
                  }
                  $r .= '<p>' . $this->rtvDayOfYear($dt) . '</p>';
                  $r .= '</div>';
                  if (in_array($dt, $feries) && ($dt !== $today)) {
                      $r .= '<div class="weeklib green">';
                  } elseif ($dt == $today) {
                      $r .= '<div class="weeklib red">';
                  } else {
                      $r .= '<div class="weeklib">';
                  }
                  $r .= '<p>' . $this->rtvWeek($dt) . '</p>';
                  $r .= '</div></div>';
      
                  echo $r;
              }
          }
      }
      J'aimerais passer l'année en paramètre pour pouvoir remplacer dans la fonction getMonth $year = date('Y') par $year = $year passée en paramètre.
      Si vous avez une idée, elle serait la bienvenue.
      Cordialement 
      
      1. Modérateur
        Bonjour,

        voila :
        <?php
        //fichier index.php
        //-----------------------------------------------------------//
        //activation des erreurs php
        //-----------------------------------------------------------//
        error_reporting(E_ALL);
        ini_set('display_errors', TRUE);
        ini_set('display_startup_errors', TRUE);
        
        //-----------------------------------------------------------//
        // Autoloading
        //-----------------------------------------------------------//
        require './vendor/autoload.php';
        
        //-----------------------------------------------------------//
        // Date du jour 
        //-----------------------------------------------------------//
        $year = date('Y');
        $today = date('Ymd');
        $dref = $year . '0630';
        
        //-----------------------------------------------------------//
        //Récupération propre des variables POST / GET / SESSION....
        //-----------------------------------------------------------//
        $annee = !empty($_POST['annee']) ? $_POST['annee'] : NULL;
        
        
        
        ?>
        
        
        
        <form class="form" method="post" action="">
            <div class="form-group">
                <label for="annee">Année</label>
                <select class="select" name="annee" id="an">
                <?php
                  for($a = 2017 ; $a<=2021 , $a++){
                    $selected = $a == $annee ? ' selected="selected" ' : '';
                    echo '<option value="'.$a.'" '.$selected . '>'.$a.'</option>';
                  }
                ?>                  
                </select>
                <button type="submit" class="btn btn-success btn-sm">Envoyer</button>
            </div>
        </form>
        


        Au passage, je t'invite à lire ceci :
        https://forums.commentcamarche.net/forum/affich-37584947-php-gestion-des-erreurs-debogage-et-ecriture-du-code

        .