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

Langage PHP Discussion :

Afficher la présence des agents durant le mois


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Homme Profil pro
    Cyberdocumentaliste
    Inscrit en
    Janvier 2014
    Messages
    160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Cyberdocumentaliste
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2014
    Messages : 160
    Points : 71
    Points
    71
    Par défaut Afficher la présence des agents durant le mois
    Bonjour à tous,

    Je voudrais avoir une table (ou quelque chose que vous suggérez afin d'afficher la présence des agents durant le mois à partir de la BDD).

    Table BDD :

    Nom : 14.PNG
Affichages : 118
Taille : 78,8 Ko

    Avancement :

    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
    <table class="table table-bordered table-striped">
    	<thead>
     
    		<tr>
    		<th> Technicien </th>
    		<?php 
     
     
    			$nb = date("t", mktime(0, 0, 0, 7, 1, 2018));
     
    			for($i=1;$i<$nb+1;$i++)
    			{
    			   echo "<th>
    						".$i."
    						
    					</th>";
    			}
     
    		?>				
    		</tr>
     
    	</thead>
    	<tbody>
    		<?php
    		$query=$conn->query("SELECT * FROM `techniciens` as t, presence as p WHERE t.id_technicien=p.id_technicien ORDER BY date ASC");
    		while($row=mysqli_fetch_object($query))
    		{
     
    		 echo "<tr>
    		 		<td>$row->technicien</td>
    		 		<td>$row->id_code_abs</td>
    		 		</tr>";
    		}
    		?>
    	</tbody>
    </table>
    Nom : 15.PNG
Affichages : 113
Taille : 15,2 Ko

    Moi ce que je voudrais avoir c'est le résultat comme ci-dessous :

    Nom : 16.PNG
Affichages : 108
Taille : 6,9 Ko

    Pouvez-vous me guider SVP ?

  2. #2
    Membre émérite
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Points : 2 522
    Points
    2 522
    Par défaut
    Tu peux t'inspirer de ça. (pas testé)

    Code php : 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
    <?php
    $tabJours = array();
    $nb = date("t", mktime(0, 0, 0, 7, 1, 2018));
     
    for($i=1;$i<$nb+1;$i++)
    {
       $tabJours[$i] = $i;
    }
    $query=$conn->query("SELECT * FROM `techniciens` as t, presence as p WHERE t.id_technicien=p.id_technicien ORDER BY date ASC");
    while($row=mysqli_fetch_object($query))
    {
     if (!isset($tabagents[$row->technicien]))
     {
      // initialisation de tous les jours du mois
      $tabagents[$row->technicien] = array();
      foreach($tabJours as $jour)
      {
       $tabagents[$row->technicien][$jour] = "";
      }
     }
     $tabagents[$row->technicien][substr($row->date, 8,2)] = $row->id_code_abs;
    }
    ?>
    <table>
      ici tu parcours $tabJours pour afficher tous les jours du mois (en tête)
     
      ici tu parcours $tabagents pour afficher tous les jours d'une personne (ligne)
    </table>

    Tu peux aussi créer le tableau de cette manière
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <table>
      <tr><th>Technicien</th><th><?php print implode("</th><th>",$tabJours);?></th></tr><?php
      foreach ($tabagents as $technicien => $listeJours)
      {?>
       <tr><td><?php print $technicien;?></td><td><?php print implode("</td><td>",$listeJours);?></td></tr><?php
      }?>
    </table>

  3. #3
    Membre régulier
    Homme Profil pro
    Cyberdocumentaliste
    Inscrit en
    Janvier 2014
    Messages
    160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Cyberdocumentaliste
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2014
    Messages : 160
    Points : 71
    Points
    71
    Par défaut
    Citation Envoyé par badaze Voir le message
    Tu peux t'inspirer de ça. (pas testé)

    Code php : 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
    <?php
    $tabJours = array();
    $nb = date("t", mktime(0, 0, 0, 7, 1, 2018));
     
    for($i=1;$i<$nb+1;$i++)
    {
       $tabJours[$i] = $i;
    }
    $query=$conn->query("SELECT * FROM `techniciens` as t, presence as p WHERE t.id_technicien=p.id_technicien ORDER BY date ASC");
    while($row=mysqli_fetch_object($query))
    {
     if (!isset($tabagents[$row->technicien]))
     {
      // initialisation de tous les jours du mois
      $tabagents[$row->technicien] = array();
      foreach($tabJours as $jour)
      {
       $tabagents[$row->technicien][$jour] = "";
      }
     }
     $tabagents[$row->technicien][substr($row->date, 8,2)] = $row->id_code_abs;
    }
    ?>
    <table>
      ici tu parcours $tabJours pour afficher tous les jours du mois (en tête)
     
      ici tu parcours $tabagents pour afficher tous les jours d'une personne (ligne)
    </table>

    Tu peux aussi créer le tableau de cette manière
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <table>
      <tr><th>Technicien</th><th><?php print implode("</th><th>",$tabJours);?></th></tr><?php
      foreach ($tabagents as $technicien => $listeJours)
      {?>
       <tr><td><?php print $technicien;?></td><td><?php print implode("</td><td>",$listeJours);?></td></tr><?php
      }?>
    </table>
    Nickel, ça marche, merci beaucoup.

    j'essaye de remplir le vide par des "-";
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     $tabagents[$row->technicien][$jour] = "-";
    mais ça me donne comme suivant :

    Nom : 18.PNG
Affichages : 90
Taille : 21,9 Ko

    Autre chose que j'ai essayé, j'ai rajouté une condition à la requête afin d'afficher le tableau par mois. le problème c'est que s'il n y a pas de données le tableau ne s'affichera pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $query=$conn->query("SELECT * FROM `techniciens` as t, presence as p WHERE t.id_technicien=p.id_technicien AND MONTH (date) = '$type' ORDER BY date ASC");
    Je voudrais avoir le tableau avec tous les techniciens même s'ils ont pas des enregistrements sur table.

    Par ex le Mois de Janvier on a aucun enregistrement je voudrais afficher le tableau vide afin que je puisse le remplir.

    Pareil pour le mois 6 on a des enregistrement pour 3 techs il n'affiche que 3 lignes.

    Merci d'avance.

  4. #4
    Membre émérite
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Points : 2 522
    Points
    2 522
    Par défaut
    Pour le premier point. Si tu as un espace à la place du tiret c'est sûrement parce que $row->id_code_abs a une valeur.

    Pour ce qui est du second point. Dans ta requête SQL initiale il manque l’année de la date dans ta clause where.

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT * FROM `techniciens` as t
    LEFT JOIN presence as p ON t.id_technicien=p.id_technicien 
    ORDER BY date ASC

    Un conseil. Il vaut mieux ne mettre que les champs utilisés dans la clause select plutôt que de mettre un * qui peut ramener plein de données inutiles.

  5. #5
    Membre régulier
    Homme Profil pro
    Cyberdocumentaliste
    Inscrit en
    Janvier 2014
    Messages
    160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Cyberdocumentaliste
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2014
    Messages : 160
    Points : 71
    Points
    71
    Par défaut
    Citation Envoyé par badaze Voir le message
    Pour le premier point. Si tu as un espace à la place du tiret c'est sûrement parce que $row->id_code_abs a une valeur.

    Pour ce qui est du second point. Dans ta requête SQL initiale il manque l’année de la date dans ta clause where.

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT * FROM `techniciens` as t
    LEFT JOIN presence as p ON t.id_technicien=p.id_technicien 
    ORDER BY date ASC

    Un conseil. Il vaut mieux ne mettre que les champs utilisés dans la clause select plutôt que de mettre un * qui peut ramener plein de données inutiles.
    J'ai vérifié sur la table presence et j'ai trouvé que les vides viennent des enregistrements "Vide" pour chaque date inséré sur la table.

    Nouvelle requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT code_abs, technicien, t.id_technicien , date FROM `techniciens` as t LEFT JOIN presence as p ON t.id_technicien=p.id_technicien  AND MONTH (date) = '$mois' AND code_abs !='' ORDER BY date ASC
    La ça marche mais j'ai un petit soucis je sais pas d'où il vient ( J'ai rajouté des boutons (Orange) pour ajouter un nouveau code_abs ou le modifier (Vert) ) et là je me trouve avec des petits boutons sur le 31éme jour :

    Nom : 44.PNG
Affichages : 84
Taille : 26,9 Ko

    Pouvez-vous me guider afin que je puise insérer un nouveau code_abs pour chaque tech/jour.

    Comme début j'ai décidé d'envoyer 3 params par ajax et ça ne fonctionne pas encore :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     foreach($tabJours as $jour)
    	 {
    	    $bout="<button type='button' name='edit' value='Edit'   id='".$jour."-".$mois."-".$row->id_technicien."'  data-toggle='modal' data-target='#add_data_Modal' class='btn btn-warning edit_data'>+</button>";
    	    $tabagents[$row->technicien][$jour] = $bout ;
    	 }
    Je vous remercie beaucoup pour le temps accordé.

  6. #6
    Membre émérite
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Points : 2 522
    Points
    2 522
    Par défaut
    Il faut que tu regardes le code html de la page pour voir comment sont codés ces « images ».

    3 choses.
    - il te manque l’année dans ta clause where.
    - l’id d’un élément ne doit pas commencer par un chiffre (voir l’id des boutons).
    - tu utilises le tag button. Ce n’est donc pas la peine de mettre type="button".

    Il y a peut-être d’autres soucis. Je n’ai pas regardé à fond.

  7. #7
    Membre régulier
    Homme Profil pro
    Cyberdocumentaliste
    Inscrit en
    Janvier 2014
    Messages
    160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Cyberdocumentaliste
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2014
    Messages : 160
    Points : 71
    Points
    71
    Par défaut
    Citation Envoyé par badaze Voir le message
    Il faut que tu regardes le code html de la page pour voir comment sont codés ces « images ».

    3 choses.
    - il te manque l’année dans ta clause where.
    - l’id d’un élément ne doit pas commencer par un chiffre (voir l’id des boutons).
    - tu utilises le tag button. Ce n’est donc pas la peine de mettre type="button".

    Il y a peut-être d’autres soucis. Je n’ai pas regardé à fond.
    - Pour l'année je compte travailler seulement avec le mois.
    - je comprends pas, sur les id des boutons je rassemble le jour-mois-id_tech afin que je les passe par AJAX sur une page d'insertion.
    - C'est bon je les ai supprimé.

    Pour le problème d'affichage des boutons, j'ai insérer un enreg avec la date 2018-08-02 et là il s'affiche à coté :

    Nom : 6.PNG
Affichages : 81
Taille : 13,2 Ko

    Puis j'ai changé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     $tabagents[$row->technicien][substr($row->date, 8,2)]
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     $tabagents[$row->technicien][substr($row->date, 9,1)]
    et ça m'a donné ça :

    Nom : 69.jpg
Affichages : 80
Taille : 122,6 Ko

  8. #8
    Membre émérite
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Points : 2 522
    Points
    2 522
    Par défaut
    Je n'ai pas écrit qu'il fallait supprimer les id mais seulement que les id ne commencent pas par un chiffre.

    Je me répète.

    Il faut que tu regardes le code html de la page pour voir comment sont codés ces « images » => en regardant le html qui a été généré tu verras ta colonne en plus et à partir de là tu pourras voir ce qui ne va pas.
    Il te manque l’année dans ta clause where. => ou bien attends juillet 2019 pour te rendre compte que ça ne marche plus.


  9. #9
    Membre régulier
    Homme Profil pro
    Cyberdocumentaliste
    Inscrit en
    Janvier 2014
    Messages
    160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Cyberdocumentaliste
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2014
    Messages : 160
    Points : 71
    Points
    71
    Par défaut
    Citation Envoyé par badaze Voir le message
    Je n'ai pas écrit qu'il fallait supprimer les id mais seulement que les id ne commencent pas par un chiffre.

    Je me répète.

    Il faut que tu regardes le code html de la page pour voir comment sont codés ces « images » => en regardant le html qui a été généré tu verras ta colonne en plus et à partir de là tu pourras voir ce qui ne va pas.
    Il te manque l’année dans ta clause where. => ou bien attends juillet 2019 pour te rendre compte que ça ne marche plus.

    Je parlais de la suppression des tags "boutton".
    Pour l'année je travaille seulement pour cette année.

    Si j’enlève les images et je remets le code initial que tu m'as fournis le problème persiste. je pense que le problème n'arrive pas des <images>.

    j'ai réinitialisé le code et voila :

    Nom : code.PNG
Affichages : 92
Taille : 64,2 Ko

    Nom : dt.PNG
Affichages : 81
Taille : 4,5 Ko

    Nom : res.PNG
Affichages : 79
Taille : 3,2 Ko

    et si je change
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $tabagents[$row->technicien][substr($row->date, 8,2)]
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $tabagents[$row->technicien][substr($row->date, 9,1)]
    ça va me donner :

    Nom : 6.PNG
Affichages : 85
Taille : 13,2 Ko

    Car $tabJours[$i] conteint les jours sans "0" je pense.

    qu'est tu pense de l'analyse

  10. #10
    Membre émérite
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Points : 2 522
    Points
    2 522
    Par défaut
    Si c’est pour cette année seulement pourquoi dépenser autant d’énergie ? Et puis même c’est pas une raison pour ne pas faire les choses de manière correcte.

    Tu montres le code php. Je parle du code html qu’on peut voir en faisant un clic droit sur la page puis option "voir le source" ou quelque chose comme ça.

  11. #11
    Membre régulier
    Homme Profil pro
    Cyberdocumentaliste
    Inscrit en
    Janvier 2014
    Messages
    160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Cyberdocumentaliste
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2014
    Messages : 160
    Points : 71
    Points
    71
    Par défaut
    Citation Envoyé par badaze Voir le message
    Si c’est pour cette année seulement pourquoi dépenser autant d’énergie ? Et puis même c’est pas une raison pour ne pas faire les choses de manière correcte.

    Tu montres le code php. Je parle du code html qu’on peut voir en faisant un clic droit sur la page puis option "voir le source" ou quelque chose comme ça.
    Donc je t'explique, la liste déroulante des mois je l'ai fait par Ajax et si je compte faire la même chose pour les années, ça va me prendre du temps pour arriver au bon fonctionnement, du coup je me dis dés que je termine le fonctionnement et j'aille le résultat j’entame la partie année.

    Pour le deuxième point :

    1ere ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <td><button name="edit" value="Edit" id="-7-5" data-toggle="modal" data-target="#add_data_Modal" class="btn btn-success edit"></button></td>
    2eme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <td><button name="edit" value="Edit" id="-7-1" data-toggle="modal" data-target="#add_data_Modal" class="btn btn-success edit"></button></td>
    3eme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <td><button name="edit" value="Edit" id="-7-4" data-toggle="modal" data-target="#add_data_Modal" class="btn btn-success edit"></button></td>
    4eme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <td><button name="edit" value="Edit" id="-7-7" data-toggle="modal" data-target="#add_data_Modal" class="btn btn-success edit"></button></td>
    les autres sont affiché comme il faut, donc il n y a pas de <td> de plus.

    J'imagine que le problème vient de la requete ?

    car si tu remarques ceux qui ont déjà un code_abs sont bien affichés :

    Nom : sds.PNG
Affichages : 74
Taille : 35,7 Ko

  12. #12
    Membre régulier
    Homme Profil pro
    Cyberdocumentaliste
    Inscrit en
    Janvier 2014
    Messages
    160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Cyberdocumentaliste
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2014
    Messages : 160
    Points : 71
    Points
    71
    Par défaut
    La j'ai essayé de remplir les 4 premiers ligne par un code_abs et ça s'affiche correctement !!

    alors j'ai rajouté une condition
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ($row->code_abs!="")
    et maintenant ça marche.

    Merci pour le temps que tu m'as accordé ainsi que les conseils que tu m'as offert.

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

Discussions similaires

  1. Afficher les noms des mois
    Par brunetta24 dans le forum Pascal
    Réponses: 7
    Dernier message: 14/12/2011, 18h32
  2. [XL-2003] macro pour afficher les dates des troisièmes vendredi du mois
    Par julius999 dans le forum Macros et VBA Excel
    Réponses: 21
    Dernier message: 28/10/2009, 18h39
  3. Réponses: 1
    Dernier message: 03/10/2008, 12h43
  4. Réponses: 2
    Dernier message: 04/05/2006, 20h53

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