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. 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

    .

    0
    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 
      
      0
      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
        0