IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Boucle dans un tableau


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2013
    Messages : 10
    Par défaut Boucle dans un tableau
    Alors j'ai mis en titre "problème de boucle" parce que je pense que mon problème vient de là, après je me trompe peut être.

    Voila mon but est de faire un tableau qui colorerait une case quand la personne est absente, information qui est dans ma base de données, la première colonne étant les personnes, la première ligne étant les jours du mois.

    Pour l'instant, avec mon script, les absences s'affiche bien mais il me répète mon tableau autant de fois qu'il y a d'absence, or forcement moi je ne le voudrait que dans un. J'ai essayé de positionner ma boucle a tout les endroit possible mais soit il ne m'affichait qu'une seule absence, soit les autres absences s'affichaient a la suite de la premiere et donc pas à la bonne place.

    Ce n'est pas mon premier post sur un forum pour demander de l'aide, je n'ai pas eu de réponse satisfaisante pour le moment, voir meme parfois pas de reponse du tout... C'est dans le cadre d'un stage en entreprise il faut vraiment que je me sorte de ce probleme

    Donc ceci est mon script qui normalement dois afficher et remplir un tableau en fonction de ma base de données, il est appelé dans un autre script HTML par un bouton et une fonction ajax.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    <?php
    	session_start();
    	include_once('connexion.inc.php');
     
    	$sql = "Select * from deplacement";
    	$resultat = $dbh->query($sql);
    	$row=$resultat->fetch();
     
    	$mois = date('n');
    	$jourJ = date('d');
    	$libMois = ['Janvier', 'Février', 'Mars', 'Avril', 'Mai', 'Juin', 'Juillet', 'Aout', 'Septembre', 'Octobre', 'Novembre', 'Decembre'];
    	$moisEnCours = $libMois[date('n')-1];
    	$jourParMois = [31,28,31,30,31,30,31,31,30,31,30,31];
    	$listeEmployer = ['LARTIGUE', 'TEXEIRA', 'FLEURY', 'GREGORY', 'JOUY', 'PANON', 'HUSSON', 'RAUNER', 'DEGUGLIELMO', 'BEAUCOTE'];
    	$nbEmpl = count($listeEmployer);
    	$anneeEnCours = date ('y');
    	$nbJourDuMois = $jourParMois[date('n')-1];
    	$semEnCours = date('W');
     
    	echo ("<table id='tableau'>
    		<thead id='thead'>
    			<caption>Nous sommes le $jourJ $moisEnCours</caption>
    			<tr><th>Technicien</th>
    			");
    			for ($i=1; $i<=$nbJourDuMois; $i++) {
    				$semDate = date('W',mktime(0,0,0, $mois, $i, $anneeEnCours));
    				echo ("<th>$semDate</th>");
    			}
    			echo ('</tr>
    			<tr><th></th>');
    			for ($i=1; $i<=$nbJourDuMois; $i++) {
    				echo ("<th id='jour' class='jour'>$i</th>");
    			}
    			echo('</tr>
    		</thead>
    		<tbody id="tbody">
    			');
    			$ligne=1;
    			while($row){
    				foreach ($listeEmployer as $element) {
    					echo ("<tr id='$element' class='ligne'><td>$element</td>");
    						for ($jourP=1; $jourP<=$nbJourDuMois; $jourP++) {
    							$tech = $row['technicien'];
    							$jourD = $row['jour'];
    							if ($element == $tech) {
    								if ($jourD == $jourP) { 				
    									$tech = $row['technicien'];
    									$jourD = $row['jour'];
    									$mois = $row['mois'];
    									$annee = $row['annee'];
    									$nbJ = $row['nbJour'];
    									$type = $row['type'];
    									switch ($nbJ) {
    										case 1 : 
    											$taille = '25px';
    										break;
    										case 2 : 
    											$taille = '53px';
    										break;
    										case 3 : 
    											$taille = '81px';
    										break;
    										case 4 : 
    											$taille = '109px';
    										break;
    										case 5 : 
    											$taille = '137px';
    										break;
    										case 6 : 
    											$taille = '193px';
    										break;
    										case 7 : 
    											$taille = '221px';
    										break;
    										case 8 : 
    											$taille = '249px';
    										break;
    										case 9 : 
    											$taille = '276px';
    										break;
    										case 10 : 
    											$taille = '304px';
    										break;
    										case 11 : 
    											$taille = '332px';
    										break;
    										case 12 : 
    											$taille = '360px';
    										break;
    										case 13 : 
    											$taille = '388px';
    										break;
    										case 14 : 
    											$taille = '416px';
    										break;
    										case 15 : 
    											$taille = '444px';
    										break;
    										case 16 : 
    											$taille = '472px';
    										break;
    										case 17 : 
    											$taille = '500px';
    										break;
    										case 18 : 
    											$taille = '528px';
    										break;
    										case 19 : 
    											$taille = '556px';
    										break;
    										case 20 : 
    											$taille = '584px';
    										break;
    										case 21 : 
    											$taille = '612px';
    										break;
    										case 22 : 
    											$taille = '640px';
    										break;
    										case 23 : 
    											$taille = '668px';
    										break;
    										case 24 : 
    											$taille = '696px';
    										break;
    										case 25 : 
    											$taille = '724px';
    										break;
    										case 26 : 
    											$taille = '752px';
    										break;
    										case 27 : 
    											$taille = '780px';
    										break;
    										case 28 : 
    											$taille = '808px';
    										break;
    										case 29 : 
    											$taille = '836px';
    										break;
    									}	
    									echo("<td id='$jourP' class='jour'><div id ='$type' class='drag' style='width:$taille;'></div></td>");
    								}else{
    									echo("<td id='$jourP' class='jour'></td>");
    								}
    							}else{
    								echo("<td id='$jourP' class='jour'></td>");
    							}
    						}
    				}
    				echo("</tr>");
    				$ligne = $ligne+1;
    				$jourP = 1;
    				$row=$resultat->fetch();
    			}
    		echo("</tbody>
    	</table>");
    ?>

  2. #2
    Membre Expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 59
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Billets dans le blog
    8
    Par défaut
    Pour l'instant, avec mon script, les absences s'affiche bien mais il me répète mon tableau autant de fois qu'il y a d'absence,

    .../...

    Donc ceci est mon script qui normalement dois afficher et remplir un tableau en fonction de ma base de données, il est appelé dans un autre script HTML par un bouton et une fonction ajax.
    La page PHP que tu nous montres n'affiche qu'un tableau. Le problème vient peut-être de ta façon d'appeler ta page (ajax).
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  3. #3
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2013
    Messages : 10
    Par défaut
    Merci d'avoir pris le temps de repondre

    Pourquoi tu dis qu'elle n'affiche qu'un tableau ? J'ai ma requete
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $sql = "Select * from deplacement";
    	$resultat = $dbh->query($sql);
    	$row=$resultat->fetch();
    les informations que je récupère
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $tech = $row['technicien'];
    $jourD = $row['jour'];
    $mois = $row['mois'];
    $annee = $row['annee'];
    $nbJ = $row['nbJour'];
    $type = $row['type'];
    et qui s'affiche
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo("<td id='$jourP' class='jour'><div id ='$type' class='drag' style='width:$taille;'></div></td>");
    En effet je n'ai pas préciser mais j'ai un CSS qui en fonction de l'id colore d'une certaine couleur la case, soit si le "type" d'evenement est un déplacement, la case se colore en bleu, voila pourquoi la variable $type est inséré dans l'id et qu'on a l'impression de ne voir aucune valeur dans mon tableau.

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    la première colonne étant les personnes, la première ligne étant les jours du mois.
    ou viennent se placer les employeurs dans tout ça ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $jourD = $row['jour'];
    $mois = $row['mois'];
    $annee = $row['annee'];
    Tu as une date decoupée sur 3 colonnes ?

    C'est le nombre de jour d'absence a partir de la date donnée au dessus ?

    Au passage, tout ton switch pour la taille peut être remplacé par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $taille = 25 + ($nbJ - 1) * 28;
    mais bon de toute façon il va falloir le retirer car c'est une hérésie HTML ce que tu fais : si une cellule doit prendre deux colonnes, il faut utiliser colspan et pas doubler sa largeur.

    Sinon evidemment ce que tu fais ne va pas
    Il faut sortir complétement la lecture de ta base de donnée de la construction du tableau :
    1 - lire toutes les données dont tu as besoin dans la bdd (et pas l'intégralité de la table comme tu le fais) et stocker le resultat dans un tableau PHP.
    2 - construire le tableau avec des boucles : par chaque cellule du tableau (correspondant à un jour / tech), vérifier si cela correspond a une donnée du tableau PHP.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2013
    Messages : 10
    Par défaut
    Merci de ta réponse!

    Alors pour répondre à tes questions, quand j'ai dit personnes je voulais dire employers , oui oui je prefère découpé la date en 3 sinon je m'en sors pas ^^, nbJ correspond au nombre de jour du déplacement soit sa durée.
    Merci pour l'astuce de la taille, je ne voyais pas d'autre solutions malgré que je voyais bien que ma technique était ridicule et longue ^^'.
    Et pour finir tu dis que je ferais mieux d'utiliser que les données dont j'ai besoin et pas toute ma table or justement j'ai fait expres de faire une toute petite table qui ne contient que ce dont j'ai besoin?

    Donc j'ai essayer de chercher un peu toute suele avant de te demander mais.. Je ne sais pas comment mettre les résultats de ma requete dans un tableau php ? ^^'

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    quand j'ai dit personnes je voulais dire employers
    ou se placent les techniciens alors ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [phpToPDF] Boucle dans un tableau
    Par breizhlama dans le forum Bibliothèques et frameworks
    Réponses: 0
    Dernier message: 03/05/2010, 16h45
  2. [MySQL] Double boucle dans un tableau
    Par arthuro45 dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 10/08/2009, 17h56
  3. [Spip] résultat de boucle dans un tableau
    Par oceane751 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 4
    Dernier message: 20/08/2008, 10h23
  4. [MySQL] Pagination : faire une boucle dans un tableau ?
    Par benjam89 dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 13/09/2007, 20h10
  5. [Tableaux] Boucle dans un tableau
    Par apprenti-fab dans le forum Langage
    Réponses: 9
    Dernier message: 24/04/2006, 10h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo