OVH Cloud OVH Cloud

WHILE : probleme de passage en revue ds un mysql_fetch_array()

2 réponses
Avatar
Tiny ^_^
Bonjour,

Je suis en train de faire une application de prise de rendez-vous en PHP.
Voila le fonctionnement : on sélectionne un jour (jj + mm + aaaa) puis j'affiche les plages horaires
libre ou OQP.
NB : je me suis compliqué la tache car j'ecris ma boucle FOR en heure et ensuite pr les comparaison
je "colle" 00 ou 30 à l'ehure de i...

Je me demande si mon code n'aurait pas une erreur dans ma boucle while car pr un rdv dans la table
il affiche bien toutes les itération en libre sauf une ou c ecrit OQP, mais quand il y a plus d'un
rdv, il n'affiche que la premiere itération qui est oqp !!
la page se trouve sur www.vidal-formation.fr/rdv/prendre.php il y a normalement un rendez-vous à
11.30 / 15.30 et 18.00

Voila mon code :


Code:
//je vais voir si un/des rdv = à jjmmaaa existe(nt), et j'en fais un tableau avec
mysql_fetch_array et je compte le nombre de lignes avec mysql_num_row().

//Ensuite dans une boucle, j'affiche toutes les plages horaires, mais avant je souhaite passer
en revue toutes les réponses de ma requete pr voir si le champs heure (des rdv existants) est égale
au i de ma boucle FOR

FOR($i=8;$i<=20;$i++)
{
..$iRond="$i$rond";
..$iDemie="$i$demie";
..$ifin=$i+1;
..$ifinRond="$ifin$rond";
..$ifinDemie="$ifin$demie";
..$rdv="false";
..$j=0;

..//on fait une boucle qui va vérifier, en fonction de l'indice des enregistrements dans le
tablo si un élément du tableau contient un rdv à l'heure $i
..WHILE(($rdv=="false") AND ($j<=$nombreLignes))
....{
....//si l'heure du rdv enregistré == heure de $i
....if ($tablo['heure']==$iRond)
......{
......//ALORS on passe rdv à vrai puisqu'il existe un rdv à la meme heure que $i et on sort de
la boucle WHILE (car la cdtion n'est plus remplie)
......$rdv="true";
......}
....//SINON SI l'heure enregistrée == une demie
....ELSEIF ($tablo['heure']==$iDemie)
......{
......//ALORS on passe rdv à vrai puisqu'il existe un rdv à la meme heure que $i et on sort de
la boucle WHILE (car la cdtion n'est plus remplie)
......$rdv="true";
......}
..//on ajoute 1 à l'indice pr continuer la boucle si ce RDV n'est pas à la même heure.
..$j=$j+1;
..}
..//SI un rdv existe à la meme heure ALORS
..IF($rdv=="true")
....{
....//si l'heure du rdv est un chiffre rond ALORS
....IF($tablo['heure']==$iRond)
......{
......echo "horaires rond OQP";
......echo "horaires demie libre";
......}
....//SINON on écrit l'heure avec le demie
....echo "horaires rond libre";
....echo horaires demie OQP";
....}
..//SINON le rdv n'existe pas donc on ecrit les horaires LIBRE
..ELSE
....{
....echo "horaires ronds libres";
....echo "horaires demie libres";
..}
}

Seb.

2 réponses

Avatar
Pimousse
salut,

déjà faudra m'expliquer cette suite de rdv :

8 h a 9 h
8 h 30 a 9 h 30
9 h a 10 h
9 h 30 a 10 h 30 etc .....

moi j'ai pas le don d'ubiquité .....

après je vois pas très bien prq tu stockes ds un tableau les résultats
de ta requête qui te dit quels st les rdv pris
amha je ferais plutot :

en considérant que ta base stockant les rdv a deux champs : l'état du
créneau (occupé ou non) - etat_creneau - et son rang ds la journée (1
pour 8-8h30, 2 pour 8h30-9h enfin tu t'arrnages ... ;o)) - numero_creneau -.

tu crées un vecteur VecteurCréneau, de la taille du nbre de créneau max
ds une journée et tu le remplies de 0 (y a une fonction pour ça je
crois, je sais même pas s'il est pas possible de le remplir avec une
constante lorsqu'on le déclare)

while($row=@mysql_fetch_array($resultDeLaRequeteDesRDVOccupés))
{
if $row['etat_creneau']==1 //cad créneau occupé
VecteurCréneau[$row['numero_creneau']]=1;
}

après tu fais une autre boucle while qui parcours ce vecteur en
intégralité .... et tu fais ton affichage

c'est peut etre une solution ;o)

@++
Pimousse
Avatar
Niko

J'avais fait un script de calendrier et de gestion de RV dans le temps,
j'avais résolu toutes mes prises de tête en travaillant à partir des
timestamps UNIX (nombre de secondes écoulées depuis le 1/1/1970 -
accessible avec la fonction time()) et les fonctions date() et
mktime().

L'avantage est que c'est hyper manipulable en terme de tri...

Du style pour parcourir ta journée, demi-heure par demi-heure :

<?php
$jour = date("d");
$mois = date("m");
$annee = date("Y");
$day_start = mktime(0,0,0,$mois,$jour,$annee); // Début de la journée
$day_end = mktime(0,0,0,$mois,$jour+1,$annee); // Début de la
journée
$laps = 30 * 60; // Palier de base, en secondes (ici, 30
minutes)
echo "<p>Planning du $jour-$mois-$annee :</p>";
for ($ts=$day_start; $ts<$day_end; $ts+=$laps) {
echo date("H:i", $ts)." - ".date("H:i", $ts + $laps)." : <a
href='#'>Rendez-vous</a><br>";
}
?>

Après, si tes debuts et fins de rv sont en timestamp unix dans ta base,
rien ne t'empêche de faire une requete pour afficher tous les rv de
cette journée et stocker les résultats dans un tableau que tu check
pour chaque demi heure de la journée.

Le plus rigolo, c'est que si demain tu veux gerer les quarts d'heures
pour la prise de rendez-vous, tu change $laps pour $laps = 15 * 60 et
ayé.

Voilou.

Niko

--
Niko
Tarmo en devenir
Enlever nospam- pour me répondre