Je crois que j'ai pas compris ce que tu voulais dire, mais si il y a plusieurs utilisateurs on ne peut pas le mettre en "dur" dans le code, dans notre cas on est obliger d'avoir recours à $_SESSION (la tableu user ou on a tous nos utilisateurs, et la référence dans la table reservation qui attribue les reservation pour les utilisateur je vois pas comment tu veux faire autrement1) Je parlais de l'id utilisateur qui (cf début) est unique.
//initialisation par défaut à aujourd'hui
$periode = date("Y-m-d");
Sur ta page du formulaire tu as ces éléments présents (normalement)<div id="output">
<!-- Affichage du calendrier -->
<?php showCalendar($periode); ?>
<!-- Important à initialiser avec une valeur par défaut (aujourd'hui) pour pouvoir faire suivant ou précédant -->
<!-- Important que ces deux champs se trouvent dans le div output ! car mise à jour lors de l'ajax ! -->
<input type="hidden" name="date_id_annee_mois" id="date_id_annee-mois" value="<?php echo date("Y-m"); ?>" />
<input type="hidden" name="date_id_jour" id="date_id_jour" value="<?php echo date("d"); ?>" />
</div>
<button type="button" id="boutonprec" class="boutonprec" onFocus="this.style.borderColor=\'#33CCFF\';" onBlur="this.style.borderColor=\'#000000\';">mois précédent</button>
<button type="button" id="boutonsuiv" class="boutonsuiv" onFocus="this.style.borderColor=\'#33CCFF\';" onBlur="this.style.borderColor=\'#000000\';">mois suivant</button>
Morceau de javascript à rajouter à la fin de ton fichier du formulaire,//tes fonctions utiles
//ta fonction showCalendar
if (!empty($_POST['operation']) && !empty($_POST['periode'])) {
//extraction des variables
$periode = htmlentities($_POST['periode']);
$month = getMonth($periode);
$year = getYear($periode);
$operation = $month + htmlentities($_POST['operation']);
//Calcul de la période après modification du mois
$periode = date("Y-m-d",mktime(0,0,0,$operation,1,$year));
//Affichage de la réponse pour ajax: calendrier + champs hidden (utile pour le formulaire ET l'ajax)
showCalendar($periode);
echo '<input type="hidden" name="date_id_annee_mois" id="date_id_annee-mois" value="',$year,'-',$month,'" />
<input type="hidden" name="date_id_jour" id="date_id_jour" value="01" />';
}
a) la récupération des données en javascript se fait bien dans l'en-tête et non dans le corps.Morceau de javascript à rajouter à la fin de ton fichier du formulaire,
<script>
//Ajout d'évènement javascript aux bouton suivant et précédent (équivalent de onclick="")
document.getElementById('boutonprec').addEventListener('click',function() { getAJAXmois(document.getElementById('date_id_annee-mois').value,-1) }, false);
document.getElementById('boutonsuiv').addEventListener('click',function() { getAJAXmois(document.getElementById('date_id_annee-mois').value,1) }, false);
</script>
$periodePrec = date("Y-m-d",mktime(0,0,0,getMonth($periode)-1,1,getYear($periode)));
$periodeSuiv = date("Y-m-d",mktime(0,0,0,getMonth($periode)+1,1,getYear($periode)));
Mon gestionnaire d'évènement (avec .addEventListener) comprend en effet les deux mêmes fonctions non?xhr.onreadystatechange = function() { //Fonction pour permettre l'affichage du nouveau calendrier initialisé
if ((xhr.readyState == 4) && (xhr.status == 200)) {
document.getElementById('output').innerHTML = xhr.responseText;
dans mon fichier js (programme Ajax), je cherche donc à remplacer <!-- Affichage du calendrier -->
]<?php showCalendar($periode); ?>
<input type="hidden" name="date_id_annee_mois" id="date_id_annee-mois" value="<?php echo date("Y-m"); ?>" />
<input type="hidden" name="date_id_jour" id="date_id_jour" value="<?php echo date("d"); ?>" /> showCalendar($periode);
echo '<input type="hidden" name="date_id_annee_mois" id="date_id_annee-mois" value="',$year,'-',$month,'" />
<input type="hidden" name="date_id_jour" id="date_id_jour" value="01" />';
a) C'est bien ça?<?php showCalendar($periode); ?>
représente donc le calendrier -soit du mois courant si l'utilisateur n'appuie sur aucun boutonecho showCalendar (date("Y-m"));
Ce que je veux dire c'est que echo showCalendar (date("Y-m")); reprend <?php showCalendar($periode); ?>
quel que soit le mois du calendrier qu'il y a dans <?php showCalendar($periode); ?>
C'est bien ça?if (!empty($_POST['operation']) && !empty($_POST['periode'])) {
$operation = $month + htmlentities($_POST['operation']);
//Calcul de la période après modification du mois
$periode = date("Y-m-d",mktime(0,0,0,$operation,1,$year));
Elle correspondt au -1 et 1 de tes boutons suiv et prec<?php
echo '<button type="button" id="boutonprec" class="boutonprec" onclick="getAJAXmois(\'',$periodePrec,'\')" onFocus="this.style.borderColor=\'#33CCFF\';" onBlur="this.style.borderColor=\'#000000\';">mois précédent</button>
<button type="button" id="boutonsuiv" class="boutonsuiv" onclick="getAJAXmois(\'',$periodeSuiv,'\')" onFocus="this.style.borderColor=\'#33CCFF\';" onBlur="this.style.borderColor=\'#000000\';">mois suivant</button>';
?>
<!-- Ajout d'évènement javascript aux boutons suivant et précédent (équivalent de onclick="") -->
[javascript]<?php
//initialisation par défaut à aujourd'hui
$periode = date("Y-m-d");
?>
Dans mon fichier js je fais fais passer la variable periode:if (!empty($_POST['operation']) && !empty($_POST['periode'])) {
//extraction des variables
$periode = htmlentities($_POST['periode']);
$month = getMonth($periode);
$year = getYear($periode);
Je me demande donc pourquoi le navigateur considère que la fonction getMonth($periode)$month = getMonth($periode);
en commentaire ( avec un # devant), pour voir comment le navigateur lit la ligne suivante,<?php
function mafonction(){}
var_dump(function_exists('getMonth'));
?>
dans ma page du formulaire de réservations donne bool(true) et dans mon fichier php bool(false)<?php
if (isset($periode))
{ echo "yes";
} else {
echo "pas de variable periode";
}
?>
Le navigateur informe: pas de variable periode<!-- code spécifique pour le programme ajax du calendrier partie 1/2 -->
<script src="calendar_ajax.js"></script>
<?php
//initialisation par défaut à aujourd'hui
$periode = date("Y-m-d");
?>
mais "elle ne passe pas" dans le lien qui renvoit sur la feuille externe js.J'ai bien mes fonctions annoncées à nouveaux dans mon fichier php:1) Il faut que tu comprennes que pour chaque fichier php tu as besoin de réecrire la fonction dans ton code, sinon elle n'existe pas.
$month = getMonth($periode);
$year = getYear($periode);
Du coup je ne comprends pas très bien ce que tu veux me dire ou me faire comprendre pour 1)Oui, mais c'est bien ce qu'on fait dans le fichier php:2) Ton ajax utilises la méthode POST, comme les formulaires en générales, tu récupèreras tes variables avec $_POST[]
$periode = htmlentities($_POST['periode']);
$operation = $month + htmlentities($_POST['operation']);
Donc là aussi c'est bon il me semble. Non?<div id="variablePeriode">
<?php
//initialisation par défaut à aujourd'hui
$periode = date("Y-m-d");
?>
</div>
=> puis dans fichier js<?php
//nouvelle déclaration de mes fonctions
function getSecond($valeur) {
return substr($valeur, 17, 2);
}
function getMinute($valeur) {
return substr($valeur, 14, 2);
}
function getHour($valeur) {
return substr($valeur, 11, 2);
}
function getDay($valeur) {
return substr($valeur, 8, 2);
}
function getMonth($valeur) {
return substr($valeur, 5, 2);
}
function getYear($valeur) {
return substr($valeur, 0, 4);
}
function monthNumToName($mois) {
$tableau = Array("", "Janvier", "Février",
"Mars", "Avril", "Mai", "Juin", "Juillet",
"Aôut", "Septembre", "Octobre", "Novembre", "Décembre");
return (intval($mois) > 0 && intval($mois)
< 13) ? $tableau[intval($mois)] : "Indéfini";
}
function showCalendar($periode) { //accolade d'ouverture 1
$leCalendrier = "";
# Tableau des valeurs possibles pour un numéro
# de jour dans la semaine
$tableau = Array("0", "1", "2", "3", "4", "5", "6", "0");
$nb_jour = Date("t", mktime(0, 0, 0, getMonth($periode),
1, getYear($periode)));
$pas = 0;
$indexe = 1;
# Affichage du mois et de l'année
$leCalendrier .= "<h2>" . monthNumToName
(getMonth($periode)) . " " . getYear($periode) . "</h2>";
# Affichage des entêtes
$leCalendrier .= "
<ul id=\"libelle\">
\t<li> L</li>
\t<li> M</li>
\t<li> M</li>
\t<li> J</li>
\t<li> V</li>
\t<li> S</li>
\t<li> D</li>
</ul>";
# Tant que l'on n'a pas affecté tous les jours du mois traité
while ($pas < $nb_jour) { //accolade d'ouverture 2
if ($indexe == 1) $leCalendrier .=
"\n\t<ul class=\"ligne\">";
# Si le jour calendrier == jour de la semaine en cours
if (Date("w", mktime(0, 0, 0, getMonth($periode),
1 + $pas, getYear($periode))) == $tableau[$indexe]) { //accolade d'ouverture 3
# Si jour calendrier == aujourd'hui
$afficheJour = Date("d", mktime(0, 0, 0,
getMonth($periode), 1 + $pas, getYear($periode)));
if (Date("Y-m-d", mktime(0, 0, 0, getMonth($periode),
1 + $pas, getYear($periode))) == Date("Y-m-d")) { //accolade d'ouverture 4
$class = " class=\"itemCurrentItem\"";
} //accolade de fermeture 4
else { //accolade d'ouverture 4 else
# 1 est toujours vrai => on affiche
# un lien à chaque fois
# A vous de faire les tests
# nécessaire si vous gérer un agenda par exemple
if (1) { //accolade d'ouverture 5
$class = " class=\"itemExistingItem\"";
$var_j = Date("d", mktime(0, 0, 0, getMonth($periode), 1 + $pas, getYear($periode)));
$var_am = Date("Y-m", mktime(0, 0, 0, getMonth($periode), 1 + $pas, getYear($periode))); #code rajouté pour avoir l'année et le mois courants
$afficheJour = "<input type=\"button\" name=\"datejour\" value=\"" . $var_j . "\" onClick=\"date_id_jour.value=this.value; date_id_annee_mois.value='" . $var_am . "' \">";
} //accolade de fermeture 5
else { //accolade d'ouverture 5 else
$class = "";
} //accolade de fermeture 5 else
} //accolade de fermeture 4 else
# Ajout de la case avec la date
$leCalendrier .= "\n\t\t<li$class>
$afficheJour</li>";
$pas++;
} //accolade de fermeture 3
else { //accolade d'ouverture 3 else
# Ajout d'une case vide
$leCalendrier .= "\n\t\t<li> </li>";
} //accolade de fermeture 3 else
if ($indexe == 7 && $pas < $nb_jour)
{ $leCalendrier
.= "\n\t</ul>"; $indexe = 1;} else {$indexe++;}
} //accolade de fermeture 2
# Ajustement du tableau
for ($i = $indexe; $i <= 7; $i++) { //accolade d'ouverture 6
$leCalendrier .= "\n\t\t<li> </li>";
} //accolade de fermeture 6
$leCalendrier .= "\n\t</ul>\n";
# Retour de la chaine contenant le Calendrier
return $leCalendrier;
} //accolade de fermeture 1
//fin de nouvelle déclaration de mes fonctions
if (!empty($_POST['operation']) && !empty($_POST['periode'])) {
//extraction des variables
$periode = htmlentities($_POST['periode']);
$month = getMonth($periode);
$year = getYear($periode);
$operation = $month + htmlentities($_POST['operation']);
//Calcul de la période après modification du mois
$periode = date("Y-m-d",mktime(0,0,0,$operation,1,$year));
//Affichage de la réponse pour ajax: calendrier + champs hidden (utile pour le formulaire ET l'ajax)
showCalendar($periode);
echo '<input type="hidden" name="date_id_annee_mois" id="date_id_annee-mois" value="',$year,'-',$month,'" />
<input type="hidden" name="date_id_jour" id="date_id_jour" value="01" />';
}
?>
Voilà ce que ça donne déjà pour mon fichier php.function getDay($date){
$valeurD = date("d");
return substr($valeurD, 8, 2);
}
function getMonth($date) {
$valeurM = date("m");
return substr($valeurM, 5, 2);
}
function getYear($date){
$valeurY = date("Y");
return substr($valeurY, 0, 4);
}
pour réduire mon code, mais le navigateur m'a alors demandé de déclarer aussi le calendrier...function getSecond($valeur) {
return substr($valeur, 17, 2);
}
function getMinute($valeur) {
return substr($valeur, 14, 2);
}
function getHour($valeur) {
return substr($valeur, 11, 2);
}
tu n'en a jamais besoins. Quand tu déclares une fonction, elle n'existe que le temps ou le serveur traite ton code, après elle n'est déjà plus là. C'est pourquoi il faut l re-déclarer sur l'autre page, les deux pages étant indépendantes.