PHP-HTML formulaire

Résolu
chabinot Messages postés 391 Statut Membre -  
chabinot Messages postés 391 Statut Membre -
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. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
     
    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
  2. chabinot Messages postés 391 Statut Membre 16
     
    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
  3. chabinot Messages postés 391 Statut Membre 16
     
    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