date dans formulaire avec calendrier

Mammouth du PHP | 620 Messages

04 sept. 2009, 12:54

bonjour,
j'ai trouvé sur le net un petit script qui permet dans un formulaire d'ajouter un champ date qui se rempli en fonction d'un calendrier.
j'ai mis en place le code et lorsuqe j'ouvre mon calendrier j'ai bien les dates qui s'affichent. mais lorsque je clique sur une date pour quelle remplissen mon champ date de mon forumaire rien ne se passe.
pouvez vous m'aider à resoudre ce probléme svp. j'ai testé sur 2 version d'ie ie7 et ie8 et sa ne fonctionne ni sur l'un ni sur l'autre. sous ff non plus !

voici le formulaire alégé :
<form name='formu'>
<input type='text' name='date'><input type='button' value='...' onClick="window.open('mycalendar.php?form=formu&elem=date','Calendrier','width=200,height=220')">
</form>
et la page mycalendar.php
<?
  // Section de configuration

  $bgcolor="dddddd" ;        // Couleur de fond
  $daybgcolor="aaaaaa" ;     // Couleur des jours de la semaine
  $dombgcolor="eeeeee" ;     // Couleur du jour sélectionné
  $dayholcolor="cccccc" ;     // Couleur des WE

  // Mois
  $month[0] = "Janvier" ;
  $month[1] = "Février" ;
  $month[2] = "Mars" ;
  $month[3] = "Avril" ;
  $month[4] = "Mai" ;
  $month[5] = "Juin" ;
  $month[6] = "Juillet" ;
  $month[7] = "Août" ;
  $month[8] = "Septembre" ;
  $month[9] = "Octobre" ;
  $month[10] = "Novembre" ;
  $month[11] = "Décembre" ;

  // Première lettre des jours de la semaine
  $day[0] = "D" ;
  $day[1] = "L" ;
  $day[2] = "M" ;
  $day[3] = "M" ;
  $day[4] = "J" ;
  $day[5] = "V" ;
  $day[6] = "S" ;

  $error01 = "Erreur : date invalide"

?>
<html>
<head>
<style>
 #general
 {
  font-family: Arial;
  font-size: 10pt;
 }

 a:link,a:active,a:visited
 {
        text-decoration:none;
        color:#000000;
 }

 a:hover
 {
        text-decoration:underline;
        color:#000000;
 }

</style>
<script language='JavaScript'>
 window.resizeTo(200,270) ;
 function modifier (jour)
 {
  window.location.href = "mycalendar.php?form=<?echo $form;?>&elem=<?echo $elem;?>&mois=" + document.forms["MyCalendar"].elements['month'].options[document.forms["MyCalendar"].elements['month'].selectedIndex].value + "&jour=" + jour +"&annee=" + document.forms["MyCalendar"].elements['year'].options[document.forms["MyCalendar"].elements['year'].selectedIndex].value

 }
<?
  if (!isset($jour))
       $jour = date("j") ;

  if (!isset($mois))
       $mois = date("m") ;

  if (!isset($annee))
       $annee = date("Y") ;

    // nombre de jours par mois
  $nbjmonth[0] = 31 ;
  $nbjmonth[1] = ($annee%4==0?($annee%100==0?($annee%400?29:28):29):28) ;
  $nbjmonth[2] = 31 ;
  $nbjmonth[3] = 30 ;
  $nbjmonth[4] = 31 ;
  $nbjmonth[5] = 30 ;
  $nbjmonth[6] = 31;
  $nbjmonth[7] = 31 ;
  $nbjmonth[8] = 30 ;
  $nbjmonth[9] = 31 ;
  $nbjmonth[10] = 30 ;
  $nbjmonth[11] = 31 ;

  if(!checkdate($mois,$jour,$annee))
  {
   echo "alert('$error01')\n" ;
   $jour = date("j") ;
   $mois = date("m") ;
   $annee = date("Y") ;
  }

  // Calcul du jour julien et du numéro du jour
  $HR = 0;
  $GGG = 1;
  if( $annee < 1582 ) $GGG = 0;
  if( $annee <= 1582 && $mois < 10 ) $GGG = 0;
  if( $annee <= 1582 && $mois == 10 && 1 < 5 ) $GGG = 0;
  $JD = -1 * floor(7 * (floor(($mois + 9) / 12) + $annee) / 4);
  $S = 1;
  if (($mois - 9)<0) $S=-1;
  $A = abs($mois - 9);
  $J1 = floor($mois + $S * floor($A / 7));
  $J1 = -1 * floor((floor($J1 / 100) + 1) * 3 / 4);
  $JD = $JD + floor(275 * $mois / 9) + 1 + ($GGG * $J1);
  $JD = $JD + 1721027 + 2 * $GGG + 367 * $annee - 0.5;



  /*$tmp = ((int)(($mois>2?$annee:$annee-1)/100)) ;
  $jj = (int)((((int)(365.25*($mois>2?$annee:$annee-1))) + ((int)(30.6001*($mois>2?$mois+1:$mois+13))) + $jour + 1720994.5 + ($annee > 1582 && $mois > 10 && $jour > 15?2-$tmp+((int)($tmp/4)):0))) ;
  $jj = (int)(($jj) % 7)*/
  $jj = (($JD+.5)%7) ;
?>
</script>
</head>
<?
  echo "<body bgcolor='#$bgcolor' onUnLoad=''>\n" ;

  echo "<center><form name='MyCalendar'>\n" ;
  echo "<table width='170' cellspacing='0' cellspading='0' border='0'><tr>\n" ;

  // Affichage de la sélection du mois et de l'année
  echo "<td><select name='month' onChange=\"modifier($jour)\">\n" ;

  for ($i=0;$i<12;$i++)
  {
   echo "<option value='".($i+1)."'".($mois==($i+1)?" selected":"").">".$month[$i]."</option>\n" ;
  }

  echo "</select></td>\n" ;

  echo "<td align='right'><select name='year' onChange=\"modifier($jour)\">\n" ;

  $y = date("Y") ;
  for ($i=$y-10;$i<$y+10;$i++)
  {
   echo "<option value='$i'".($annee==($i)?" selected":"").">$i</option>\n" ;
  }

  echo "</select></td></tr><tr><td colspan='2'>&nbsp;</td></tr>\n" ;

  echo "<tr><td colspan='2'><table width='100%' cellspacing='0' cellspading='0' border='0'>\n" ;
  echo "<tr>\n" ;

  // Affichage des jours
  for($i=0;$i<7;$i++)
  {
   echo "<td width='14%' bgcolor='#$daybgcolor'><font id='general'>".$day[$i]."</font></td>" ;
  }

  echo "</tr>\n<tr><td colspan='7'> </td></tr>\n<tr>\n" ;

  // Première ligne des jours
  $j = $jj ;//date ("w", mktime (0,0,0,$mois,1,$annee)) ;
  $dom = 1 ;
  for ($i=0;$i<7;$i++)
  {
   if ($j<=$i)
   {
        echo "<td".($dom==$jour?" bgcolor='#$dombgcolor'":"")."><a href='javascript:modifier($dom)'><font id='general'>".$dom++."</font></a></td>\n" ;
   }
   else
       echo "<td>&nbsp;</td>\n" ;
  }

  echo "</tr>\n" ;
  // Le reste
  for ($i=0;$i<5;$i++)
  {
   echo "<tr>\n" ;
   for ($j=0;$j<7;$j++)   
   {    
	$j_inac = ($j==0 || $j==6) ;
	
	if($dom < $nbjmonth[($mois-1)])
         echo "<td".($dom==$jour?" bgcolor='#$dombgcolor'":($j_inac ?" bgcolor='#$dayholcolor'":""))."><a href='javascript:modifier($dom)'><font id='general'>".$dom++."</font></a></td>\n" ;
    else if (checkdate($mois,$dom,$annee))
         echo "<td".($dom==$jour?" bgcolor='#$dombgcolor'":($j_inac ?" bgcolor='#$dayholcolor'":""))."><a href='javascript:modifier($dom)'><font id='general'>".$dom++."</font></a></td>\n" ;
    else
         echo "<td>&nbsp;</td>\n" ;

   }
   echo "</tr>\n" ;
  }

  echo "\n<tr><td colspan='10' align='center'><input type='button' onclick='window.opener.document.forms[\"$form\"].elements[\"$elem\"].value=\"$annee-$mois-$jour\";window.close()' value='Valider'>&nbsp;&nbsp;<input onclick='window.close()' type='button' value='Annuler'></td></tr></table>\n" ;

  echo "\n</tr></table>\n" ;

  echo "</td></tr></table>" ;
  echo "</form></center>" ;

  echo "</body>\n" ;
?>
</html>

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

04 sept. 2009, 14:08

Ce script PHP est un peu ancien, il lui manque quelques réajustements :
  • 1. la balise <? doit être remplacée par <?php
    2. les variables postée par le formulaire doivent être restituée explicitement à partir du $_GET ou $_POST selon la méthode de postage du formulaire. Surtout pour les variables $form et $elem
Voici la correction du point n°2 à faire au début du script :
<?php
    // transformer les champs postés par le formulaire en variables
    $form = isset($_GET['form']) ? $_GET['form'] : null;
    $elem = isset($_GET['elem']) ? $_GET['elem'] : null;
?>
..etc. Il faut que tu continue comme ça en transformant en variables tous les paramètres que le programme Calendrier.php peut recevoir.
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Petit nouveau ! | 9 Messages

05 sept. 2009, 12:02

bonjour,

il faudrait aussi peut être que le formulaire envoie les infos :
<form action="www.php' method='POST ou GET>

JL

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

05 sept. 2009, 18:07

bonjour,

il faudrait aussi peut être que le formulaire envoie les infos :
<form action="www.php' method='POST ou GET>

JL
ça ce n'est pas nécessaire car ce n'est pas son formulaire <form> qui appelle le programme mycalendrier.php mais c'est le popup qui s'ouvre par le bouton "..." et charge l'url: window.open('mycalendar.php?form=formu&elem=date' ...
Voir le code:
<form name='formu'>
<input type='text' name='date'><input type='button' value='...' onClick="window.open('mycalendar.php?form=formu&elem=date','Calendrier','width=200,height=220')">
</form>
dans ce code les paramètres form et elem sont envoyés par la méthode GET (? dans l'url).
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Petit nouveau ! | 9 Messages

06 sept. 2009, 10:49

bonjour,
exact, autant pour moi.

JLuc

nassima
Invité n'ayant pas de compte PHPfrance

04 janv. 2011, 12:29

Bj;
je viens de le tester il fonctionne mais il m'insert tj la date du jour, quand je clique sur une autre date ya rien, méme si je change l'année ou le mois, si tj la date du jour qui s’affiche

pandu
Invité n'ayant pas de compte PHPfrance

16 oct. 2011, 22:03

Pareil pour moi. Et comme je débute je ne trouve pas l'erreur. Qqun pourrait regarder ou me dire ou on peut trouver l'équivalent mais qui marche ?

Merci

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

17 oct. 2011, 14:03

bonjour,

le plus simple, vu l'ancienneté du code, est de créer un message à toi avec ta question et le code qui pose problème avec !


@+
Il en faut peu pour être heureux ......

pandu
Invité n'ayant pas de compte PHPfrance

17 oct. 2011, 16:01

Ben le code est déjà dans ce message (voir plus haut ).

ViPHP
ViPHP | 2577 Messages

17 oct. 2011, 16:27

Bonjour,
  if (!isset($jour))
       $jour = date("j") ;
Il faudrait mettre ce genre de code au gout du jour à minima :
  if (isset($_POST['jour']))
  {
       $jour = $_POST['jour'] ;
  }
  else
  {
       $jour = date("j") ;
  }
idem pour mois et année

Pour faire un test brutal : ajouter extract($_POST) et extract($_GET) en début de script sans autre modif. Vu l'age du script, il y a un problème de variable auto.