Petite erreur dans calendrier dynamique javascript!!! [Résolu]

Signaler
Messages postés
194
Date d'inscription
lundi 11 juillet 2005
Statut
Membre
Dernière intervention
13 avril 2007
-
Messages postés
194
Date d'inscription
lundi 11 juillet 2005
Statut
Membre
Dernière intervention
13 avril 2007
-
Salut à vous, j'ai un gros problème sur mon calendrier.

copier coller le dans un fichier php et lancez le, vous verrez qu'il y a 2 ptites erreurs.

J'arrive pas à les résoudre je galère comme un ouf lol

je suis débutant.





<?



//choix des couleurs

$bgcolor="ffffff" ; // Couleur de fond

$daybgcolor="0000FF" ; // Couleur des jours de la semaine

$dombgcolor="FF0000" ; // Couleur du jour sélectionné

$dayholcolor="cccccc" ; // Couleur des WE



// Mois

$month[0] = "January" ;

$month[1] = "February" ;

$month[2] = "March" ;

$month[3] = "April" ;

$month[4] = "May" ;

$month[5] = "June" ;

$month[6] = "July" ;

$month[7] = "August" ;

$month[8] = "September" ;

$month[9] = "October" ;

$month[10] = "November" ;

$month[11] = "December" ;



// Première lettre des jours de la semaine

$day[0] = "S" ;

$day[1] = "M" ;

$day[2] = "T" ;

$day[3] = "W" ;

$day[4] = "T" ;

$day[5] = "F" ;

$day[6] = "S" ;



$error01 = "Error : invalide date"



?>

<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 "\n" ;



echo "<center><form name='MyCalendar'>\n" ;

echo "\n\" ;

// Affichage de la sélection du mois et de l'année

echo \"<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>, \n\" ;

echo \"<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>, ----
&nbsp;, \n\" ;

echo \"----
<table width='100%' cellspacing='0' cellspading='0' border='0'>\n" ;

echo "----
\n" ;

// Affichage des jours

for($i=0;$i<7;$i++)

{

echo ", \".$day[$i].\"</td>\" ;

}

echo \"\n----
, \n----
\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 \"".$dom++.", \n\" ;

}

else

echo \"&nbsp;, \n\" ;

}

echo \"\n\" ;

// Le reste

for ($i=0;$i<5;$i++)

{

echo \"----
\n\" ;

for ($j=0;$j<7;$j++)

{

$j_inac = ($j==0 || $j==6) ;

if($dom < $nbjmonth[($mois-1)])

echo
\"".$dom++.", \n\" ;

else if (checkdate($mois,$dom,$annee))

echo
\"".$dom++.", \" ;

else

echo \"&nbsp;, \n\" ;

}

echo \"\n\" ;

}

echo \"----
&nbsp;&nbsp;
" ;



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



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

echo "</form></center>" ;



echo "\n" ;

?>

</html>

13 réponses

Messages postés
445
Date d'inscription
lundi 17 février 2003
Statut
Membre
Dernière intervention
22 mars 2007
1
C'est encore parce que tu n'utilises pas $_GET pour lire tes variables passées dans l'url :

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

A remplacer par :

if (!isset($_GET['jour']))
$jour = date("j") ;
else
$jour=$_GET[jour'];

idem pour mois et annee...
Messages postés
445
Date d'inscription
lundi 17 février 2003
Statut
Membre
Dernière intervention
22 mars 2007
1
Salut,
Tu veux pas nous les donner plutôt les erreurs ?
Tu sais que t'es en train de réinventer l'eau chaude avec toutes tes manipulations de date... si c'est pour t'entrainer, c'est bien, sinon regrde la doc php sur les dates

Arn;o)
Messages postés
194
Date d'inscription
lundi 11 juillet 2005
Statut
Membre
Dernière intervention
13 avril 2007

yop les erreurs sont les suivantes:



Notice: Undefined variable: form in c:\mycalendar.php on line 182



Notice: Undefined
variable: elem in c:\mycalendar.php on line 182



Voilà je ne comprends pas pourquoi ça ne veut pas marcher!



merci!
Messages postés
194
Date d'inscription
lundi 11 juillet 2005
Statut
Membre
Dernière intervention
13 avril 2007

ça pointe donc sur la 11eme ligne en partant de la fin de ce que je vous ai envoyé!
Messages postés
445
Date d'inscription
lundi 17 février 2003
Statut
Membre
Dernière intervention
22 mars 2007
1
En fait, il faut vérifier que les variable $form et $elem existe avant de les utiliser (if (!empty($form))... ou plus simple, les initialiser à vide au début de ton script : $form=''; et $elem='';
Attention, il faut utiliser <?php à la place de <?.
Arn;o)
Messages postés
445
Date d'inscription
lundi 17 février 2003
Statut
Membre
Dernière intervention
22 mars 2007
1
Au fait, si ça peut t'aider, j'avais fait un calendrier dans le genre... http://www.phpcs.com/code.aspx?ID=30101
Messages postés
194
Date d'inscription
lundi 11 juillet 2005
Statut
Membre
Dernière intervention
13 avril 2007

merci beaucoup arnal!!
Il me reste juste un ptit bug, qd je clique sur un jour il ne veut pas valider mon choix, il reste sur le popup!
erf!!
Messages postés
194
Date d'inscription
lundi 11 juillet 2005
Statut
Membre
Dernière intervention
13 avril 2007

Merci pour ta réponse tu es super sympa!
J'ai fait comme tu as dit, j'ai initialisé à vide $form et $elem il n'y a plus d'erreur en effet, mais...
il y a toujours un mais lol, quand je clique sur une autre date il rafraichit la page mais ne charge pas les nouvelles valeurs, pourtant le code est logique lol.
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
8
Salut,



remplace par $_GET['elem'] et $_GET['form'] ou encore essaie $_POST['elem'] ou $_POST['form']



attention de bien tester avec isset l'existence de ces variables avant :



if(isset($_GET['elem']))

{

echo $_GET['elem'];

}

<hr size="2" width="100%"><li>Entraide, dépannage et vulgarisation informatique : Mon site de vulgarisation informatique</li>
Messages postés
194
Date d'inscription
lundi 11 juillet 2005
Statut
Membre
Dernière intervention
13 avril 2007

j'avais essayé le GET mais bon ça enlève juste l'erreur.
Mais la date ne change pas lorsque l'on clique sur un autre jour.
On ne peut selectionner que la date du jour!! c ouf!
les variables sont bloquées...
Messages postés
194
Date d'inscription
lundi 11 juillet 2005
Statut
Membre
Dernière intervention
13 avril 2007

YEAHHHHHHHHHHHHHHH ARNAL69130 TU DECHIRESSSSSSS! !!! ! ! !! ! !
T un OUFFF!
;)
MERCI MERCI MERCI 1000* lol
Messages postés
445
Date d'inscription
lundi 17 février 2003
Statut
Membre
Dernière intervention
22 mars 2007
1
Content d'avoir pu t'aider .
N'oublie pas de regarder les fonctions date de php...

Par exemple,

Au lieu de remplir un tableau avec le nom des mois, tu peux utiliser ça :
function nomMois($mon)
{ return ucfirst(strftime("%B",strtotime("2002".sprintf("%02d",$mon)."01"))); }

idem pour les jours :
function nomJour($d)
{ return ucfirst(strftime("%A",strtotime("200408".sprintf("%02d",$d+1)))); }

Ensuite, il est inutile de rentrer manuellement le nombre de jours des mois
$nbj=strftime("%d",mktime(8,0,0,$mois+1,0,$an)); => nombre de jour du mois $mois de l'année $an
$d1j=strftime("%w",strtotime($an.$mois."01")); => jour de la semaine du 1er du mois
...

Bonne continuation.
Arn;o)
Messages postés
194
Date d'inscription
lundi 11 juillet 2005
Statut
Membre
Dernière intervention
13 avril 2007

merci de tes précieux conseils. J'en prends note!!
Merci pour tout !!