Problème de boucle / accès BDD

satreix Messages postés 4 Date d'inscription vendredi 5 janvier 2007 Statut Membre Dernière intervention 14 mars 2011 - 11 mars 2011 à 03:37
satreix Messages postés 4 Date d'inscription vendredi 5 janvier 2007 Statut Membre Dernière intervention 14 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>";}
}
}
?>

4 réponses

cod57 Messages postés 1653 Date d'inscription dimanche 7 septembre 2008 Statut Membre Dernière intervention 11 septembre 2013 19
11 mars 2011 à 09:52
bonjour

c'est ton css que tu devrais posté
et l'adresse de l'original

a++
0
satreix Messages postés 4 Date d'inscription vendredi 5 janvier 2007 Statut Membre Dernière intervention 14 mars 2011
12 mars 2011 à 07:14
Je poste le tout ce soir. Merci de cette réponse rapide.
0
satreix Messages postés 4 Date d'inscription vendredi 5 janvier 2007 Statut Membre Dernière intervention 14 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;}

Pour la page originale du script j'ai pris : http://www.phpcs.com/codes/CALENDRIER-ULTRA-SIMPLE-PERSONNALISABLE_44133.aspx

Un gros merci
0
satreix Messages postés 4 Date d'inscription vendredi 5 janvier 2007 Statut Membre Dernière intervention 14 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.
0
Rejoignez-nous