Liste deroulante avec les trimestres

Eléphanteau du PHP | 37 Messages

12 juil. 2012, 19:12

Bonjour a tous,

J'ai un problème et j'ai besoin de votre aide. Voila j'ai une liste déroulante avec les trimestres et je voudrais que, lorsqu'on choisit par exemple Trim II, 2012, il faudrait supprimer Trim I, 2012. SI c'est Trim III, 2012 qui est choisit, Trim I, 2012 et Trim II, 2012 doivent être supprimer. En effet, il faut pas que l’utilisateur puisse choisir une échéance dans le passé.

Voici les scripts que j'ai fait :
<?php
session_start();
$date = date('Y');
?>

<form action='test2.php' method='POST'>
<select name='date_test' size='1'>

<?php
$trim_ob =
  array(
    array('I', 31),
    array('II', 30),
    array('III',30),
    array('IV', 31 )
  );
for($i = $date; $i <= $date + 2; $i++)  // Détermination de la date courante + 2 ans
    {
  foreach($trim_ob as $cle => $valeur)
    {
    $mois = 3 * $cle + 3;     // Determination du nombre de mois formant les trimestres
    $trimestre = $i.'-'.$mois.'-'.$valeur[1];
    echo '<option value="'.$trimestre.'"';

    if($_SESSION['fix_obj'][7] == $trimestre) // Si $_SESSION['fix_obj'][7] est définie ...
    {
      echo 'selected="selected"';
    };

    echo '>Trim '.$valeur[0].', '.$i.'</option>';  // $valeur[0] contient les strings stockés dans $trim_ob soit I, II, III et IV
    };
    };

?>
</select>
<input type='submit' value='Go' />
</form>
Et voici le second script qui est inclut dans le précédent :
<?php
session_start();
$_SESSION['fix_obj'][7] = $_POST['date_test'];
echo $_SESSION['fix_obj'][7];
?>
<p><a href="test.php">Retour</a></p>
Merci

ViPHP
xTG
ViPHP | 7331 Messages

12 juil. 2012, 21:08

4 trimestres ? Cela ne fait pas un peu beaucoup ? :D

Pourrais-tu détailler ton problème ? Car je ne comprends pas.
L'utilisateur sélectionnes un trimestre et ensuite il retombes sur un formulaire semblable lui demandant d'en sélectionner un autre ?
C'est pour faire date de début / date de fin en gros ?

Eléphanteau du PHP | 37 Messages

12 juil. 2012, 21:38

En fait quand on clique sur le bouton OK, le trimestre choisi est enregistreé normalement et quand on revient en arrière, le trimestre qu'on a choisi s'affiche. Si on a choisi par exemple Trim III, 2012 on qu'on clique sur OK, trim III, 2012 est enregistré. Ensuite si on revient en arrière, Trim III, 2012 doit être affiché et Trim I, 2012 et Trim II, 2012 ne doivent plus apparaître. Je ne sais pas si j'ai été clair.
Merci

ViPHP
xTG
ViPHP | 7331 Messages

12 juil. 2012, 22:01

Euh d'accord... Je vois pas tellement l'intérêt d'interdire à l'utilisateur toute modification de ses choix mais soit. (il devra pas se tromper pis c'est tout)
Tu peux découper à coup d'expression régulière la valeur sauvegardée pour extraire la valeur du trimestre.
Et comme tu utilises une notation I, II et III il te suffit de compter le nombre de caractère pour avoir la correspondance chiffrée.
A partir de là la comparaison est simple. ;)

Eléphanteau du PHP | 37 Messages

13 juil. 2012, 14:41

Merci. Mais peux-tu m'aider à faire le code car je ne maitrise pas trop bien les REGEX.

ViPHP
xTG
ViPHP | 7331 Messages

13 juil. 2012, 15:13

Utilises explode() dans ce cas sur le caractère "-" ;)

Eléphanteau du PHP | 37 Messages

13 juil. 2012, 15:29

Comment? je ne te comprend pas.

ViPHP
xTG
ViPHP | 7331 Messages

13 juil. 2012, 16:03

Un petit exemple :
$chaine = "12:php:france";
$array = explode(':', $chaine);
foreach($array as $string)
  echo $string . '<br />';
12
php
france

Eléphanteau du PHP | 37 Messages

13 juil. 2012, 16:41

Et quel serait l'interêt?

ViPHP
xTG
ViPHP | 7331 Messages

13 juil. 2012, 19:02

Récupérer le trimestre posté pour pouvoir le comparer aux autres et interdire certains choix ? :roll:
Dans tous les cas il te faut récupérer cette information si tu veux faire quoi que ce soit.