J'ai relu plusieurs fois tes explications qui m'aident, mais j'ai encore des difficultés.
D'abord, concernant la compréhension du programme:
Si je comprends bien dans ma page de réservations j'ai deux boutons avec chacun un Id,
=> mais ces deux Id sont réunis dans une même fonction getAJAXmois()
Par l'intermédiaire des Id, la page de réservations va faire passer l'information que l'utilisateur
a appuyé sur un des deux boutons, et cette information arrive dans le fichier javascript.
Le fichier javascript récupère l'information et l'envoie au fichier php qui va générer un
nouveau calendrier mensuel basé sur cette information.
Le fichier php lu, on reprend la lecture du fichier javascript permettant
de remplacer l'affichage du calendrier par défaut par celui du nouveau calendrier.
document.getElementById('output').innerHTML = xhr.responseText;
On remplace (innerHTML) l'affichage (output) normal par celui du nouveau calendrier généré (xhr.responseText)
On obtient ainsi affiché notre nouveau calendrier généré sans rechargement de la page.
Voilà en gros la compréhension que j'ai de ce que je fais.
1) Est-ce que ma compréhension est bonne?
2) Je te montre où j'en suis:
Page de réservations:
En-tête:
<script src="calendar_ajax.js"></script>
Corps:
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>';
Je crois que tu veux que je rajoute ici ces deux lignes:
$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)));
Mais ça pose problème: on me dis que la variable $periode n'est pas définie (voir mon message précédent.
Page javascript:
[javascript]
function Ajax() // Fonction pour s'adapter à Internet Explorer
{
var request = false; //Initialisation
try { request = new ActiveXObject('Msxml2.XMLHTTP'); }
catch (err2) {
try { request = new ActiveXObject('Microsoft.XMLHTTP'); } //IE
catch (err3) {
try { request = new XMLHttpRequest(); } //Tout explorer
catch (err1) { request = false; }
}
}
return request;
}
var xhr = Ajax(); //Fonction pour envoyer requête ajax
var boutonprec = document.getElementById(getAJAXmois('periodePrec'));
var boutonsuiv = document.getElementById(getAJAXmois('periodeSuiv'));
xhr.open("POST", "change_month.php", true); //Ca peut être GET aussi
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
var periode = boutonprec;
var periode = boutonsuiv;
xhr.send("periode=" + periode); // Ici tu peux faire passer des variables vers ta cible
xhr.onreadystatechange; // c'est cette partie qui vas nous intéresser !
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;
//Ici ton traitement, tu récupères la réponse avec xhr.responseText
//Si ton script php affiche ton calendrier dans un format html tu peux
//directement l'afficher dans ta div prévu pour avec innerHTML; ex:
//document.getElementById('output').innerHTML = xhr.responseText;
} else {
alert("Error - ") + request.status + ":" + request.statusText;
}
};
[/javascript]
Page php:
<?php
$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)));
if (isset($_POST['periode'])){
showCalendar(htmlentities($_POST['periode']));
}
?>
Je reconnais avoir une difficulté à bien dissocier le code php que je mets dans ma page de réservations
et celui que je mets dans cette page-là.
3) Je viens d'identifier un problème embêtant dans mon calendrier.
J'ai voulu attendre un peu pour être sûr que le problème est bien là.
Les jours du calendrier sont écris sur des lignes de sept jours.
Par exemple pour septembre, sur la première ligne j'ai 1, 2, 3, 4, 5, 6, 7,
sur la deuxième j'ai 8, 9, 10, 11, 12, 13, 14,
etc...
Je dois normalement pouvoir en tant qu'utilisateur choisir n'importe
lequel des jours du mois sauf le jour d'aujourd'hui.
Il se trouve que je ne peux pas choisir un des jours se trouvant sur la deuxième
ligne du mois (ce mois-ci par exemple, pas possible de réserver pour le 8, le 9, le 10, le 11,
le 12, le 13 ou le 14 septembre).
J'ai se problème quelque soit le mois courant.
Je ne sais pas trop d'où ça vient.
Je pense que ça doit venir de:
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
Mais je ne vois pas pourquoi et où exactement ça cloche.
4) Enfin, pour parler du dernier problème que j'ai à propos du calendrier,
sur ma page de traitement du formulaire de réservation j'ai ce code qui n'est pas pris en compte:
#vérification du remplissage des champs.
if (!isset($variable1) && !isset($variable2) && !isset($variable3) && !isset($variable4) && !isset($variable5) && !isset($variable6) && !isset($variable7) && !isset($variable8) && !isset($variable9)){
} else {
echo '<body onLoad="alert(\'Seul le dernier champs est facultatif. Veuillez remplir tous les autres champs.\')">';
echo '<meta http-equiv="refresh" content="0;URL=reservations.php">';
}
C'est à dire que même avec des champs vide la nouvelle ligne rentre dans la table.
Par contre, exactement le même code dans la page de traitement des identifiants (nom d'utilisateur et mot de passe )
le code marche à la perfection:
#vérification du remplissage des champs.
if (!isset($identifiant1) && !isset($identifiant2) && !isset($identifiant3)){
} else {
echo '<body onLoad="alert(\'Veuillez saisir les trois champs.\')">';
echo '<meta http-equiv="refresh" content="0;URL=identification.php">';
}
[/php]
Ca ne vient à priori pas du code puisque c'est EXACTEMENT le même.
Sur la page de traitement des identifiants je ne suis pas encore sur ma session alors
que sur celle du traitement du formulaire de réservations si.
Est-ce que ça viendrait de là?
Désolé encore pour toutes ces questions.
Malheureusement, c'est encore un peu la galère
et je bloques vraiment sur ces points.