PHP-HTML formulaire [Résolu/Fermé]

Signaler
Messages postés
260
Date d'inscription
mardi 10 novembre 2015
Statut
Membre
Dernière intervention
28 juillet 2020
-
Messages postés
260
Date d'inscription
mardi 10 novembre 2015
Statut
Membre
Dernière intervention
28 juillet 2020
-
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

Messages postés
29211
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
13 août 2020
2 687
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://www.commentcamarche.net/faq/48399-php-gestion-des-erreurs-debogage-et-ecriture-du-code

.

Messages postés
260
Date d'inscription
mardi 10 novembre 2015
Statut
Membre
Dernière intervention
28 juillet 2020
11
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 
Messages postés
260
Date d'inscription
mardi 10 novembre 2015
Statut
Membre
Dernière intervention
28 juillet 2020
11
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