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 :

Faire un total des heures


Sujet :

Langage PHP

  1. #1
    Nouveau Candidat au Club
    Femme Profil pro
    Webmaster
    Inscrit en
    Juin 2018
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Juin 2018
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Faire un total des heures
    Bonjour à tous,

    Voilà à quoi sert mon code:
    Je récupère l'heure d'arrivée, de midi et de départ, je fais un cumule des heures de journée jusque là tout fonctionne parfaitement.
    Je voudrais récupérer les 5 valeurs totales et les additionner pour avoir le total sur 5 jours.
    Mon code fonctionne à moitié, puisque les 5 premiers jours sont parfaitement calculé (38H), mais ensuite au lieu de prendre les 5 suivantes il cumule (72H).
    Ma base de donnée
    Nom : Exemple.png
Affichages : 296
Taille : 40,1 Ko

    Nom : cumule.png
Affichages : 257
Taille : 52,3 Ko

    Mon code :
    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
     
    $sql = mysqli_query($bdd,"SELECT * FROM Travail ORDER BY date ");
    $nbreElements = 5; // tous les 5 éléments 
    $compteur = 0; // initialisation du compteur 
    $total = 0;	 
    echo "<div class=\"compact\"><div class=\"contenu\"><div class=\"titre\">Semaine ss</div>";  
    echo "<table>"; 
       echo "<tr>"; 
           echo "<th>Date</th>"; 
           echo "<th>Arrivée</th>"; 
           echo "<th>pause</th>"; 
           echo "<th>Départ</th>"; 	
           echo "<th>Total journée</th>"; 
           echo "<th>Options</th>"; 	   
       echo "</tr>"; 
     
       $counter = 0; 
       while ($donnees = mysqli_fetch_assoc($sql)) {
    		$data[] = $donnees['total_journee'];
    		// $total = 0;	
    	echo '<form method="post" id="semi" action="index.php?id='.$donnees['id'].'" enctype="multipart/form-data">';
    	echo '<input type="hidden" name="id" value="'.$donnees['id'].'">';
    		echo "<tr>";    
    		   echo "<td>".$donnees['Date']."</td>";  
    		   echo "<td>";
    		   $counter = $counter + 1; 
    		   // ARRIVE
    		   echo '<input id="moninput'.$counter.'" name="Matin" type="time" onKeyUp="afficher_span(event, this.value, '.$counter.');" value="'.$donnees['Matin'].'" style="display:none;"/>';	   
    		   echo "<span id=\"monspan".$counter."\" onclick=\"afficher_input(this, '".$counter."')\">".$donnees['Matin']."</span></td>";  
    		   // PAUDE
    		   echo "<td>";		   
    		   echo '<input id="moninput1'.$counter.'" type="time" name="Midi" onKeyUp="afficher_span1(event, this.value, '.$counter.');" value="'.$donnees['Midi'].'" style="display:none;"/>';	   
    		   echo "<span id=\"monspan1".$counter."\" onclick=\"afficher_input1(this, '".$counter."')\">".$donnees['Midi']."</span></td>"; 	
    		   // DEPART
    		   echo "<td>";		   
    		   echo '<input id="moninput2'.$counter.'" type="time" name="Soir" onKeyUp="afficher_span2(event, this.value, '.$counter.');" value="'.$donnees['Soir'].'" style="display:none;"/>';	   
    		   echo "<span id=\"monspan2".$counter."\" onclick=\"afficher_input2(this, '".$counter."')\">".$donnees['Soir']."</span></td>"; 	
    		   // TOTAL
    		   echo "<td>";		   
    		   echo '<input type="text" id="moninput3'.$counter.'" name="total_journee" onKeyUp="afficher_span3(event, this.value, '.$counter.');" value="'.$donnees['total_journee'].'" style="display:none;"/>';	   
    		   echo "<span id=\"monspan3".$counter."\" onclick=\"afficher_input3(this, '".$counter."')\">".$donnees['total_journee']."</span></td>"; 	
     
    		   echo '<td><input type="submit" id="submit" name="submit_modif" value="Enregistrer" /></td>';	   
    		echo "</tr>"; 
    		// $total_5 = $total_5 + $donnees['total_journee']; 
    		$test = $donnees['total_journee'];
    		// echo $test."<br />";
     
    		$compteur++; // on incrémente le compteur  
     
     
    			if($compteur % $nbreElements == 0){    
    				echo "</table>";  
     
    			foreach ($data as $time) {
    				list($heures, $minutes, $secondes) = explode(':', $time);
    				$total += $heures * 3600 + $minutes * 60 + $secondes;
     
    			}		
    			echo floor($total / 3600) . ':'  . ($total /60) % 60 . ':' . $total % 60;
    			$total++;
    				echo '</div></div>
    				<div class="compact"><div class="contenu"><div class="titre">Semaine</div>'; 
    				echo "<table>"; 
    				   echo "<tr>"; 
    					   echo "<th>Date</th>"; 
    					   echo "<th>Arrivée</th>"; 
    					   echo "<th>pause</th>"; 
    					   echo "<th>Départ</th>"; 	
    					   echo "<th>Total journée</th>"; 
    					   echo "<th>Options</th>"; 					   
    				   echo "</tr>"; 
    			}  
    		 echo "</form>"; 
    	}
     
    echo "</table>"; 
    $total = 0;	
     
    foreach ($data as $time) {
    	list($heures, $minutes, $secondes) = explode(':', $time);
    	$total += $heures * 3600 + $minutes * 60 + $secondes; 
     
    }		
    echo floor($total / 3600) . ':'  . ($total /60) % 60 . ':' . $total % 60; 
    echo "</div></div>";
    Je sais que mon code n'est pas propre niveau injection etc.., je corrige dés que j'ai fini de le mettre en place complètement
    Merci d'avance pour votre aide

  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
    Points : 3 628
    Points
    3 628
    Billets dans le blog
    8
    Par défaut
    Salut.
    SQL ne sert pas qu'à stocker des données, il sert aussi à traiter merveilleusement bien (mieux que PHP vu qu'il est FAIT pour ça) des données bien stockées.
    Du coup, pour ta problématique spécifique, je règlerai tout en SQL et je ne me servirais de PHP que pour l'affichage.
    Peux-tu tester ceci dans ton PHPMyAdmin ?
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    select distinct 
    date as jour,
    sec_to_time(sum(time_to_sec(timediff(soir,matin)) - time_to_sec(midi))) as cumul
    from  travail
    group by jour
    order by jour desc

    Et si le cumul par jour fonctionne, le cumul total sur une ligne s'écrirait ainsi :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select distinct 
    sec_to_time(sum(time_to_sec(timediff(soir,matin)) - time_to_sec(midi))) as cumul_total
    from  travail

    Et tu pourrais offrir facilement tous les group by imaginables (jour, semaine, mois, an, total)

    Explications détaillées du champ cumul
    récupère la différence de temps entre soir et matin
    remets nous ça en secondes (temps_journee)
    récupère le temps de pause du midi
    remets nous ça en secondes (temps_pause)
    calcule temps_journee - temps_pause
    et cumule
    et reformate ça proprement en champ time car c'est le seul champ que les humains comprennent...

    Au fait dans ta table, du coup, tu peux virer total_journee qui est le fruit d'un calcul, donc tout à fait redondant.
    Si en temps qu'humain, tu veux voir ce calcul, fais une vue...

    Par exemple :
    Tu la crées une seule fois...
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    create or replace view v_travail as
    select distinct 
    date as jour,
    sec_to_time(sum(time_to_sec(timediff(soir,matin)) - time_to_sec(midi))) as cumul
    from  travail
    group by jour
    order by jour desc

    Et ensuite tu te contentes dans ton code PHP d'un simple

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from v_travail;

    edit : En base de données, tu peux aussi mettre tout en minuscule dans tes noms de table ou de champ... c'est source d'erreur de faire autrement...

  3. #3
    Nouveau Candidat au Club
    Femme Profil pro
    Webmaster
    Inscrit en
    Juin 2018
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Juin 2018
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Merci à toi pour ton aide, entre temps quelqu'un d'autre m'a aidé sur un autre forum

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

Discussions similaires

  1. Total des heures
    Par Lechette dans le forum Outlook
    Réponses: 2
    Dernier message: 26/08/2010, 18h53
  2. [AC-2003] Total des heures
    Par filling dans le forum VBA Access
    Réponses: 3
    Dernier message: 03/06/2010, 13h07
  3. [AC-2000] Comment faire la somme des heures en requete pour un état ?
    Par angelevil dans le forum Requêtes et SQL.
    Réponses: 8
    Dernier message: 08/09/2009, 02h19
  4. faire l'addition des heures
    Par zidenne dans le forum Delphi
    Réponses: 1
    Dernier message: 25/08/2006, 13h18
  5. [VBA-A] calcul du total des heures d'une période
    Par aibar dans le forum VBA Access
    Réponses: 2
    Dernier message: 11/06/2006, 00h16

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