satreix
Messages postés4Date d'inscriptionvendredi 5 janvier 2007StatutMembreDernière intervention14 mars 2011
-
11 mars 2011 à 03:37
satreix
Messages postés4Date d'inscriptionvendredi 5 janvier 2007StatutMembreDernière intervention14 mars 2011
-
14 mars 2011 à 01:03
Bonsoir ,
Je viens vers vous ce soir pour un problème de syntaxe selon moi mais ce pourrait être autre chose.
La fonction suivante est censée afficher un calendrier sous forme de table (le code de base viens de CodeSource). J'ai modifier une parti du code avec une connection SQL pour que le classe 'booked' soit ajouter aux jours entre deux date (des réservations que l'on affiche sous forme de calendrier en fait).
Mon problème et le suivant:
[*] sans mon bout de code le calendrier est montré en entier
[*] avec mon bout de code le calendrier est montré tronqué, on ne voit plus que les jours booked
Est-il possible d'avoir un peu d'aide, Merci!
<?php
//fonction d'affichage du mois suivant
function mois_suivant($m,$a){
//mois suivant, donc on incrémente de 1
$m++;
//si le mois est 13 il faut augmenter l'année de 1 et repasser le mois à 1
if($m==13){
$a++;
$m=1;
}
return '['.$_SERVER['PHP_SELF']. » ]";
}
//fonction d'affichage du mois précédent
function mois_precedent($m,$mois,$a){
$m--;
if($m==0){
$a--;
$m=12;
}
return '['.$_SERVER['PHP_SELF']. « ]";
}
function calendrier($m_donne,$a_donne){
// Tableau pour le noms des mois
$mois = array();
$mois[1] = "Janvier";$mois[2] = "Février";$mois[3] = "Mars";
$mois[4] = "Avril";$mois[5] = "Mai";$mois[6] = "Juin";
$mois[7] = "Juillet";$mois[8] = "Août";$mois[9] = "Septembre";
$mois[10] = "Octobre";$mois[11] = "Novembre";$mois[12] = "Décembre";
// Tableau pour le noms des jours
$jours = array();
$jours[1] = "Lu";$jours[2] = "Ma";$jours[3] = "Me";$jours[4] = "Je";
$jours[5] = "Ve";$jours[6] = "Sa";$jours[7] = "Di";
// On récupère le mois et l'année dans la barre de navigation
// Si rien n'est spécifié, il faut afficher le mois et l'année donnés par la fonction
if(isset($_GET['m'])){$m = $_GET['m'];}else{$m = $m_donne;}
if(isset($_GET['a'])){$a = $_GET['a'];}else{$a = $a_donne;}
// Calcul du nb de jours dans chaque mois, avec les années bisextiles
// les tableaux PHP commençant à 0, le premier mois est un mois "factice"
if (($a % 4) 0){$nbrjour array(0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);}
else{$nbrjour = array(0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);}
// On cherche grâce à cette fonction à quel jour de la semaine correspond le 1er du mois
$CAL_FRENCH = 0;
$premierdumois = jddayofweek(cal_to_jd($CAL_FRENCH, $m, 1, $a), 0);
if($premierdumois 0){$premierdumois 7;}
//Préparation du tableau avec le nom du mois et la liste des jours de la semaine
echo "";
if($m > date("n")){echo mois_precedent($m,$mois[$m],$a);}
echo ", $mois[$m] $a, "
.mois_suivant($m,$a)
.", ----
$jours[1], $jours[2], $jours[3], $jours[4], $jours[5], $jours[6], $jours[7], ----
\";
$jour=1; //Cette variable est celle qui va afficher les jours de la semaine
$joursmoisavant = $nbrjour[$m-1] - $premierdumois+2; //Celle-ci sert à afficher les jours du mois précédent qui apparaissent
$jourmoissuivant = 1; //Et celle-ci les jours du mois suivantif($m 1){$joursmoisavant $nbrjour[$m+11] - $premierdumois+2;} //Si c'est janvier, le mois d'avant n'est pas à 0 mais 31 jours!
//Et c'est parti pour la boucle for qui va créer l'affichage de notre calendrier !
for($i=1;$i<40;$i++){
$classed = 0;
if($i < $premierdumois){ // Tant que la variable i ne correspond pas au premier jour du mois, on fait des cellules de tableau avec les derniers jours du mois précédent
echo \"$joursmoisavant, \";
$joursmoisavant++;
}
else
{
//Dans ce else ou veut savoir si le jour appartien à une resa de la table dispo
$db = mysql_connect('localhost', 'root', '');
mysql_query(\"SET NAMES UTF8\");
mysql_select_db('locationparisonline',$db);
$sql = 'SELECT * FROM dispo';
$req = mysql_query($sql)or die('Erreur SQL !
'.$sql.'
'.mysql_error());
while($data = mysql_fetch_assoc($req))
{
$id = $data['id'];
}
if($jour date(\"d\") && $m date(\"n\")) //Si la variable $jour correspond à aujourd'hui, la case est d'une couleur différente
{echo \"$jour, \";}
elseif($id > 0){
//----------[DEBUT BOUCLE]------------
$whileRound = 0;
while($whileRound <= $id)
{
while($data = mysql_fetch_assoc($req))
{
// on affiche les informations de l'enregistrement en cours
list($ad, $md, $jd) = explode(\"-\", $data['begin_date']);
list($af, $mf, $jf) = explode(\"-\", $data['end_date']);
if($a >= $ad && $a <= $af && $m >= $md && $m <= $mf && $jour >= $jd && $jour <= $jf)
{echo \"$jour, \";}
else{$whileRound++;}
}
//------------[FIN BOUCLE]------------
mysql_close();
}
}
// C'est un jour libre et comme les autres
else{echo \"$jour, \";}
//On passe au lendemain
$jour++;
/*Si $jour est plus élevée que le nombre de jours du mois, c'est que c'est la fin du mois!
On remplit les cases vides avec les premiers jours des mois suivants, on ferme le tableau,
et on met la variable $i à 41 pour sortir de la boucle */
if($jour > ($nbrjour[$m])){
while($i % 7 != 0){
echo \"$jourmoissuivant, \";
$i++;
$jourmoissuivant++;
}
echo "
".$id;
$i=41;
}
}
// Si i correspond à un multiple de 7, on passe à la ligne suivante dans le tableau
if($i % 7 == 0){echo "</tr><tr>";}
}
}
?>
satreix
Messages postés4Date d'inscriptionvendredi 5 janvier 2007StatutMembreDernière intervention14 mars 2011 12 mars 2011 à 20:29
Pour le css:
/* Règles pour le calendrier de dispoonibilité */
/* TABLEAU */
.cal td{font-family:Verdana;text-align:center;vertical-align:middle}
/* NOM DU MOIS */
td.nom_mois{font-size:8pt;font-style:normal;font-weight:400}
/* FLECHES */
td.fleches{font-size:14pt;font-style:normal;font-weight:400}
/* NOMS DES JOURS*/
tr.noms_jours{width:15px;height:15px;font-size:8pt}
/*DATES*/
td.jours{width:15px;height:15px;border:1px solid #3CC;font-size:8pt;background:#cff}
/* AUJOURD'HUI */
td.today{width:15px;height:15px;border:1px solid #000;font-size:8pt;background:#ffc020}
/* CASES DES MOIS PRECEDENTS ET SUIVANTS*/
td.cases_vides{width:15px;height:15px;border:1px solid #F5F5F5;font-size:8pt;color:#C0C0C0}
/* Cases des mois réservés */
td.booked{width:15px;height:15px;border:1px solid #ca33cc;font-size:8pt;background:#ffccfc}
.cal a:link,.cal a:active,.cal a:visited {text-decoration:none;}
satreix
Messages postés4Date d'inscriptionvendredi 5 janvier 2007StatutMembreDernière intervention14 mars 2011 14 mars 2011 à 01:03
Bonsoir je me permet d'apporter mes avancées à mon sujet.
D'abord et comme je m'en doutais le bout de code qui casse tout est le code commenté ici.
<?php //Si $jour correspond à aujourd'hui, la class est "today"
if($jour = = date("d") && $m == date("n") && $a == date("Y"))
{echo "<td class="today">$jour</td>";}
/* else{
//On veut savoir si le jour appartien à une resa de la table dispo
$db = mysql_connect('localhost', 'root', '');
mysql_query("SET NAMES UTF8");
mysql_select_db('locationparisonline',$db);
$sql = 'SELECT * FROM dispo';
$req = mysql_query($sql)or die('Erreur SQL !
'.$sql.'
'.mysql_error());
//----------[DEBUT BOUCLE]------------
while($data = mysql_fetch_assoc($req))
{
// on affiche les informations de l'enregistrement en cours
list($ad, $md, $jd) = explode("-", $data['begin_date']);
list($af, $mf, $jf) = explode("-", $data['end_date']);
if($a >= $ad && $a <= $af && $m >= $md && $m <= $mf && $jour >= $jd && $jour <= $jf)
{echo "<td class="booked">$jour</td>";}
}
//------------[FIN BOUCLE]------------
mysql_close();
} */
// C'est un jour non réservé
else{echo "<td class="jour">$jour</td>";}?>
Ce que je veut faire dans cette parti du code:
si on affiche aujourd'hui >> class ="today"
si le jour est réservé >> class="booked"
si le jour n'est pas réservé >> class="jour"
Ce que le code fait:
-sans la partie commentée il y a bien affichage du calendrier mais sans la clss booked; tous les jours sauf today sont en class jour
-avec la partie commentée le calendrier n'affiche plus que les jours des autres mois, today et booked, mais plus de jours class jour; à la place il y a du vide.
J'espère que sa peut aider à résoudre mon problème.