Problème avec les boucles

Fermé
yani65 - 15 févr. 2015 à 12:24
ElementW Messages postés 4816 Date d'inscription dimanche 12 juin 2011 Statut Contributeur Dernière intervention 5 octobre 2021 - 16 févr. 2015 à 10:50
Bonjour à tous;
Voici mon code php qui calcule le nombre de minutes travaillées par un enseignant pour une seule journée uniquement c'est à dire la première , sachant que ma table 'mdl_ens1' contient plusieurs journées c'est-à-dire plusieurs dates, pouvez-vous me dire comment modifier mon script afin qui m'effectue le nombre de minutes travaillées pour chaque jour et qu'il me fait la somme totale à la fin SVP?
Merci à l'avance.

TOUT SÉLECTIONNER
<?php 

date_default_timezone_set('Africa/Algiers') ;

set_time_limit(0);

$debut= date('H:i:s');

include ('connection.php');
$db=mysql_select_db("test");

$sql_cpt= "[/contents/1068-sql-commande-select SELECT] COUNT(id) as k FROM mdl_ens1";
$res_sql_cpt=mysql_query($sql_cpt);
if($res_sql_cpt==FALSE)
{die(mysql_error());
mysql_close();}
$rep_sql_cpt= mysql_fetch_array($res_sql_cpt);
{
mysql_free_result($res_sql_cpt);
$k=$rep_sql_cpt['k'];
echo ' nbr= '.$k.'<br>';

}
// connexion à la BDD

// REQUETE
$sql_sel= "SELECT heur_min_sec,date,mois,jour,heure,minute  FROM mdl_ens1";
$res_sql_sel=mysql_query($sql_sel) or die(mysql_error());

// Creation du tableau
$tab=array();
while ($line_sql_sel= mysql_fetch_array($res_sql_sel)) {
   $tab[]=$line_sql_sel["heur_min_sec"];
   $date[]=$line_sql_sel["date"];
   $mois[]= $line_sql_sel["mois"];
   $jour[]= $line_sql_sel["jour"];
   $heure[]= $line_sql_sel["heure"];
   $minute[]= $line_sql_sel["minute"];

}
mysql_close();   
   
    $i=-1;
    $j=0;
   while ($i++<$k-1)   
   {
   echo $i .'<br>';
   
if (($mois[$i]!=$mois[$i+1]) OR ($jour[$i]!=$jour[$i+1]))
{
break;
}

{$sous[$i]=(($heure[$i+1]*60)+($minute[$i+1]))-(($heure[$i]*60)+($minute[$i]));
echo $sous[$i].'<br>';
$som[$j]=$som[$j]+$sous[$i];
echo $som[$j].'<br>';
}
}
?>

5 réponses

jordane45 Messages postés 38241 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 septembre 2024 4 688
Modifié par jordane45 le 15/02/2015 à 15:23
Bonjour,

Plutôt que de faire le calcul via des boucles PHP ... pourquoi ne pas les faire en SQL directement ?
Il existe des fonctions telles que SUM , COUNT .... ainsi que des fonctions de manipulation de temps comme Timediff ... sans oublier, bien sûr..., le GROUP BY

Cordialement,
Jordane
0
yani65 Messages postés 8 Date d'inscription mardi 13 janvier 2015 Statut Membre Dernière intervention 2 mars 2015
Modifié par yani65 le 15/02/2015 à 16:21
Bonsoir jordane45 ;
J'ai 1500 tables!
Pour chaque Enseignant, il ya anviron 23 tables !!!!!,mdl_ens1_1,mdl_ens1_2,.....,mdl_ens1_68. Elles sont extraites d'une base de données d'une plate-forme d'enseignement à Distance!
Vous comprenez maintenant, pourquoi je ne peux pas le faire via sql? c'est pénible!
0
jordane45 Messages postés 38241 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 septembre 2024 4 688
15 févr. 2015 à 16:18
Je ne comprends pas où est le souci. ..
tu fais bien des requêtes sur ces tables non ?
Donc au lieu de faire tes calculs en php...tu les fais en sql....
0
yani65 Messages postés 8 Date d'inscription mardi 13 janvier 2015 Statut Membre Dernière intervention 2 mars 2015
16 févr. 2015 à 08:42
Bonjour;
C'est vrai, mais mon responsable veut que j'automatise ces tâches, car au fur et à mesure , le nombre d'enseignants augmente ainsi que le volume horaire.
Je suis désolé pour le dérangement.
0
jordane45 Messages postés 38241 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 septembre 2024 4 688
16 févr. 2015 à 09:41
Déjà... le fait qu'il y ait autant de tables que d'enseignants... montre un souci de conception de l'application ! (t'imagines si FB ou CCM devait ajouter une table à chaque inscription d'un utilisateur ??)

Quoi qu'il en soit.... automatiser ne veut pas forcément dire "QUE" en php....
Le fait de le faire via des requêtes est une "automatisation" également !

NB: je ne te dis pas de ne pas utiliser de PHP... je te conseilles simplement d'optimiser les requêtes pour qu'elles fassent les calculs directement et qu'ensuite dans ton PHP tu en récupères les résultat pour les manipuler (les afficher) dans tes pages php !

Mais bon.... si tu tiens absolument à le faire en PHP (en partant du code que tu nous as donné....)
pourquoi ne stockes tu pas le résultat de tes calculs dans un tableau ?

Un truc comme ça devrait faire l'affaire...
(codé de tête sans avoir testé....)
$som = 0;
$total_mois =0;
$result=array();
while ($i++<$k-1)  {
   echo $i .'<br>';

// Remise à zero du compteur $total_mois
if (($mois[$i]!=$mois[$i-1]) ){
   $total_mois =0;
  }
// Remise à zero du compteur $som ( jour)
if ($jour[$i]!=$jour[$i-1]){
 $som=0;
}
 $H_prec = isset($heure[$i-1])?$heure[$i-1]:0;
 $M_prec = isset($minute[$i-1])?$minute[$i-1]:0;

  $som += (($heure[$i]*60)+($minute[$i]))-(($H_prec*60)+($M_prec));
  $total_mois += $som ;
  $result[$mois[$i]][$jour[$i]]['somme'] = $som;
  $result[$mois[$i]]['total_mois'] = $total_mois;
 }

// Affichage du tableau de résultats:
print_r( $result);

0
yani65 Messages postés 8 Date d'inscription mardi 13 janvier 2015 Statut Membre Dernière intervention 2 mars 2015
16 févr. 2015 à 10:25
Merci beaucoup , je vais essayer .
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ElementW Messages postés 4816 Date d'inscription dimanche 12 juin 2011 Statut Contributeur Dernière intervention 5 octobre 2021 1 228
Modifié par gravgun le 16/02/2015 à 10:52
'lut, pour ta gouverne, l'extension MySQL et ses fonctions
mysql_*
est obsolète et donc à ne plus utiliser, encore moins pour l'apprentissage de l'utilisation de BDD. D'ailleurs, elle est déconseillée depuis PHP5, obsolète depuis PHP 5.5, et sera supprimée dans les versions suivantes de PHP.
Cela s'explique par le fait que cette extension ne dispose pas de requêtes préparées, menant très fréquemment a des possibilités d'injection SQL, autrement dit à la modification ou destruction de ta BDD par n'importe qui.
Aussi, le dit module n'est plus mis à jour, donc toute faille de sécurité découverte dedans ne sera pas corrigée.

Regarde du coté de PDO; ou de l'extension MySQLi qui a l'avantage d'avoir un style de code proche du module MySQL.
from human import idiocy
del idiocy
0