inserer un while dans un for ??

Eléphanteau du PHP | 18 Messages

17 avr. 2015, 11:39

Bonjour à tous ,

j'explique mon questionnement :

j'ai suivi un tuto pour réaliser un calendrier ,j'ai connecter une bdd et j'y ai ajouter une condition pour qu'il m'affiche en vert
les jours qui ne sont pas deja enregistrer dans la bdd , et en rouge pour les jours déjà pris .
le problème que je rencontre aujourd'hui , c'est qu'il ne m'affiche sur le calendrier que mon premier enregistrement de date prise , et en ignore les autres .
j'ai bien essayé de rajouter une fonction while , mais il m'affiche calendriers avec une date prise dans chacun d'eux .

voici mon code :

Code : Tout sélectionner

<?php { $BDD = mysql_connect(""); // Connexion à la base de données. mysql_select_db(""); $sql = "SELECT * FROM admin_rdv "; // on lance la requête (mysql_query) et on impose un message d'erreur si la requête ne se passe pas bien (or die) $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error()); // on récupère le résultat sous forme d'un tableau $data = mysql_fetch_array($req); // on libère l'espace mémoire alloué pour cette interrogation de la base mysql_free_result ($req); mysql_close (); } ?> <? $jour = date("w"); // numéro du jour actuel if (isset($_GET['jour'])) { $jour = intval($_GET['jour']); } if ($_GET['week'] == "pre") // Si on veut afficher la semaine précédente { $jour = $jour + 7; } elseif ($_GET['week'] == "next") // Si on veut afficher la semaine suivante { $jour = $jour - 7; } $nom_mois = date("F"); // nom du mois actuel $annee = date("Y"); // année actuelle $num_week = date("W"); // numéro de la semaine actuelle if (isset($_GET['week'])) { $nom_mois = date("F", mktime(0,0,0,date("n"),date("d")-$jour+1,date("y"))); $annee = date("Y", mktime(0,0,0,date("n"),date("d")-$jour+1,date("y"))); $num_week = date("W", mktime(0,0,0,date("n"),date("d")-$jour+1,date("y"))); } $dateDebSemaine = date("Y-m-d", mktime(0,0,0,date("n"),date("d")-$jour+1,date("y"))); $dateFinSemaine = date("Y-m-d", mktime(0,0,0,date("n"),date("d")-$jour+7,date("y"))); $dateDebSemaineFr = date("d/m/Y", mktime(0,0,0,date("n"),date("d")-$jour+1,date("y"))); $dateFinSemaineFr = date("d/m/Y", mktime(0,0,0,date("n"),date("d")-$jour+7,date("y"))); echo '<div id="titreMois" align="center"> <a href="calendrier_test.php?week=pre&jour='.$jour.'"><<</a> Semaine '.$num_week.' <a href="calendrier_test.php?week=next&jour='.$jour.'">>></a><br /> du '.$dateDebSemaineFr.' au '.$dateFinSemaineFr.' </div>'; $jourTexte = array('',1=>'Lundi', 'Mardi', 'Mercredi', 'Jeudi', 'Vendredi', 'Samedi', 'Dimanche'); $plageH = array(1=>'09:00', '10:00', '11:00', '12:00', '13:00', '14:00', '15:00', '16:00', '17:00', '18:00', '19:00'); switch($nom_mois) { case 'January' : $nom_mois = 'Janvier'; break; case 'February' : $nom_mois = 'Février'; break; case 'March' : $nom_mois = 'Mars'; break; case 'April' : $nom_mois = 'Avril'; break; case 'May' : $nom_mois = 'Mai'; break; case 'June' : $nom_mois = 'Juin'; break; case 'July' : $nom_mois = 'Juillet'; break; case 'August' : $nom_mois = 'Août'; break; case 'September' : $nom_mois = 'Septembre'; break; case 'October' : $nom_mois = 'Otober'; break; case 'November' : $nom_mois = 'Novembre'; break; case 'December' : $nom_mois = 'Décembre'; break; } echo '<br/> <div id="titreMois" align="center"> <h2>'.$nom_mois.' '.$annee.'</h2> </div>'; echo '<table border="1" align="center">'; // en tête de colonne echo '<tr>'; for($k = 0; $k < 8; $k++) { if($k==0) echo '<th>'.$jourTexte[$k].'</th>'; else echo '<th><div>'.$jourTexte[$k].' '.date("d", mktime(0,0,0,date("n"),date("d")-$jour+$k,date("y"))).'</div></th>'; } echo '</tr>'; // les 2 plages horaires : matin - midi for ($h = 1; $h <= 11; $h++) { echo '<tr> <th> <div>'.$plageH[$h].'</div> </th>'; // les infos pour chaque jour for ($j = 1; $j < 8; $j++) { if ($data['date_rdv'] == date("d", mktime(0,0,0,date("n"),date("d")-$jour+$j,date("y"))) && $data['jours_rdv'] == $jourTexte[$j] && $data['heure_rdv'] == $plageH[$h]) { echo '<td style="background-image:url(images/rouge.png);"></td>'; } else { echo '<td style="background-image:url(images/vert.png);text-align:center;"><a href="test2.php?heure='.$plageH[$h].'&jours='.$jourTexte[$j].'&date= '.date("d", mktime(0,0,0,date("n"),date("d")-$jour+$j,date("y"))).'&mois='.$nom_mois.'&annee='.$annee.'">Libre</a></td>'; } } echo '</td> </tr>'; } echo '</table>'; ?>
merci pour votre

Eléphanteau du PHP | 42 Messages

17 avr. 2015, 16:15

Bonjour,

Il est normal que votre script ne teste que la première valeur retournée dans votre bdd car
vous ne faite pas décaler le pointeur en quelque sorte. Pour cela, il faudrait effectivement utiliser un WHILE.

j'ai corrigé votre script pour que cela fonctionne (remarque: ce n'est pas optimisé et peut-être consomateur en ressource car plusieurs requêtes sont faites dans la bdd):

Code : Tout sélectionner

<?php $BDD = mysql_connect(""); // Connexion à la base de données. mysql_select_db(""); ?> <? $jour = date("w"); // numéro du jour actuel if (isset($_GET['jour'])) { $jour = intval($_GET['jour']); } if ($_GET['week'] == "pre") // Si on veut afficher la semaine précédente { $jour = $jour + 7; } elseif ($_GET['week'] == "next") // Si on veut afficher la semaine suivante { $jour = $jour - 7; } $nom_mois = date("F"); // nom du mois actuel $annee = date("Y"); // année actuelle $num_week = date("W"); // numéro de la semaine actuelle if (isset($_GET['week'])) { $nom_mois = date("F", mktime(0,0,0,date("n"),date("d")-$jour+1,date("y"))); $annee = date("Y", mktime(0,0,0,date("n"),date("d")-$jour+1,date("y"))); $num_week = date("W", mktime(0,0,0,date("n"),date("d")-$jour+1,date("y"))); } $dateDebSemaine = date("Y-m-d", mktime(0,0,0,date("n"),date("d")-$jour+1,date("y"))); $dateFinSemaine = date("Y-m-d", mktime(0,0,0,date("n"),date("d")-$jour+7,date("y"))); $dateDebSemaineFr = date("d/m/Y", mktime(0,0,0,date("n"),date("d")-$jour+1,date("y"))); $dateFinSemaineFr = date("d/m/Y", mktime(0,0,0,date("n"),date("d")-$jour+7,date("y"))); echo '<div id="titreMois" align="center"> <a href="calendrier_test.php?week=pre&jour='.$jour.'"><<</a> Semaine '.$num_week.' <a href="calendrier_test.php?week=next&jour='.$jour.'">>></a><br /> du '.$dateDebSemaineFr.' au '.$dateFinSemaineFr.' </div>'; $jourTexte = array('',1=>'Lundi', 'Mardi', 'Mercredi', 'Jeudi', 'Vendredi', 'Samedi', 'Dimanche'); $plageH = array(1=>'09:00', '10:00', '11:00', '12:00', '13:00', '14:00', '15:00', '16:00', '17:00', '18:00', '19:00'); switch($nom_mois) { case 'January' : $nom_mois = 'Janvier'; break; case 'February' : $nom_mois = 'Février'; break; case 'March' : $nom_mois = 'Mars'; break; case 'April' : $nom_mois = 'Avril'; break; case 'May' : $nom_mois = 'Mai'; break; case 'June' : $nom_mois = 'Juin'; break; case 'July' : $nom_mois = 'Juillet'; break; case 'August' : $nom_mois = 'Août'; break; case 'September' : $nom_mois = 'Septembre'; break; case 'October' : $nom_mois = 'Otober'; break; case 'November' : $nom_mois = 'Novembre'; break; case 'December' : $nom_mois = 'Décembre'; break; } echo '<br/> <div id="titreMois" align="center"> <h2>'.$nom_mois.' '.$annee.'</h2> </div>'; echo '<table border="1" align="center">'; // en tête de colonne echo '<tr>'; for($k = 0; $k < 8; $k++) { if($k==0) echo '<th>'.$jourTexte[$k].'</th>'; else echo '<th><div>'.$jourTexte[$k].' '.date("d", mktime(0,0,0,date("n"),date("d")-$jour+$k,date("y"))).'</div></th>'; } echo '</tr>'; // les 2 plages horaires : matin - midi for ($h = 1; $h <= 11; $h++) { echo '<tr> <th> <div>'.$plageH[$h].'</div> </th>'; // les infos pour chaque jour for ($j = 1; $j < 8; $j++) { $sql = "SELECT * FROM admin_rdv "; // on lance la requête (mysql_query) et on impose un message d'erreur si la requête ne se passe pas bien (or die) $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error()); while ( $data = mysql_fetch_array($req)) { if ($data['date_rdv'] == date("d", mktime(0,0,0,date("n"),date("d")-$jour+$j,date("y"))) && $data['jours_rdv'] == $jourTexte[$j] && $data['heure_rdv'] == $plageH[$h]) { echo '<td style="background-image:url(images/rouge.png);"></td>'; } else { echo '<td style="background-image:url(images/vert.png);text-align:center;"><a href="test2.php?heure='.$plageH[$h].'&jours='.$jourTexte[$j].'&date= '.date("d", mktime(0,0,0,date("n"),date("d")-$jour+$j,date("y"))).'&mois='.$nom_mois.'&annee='.$annee.'">Libre</a></td>'; } } // on libère l'espace mémoire alloué pour cette interrogation de la base mysql_free_result ($req); } echo '</td> </tr>'; } echo '</table>'; mysql_close (); ?>