gestion absences/presences en php

Eléphant du PHP | 150 Messages

28 avr. 2011, 14:22

ton programme est tout simplement génial!!il y a juste un truc mais sa vient peut être de moi : quand j'ouvre le fichier excel que le programme à créé il coupe le mot "absence" en fait ce qui se passe c'est que la case a cocher se positionne sur le texte il faudrait qu'il y est un espace avant "absent(e)" pour que si la case se mette par dessus on voit toujours le mot :

Image

peut être du a la mise en page, peut être que l'on peut ajouter des réglages?

Sinon je t'es demander plus haut si on pouvais avoir les heures d'absences/présences d'un élève pour un mois choisi?

et j'ai un autre petit problème qui n'est pas grave mais gênant et un peu "relou" à la longue : vu que j'ai incorporer le code dans une page de site mon calendrier s'ouvre mais en haut de la page à gauche et non vers la case "date".Cela peut être due a quoi?css?

code de la page principale :
[Modération]Edité par Sadeq : Tu n'as pas besoin de nous transmettre tout le code de tes programmes et surtout pas les identifiants et mots de passe de ta base. J'ai donc supprimé tout ce qui n'est pas utile pour le sujet pour préserver tes droits de confidentialité et de proriété[/Modération]

dsl je n'est vraiment pas fait exprès de laisser mes mot de passe ! et j'ai mis mes css car si sa peux aider a trouver d'ou vien l'erreur du calendrier

code css:
.createdate {
	height: 15px;
	padding-bottom: 10px;
	padding-left: 20px;
	color:#999999;
	font-size: 11px;
	background-image:url(../images/schedule.png);
	background-position:left top;
	background-repeat:no-repeat;
}

.modifydate {
	height: 15px;
	padding-top: 10px;
	color: #999999;
	font-size: 11px;
}



j'ai pris un code pour imprimer que le tableau mais si j'imprime il m'écrit en haut a gauche "commande" et en haut a droite "about blank" est ce que sa peut s'enlever?
est ce que ce code est bon ou il y a mieux?
	<script language="JavaScript">
			function imprime_zone(titre, obj)

			{
			// Définie la zone à imprimer
			var zi = document.getElementById(obj).innerHTML;

			// Ouvre une nouvelle fenetre
			var f = window.open("", "ZoneImpr", "height=500, width=600,toolbar=0, menubar=0, scrollbars=1, resizable=1,status=0, location=0, left=10, top=10");

			// Définit le Style de la page
			f.document.body.style.color = '#000000';
			f.document.body.style.backgroundColor = '#FFFFFF';
			f.document.body.style.padding = "10px";

			// Ajoute les Données
			f.document.title = titre;
			f.document.body.innerHTML += " " + zi + " ";

			// Imprime et ferme la fenetre
			f.window.print();
			f.window.close();
			return true;
			}
			</script>
<div id='fr'>
//tableau gestion absence
</div id='fr'>
       <input type="button" value="Imprimer Commande" onclick="imprime_zone('commande', 'fr');">
Tu veux mourir? OK!! Mais pas dans ma voiture, alors attache ta ceinture !! :pouce:
Tony :boire9:

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

28 avr. 2011, 16:11

Pour la dernière question et rapidement, le script javascript ouvre une nouvelle fenêtre dont le titre est "commande", y transfert le contenu du div nommé "fr", imprime ce contenu et ferme la fenêtre. Donc c'est juste un pop-up jetable qui sert à imprimer le contenu d'une balise <div></div> ayant un id précis. Le titre de cette fenêtre et l'url : about:blank sont donc facultatifs et insignifiants vu que cette fenêtre se ferme après l'impression.

Voici une réadaptation pour mieux comprendre :
<script language="JavaScript">
                        function imprime_zone(obj)

                        {
                        // Ouvre une nouvelle fenêtre
                        var f = window.open("", "", "height=500, width=600,toolbar=0, menubar=0, scrollbars=1, resizable=1,status=0, location=0, left=10, top=10");

                        // Définit le Style de la page
                        f.document.body.style.color = '#000000';
                        f.document.body.style.backgroundColor = '#FFFFFF';
                        f.document.body.style.padding = "10px";

                        // Affiche le contenu HTML de obj dans le body de la nouvelle fenêtre
                        f.document.body.innerHTML  = document.getElementById(obj).innerHTML;

                        // Imprime et ferme la fenêtre
                        f.window.print();
                        f.window.close();
                        return true;
                        }
                        </script>
<div id='feuille_absence'>
//tableau gestion absence
</div>
<input type="button" value="Imprimer" onclick="imprime_zone('feuille_absence');">
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Eléphant du PHP | 150 Messages

28 avr. 2011, 16:28

Merci c'est mieux!Sinon Est ce qu'on peut avoir les heures d'absences/présences d'un élève pour un mois choisi?
les autres question par rapport au calendrier et excel sont subsidiaire mais celle la est plus importante.
Merci d'avance.
Tu veux mourir? OK!! Mais pas dans ma voiture, alors attache ta ceinture !! :pouce:
Tony :boire9:

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

28 avr. 2011, 16:44

Oui, le calcul des absences par mois se fera comme on a déjà fait par date et par élève, il suffit de modifier la requête comme ça:
SELECT month(`date`) AS `mois`, `idEleve` AS `idEleve`,sum((8 - ((((`assiduite`.`presence_mat_t1` * 2) + (`assiduite`.`presence_mat_t2` * 2)) + (`assiduite`.`presence_amidi_t1` * 2)) + (`assiduite`.`presence_amidi_t2` * 2)))) AS `nbre_heures_absence` FROM `assiduite` GROUP BY month(`date`),`idEleve`;
Et tu peux donc en créer une vue réutilisable comme ça:
Create View nb_heures_absence_mois AS
SELECT month(`date`) AS `mois`, `idEleve` AS `idEleve`,sum((8 - ((((`assiduite`.`presence_mat_t1` * 2) + (`assiduite`.`presence_mat_t2` * 2)) + (`assiduite`.`presence_amidi_t1` * 2)) + (`assiduite`.`presence_amidi_t2` * 2)))) AS `nbre_heures_absence` FROM `assiduite` GROUP BY month(`date`),`idEleve`;
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Eléphant du PHP | 150 Messages

28 avr. 2011, 17:19

et donc pour les présences du mois cela donne ça :
CREATE VIEW nb_heures_presence_mois AS
SELECT month(`date`) AS `mois`, `idEleve` AS `idEleve`,sum((8 - ((((`assiduite`.`presence_mat_t1` * 2) + (`assiduite`.`presence_mat_t2` * 2)) + (`assiduite`.`presence_amidi_t1` * 2)) + (`assiduite`.`presence_amidi_t2` * 2)))) AS `nbre_heures_presence` FROM `assiduite` GROUP BY month(`date`),`idEleve`;
 
Tu veux mourir? OK!! Mais pas dans ma voiture, alors attache ta ceinture !! :pouce:
Tony :boire9:

Eléphant du PHP | 150 Messages

28 avr. 2011, 17:31

petit souci pour le nombre d'heure par mois pour le php :
if (isset($_GET['action_nb_absence_mois']) && !empty($idEleve) && !empty($date))
{
        // CALCUL DU NOMBRE D'ABSENCES D'UN ELEVE POUR UN MOIS
        $nombreheureabsence = 0;
        $sql = "SELECT * FROM `nb_heures_absence_mois` WHERE mois = '" . $date . "'  AND idEleve = '". $idEleve. "' ";
        $result = mysql_query($sql) or die(mysql_error());
        if ($result)
        {
                $row = mysql_fetch_array($result);
                $nombreheureabsence = $row['nbre_heures_absence_mois'];
        }
        $message = "	Nombre d'heures d'absence du mois : " . $nombreheureabsence . "H";
}

//------------------------------------------
if (isset($_GET['action_nb_presence_mois']) && !empty($idEleve) && !empty($date))
{
        // CALCUL DU NOMBRE DE PRESENCES D'UN ELEVE POUR UN MOIS
        $nombreheurepresence = 0;
        $sql = "SELECT * FROM `nb_heures_presence_mois` WHERE mois = '" . $date . "'  AND idEleve = '". $idEleve. "' ";
        $result = mysql_query($sql) or die(mysql_error());
        if ($result)
        {
                $row = mysql_fetch_array($result);
                $nombreheurepresence = $row['nbre_heures_presence_mois'];
        }
        $message = "	Nombre d'heures de présence du mois : " . $nombreheurepresence . "H";
}
il ne m'affiche rien donc je pense que c'est parce que le programme n'arrive pas a reprendre que le mois du calendrier.
Tu veux mourir? OK!! Mais pas dans ma voiture, alors attache ta ceinture !! :pouce:
Tony :boire9:

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

28 avr. 2011, 17:34

Pour le problème de la position du calendrier, ce n'est pas à cause du CSS car nul part il n'est question de positionner les cordonnées du div qui porte le calendrier. C'est dans le programme JS du calendrier que le positionnement des coordonnées se fait et il est erroné car il se base sur la position left et top de la zone date qui n'est malheureusement pas définie dans l'HTML vu que c'est une zone à position automatique selon la séquence du contenu et non absolue (fixe). La solution est de définir la position du calendrier par rapport aux coordonnées X/Y de la souris/curseur ou de lui fixer une position bien définie sur la page.

Voici le programme : calendrier.js modifié:
/*--cette partie du script est pour élaborer le calendrier --*/
/*variable globale*/
		
		var pDefaut = {"mois" : new Array("Janvier","Février","Mars","Avril","Mai","Juin","Juillet","Aout","Septembre","Octobre","Novembre","Décembre"),
		"jour" : new Array("Di","Lu","Ma","Me","Je","Ve","Sa"),"jLib" : new Array("Dimanche","Lundi","Mardi","Mercredi","Jeudi","Vendredi","Samedi"),
		"titre" : "micro-cal","aujourdhui" : "aujourd'hui",
		"debutSemaine" : 1, /*debut de la semaine 0=dim,1=lun,...*/
		"jPause" : {6:true,0:true},/*jour de pause de la semaine (samedi & dimanche)*/
		"jFeriee": {"1-1":"jour an","1-5":"fête du travail","8-5":"armistice","14-7":"fête nationale","15-8":"ascencion","1-11":"armistice","11-11":"toussain","25-12":"noel"} ,
		"moisMoins" : "-","moisPlus" : "+", /*naviagation par mois*/ "anneeMoins" : "<","anneePlus" : ">", /*naviagation par annee*/
		"format" : "%j/%m/%a" /*format de sortie : %j = jour, %m = mois, %a =année*/ }
		var tempo = new Array(); /*gestion de la fermeture des calendriers quand on perd le focus*/

		function nbJ(dateX) /*Retourne le nombre de jour depuis le 1er janvier (pr le num de semaine)*/
		{
		   var j_mois=[0,31,59,90,120,151,181,212,243,273,304,334];
		   mm=dateX.getMonth();aa=dateX.getFullYear();nb=j_mois[mm]+dateX.getDate()-1 ; 
		   if ((aa%4==0 && aa %100!=0 || aa%400==0) && mm>1) nb++; /*test bissextile*/
		   return nb;
		}

		function gCal(src,srcId,mm,yy) /*génère le calendrier*/
		{
		   if (tempo!=null&&tempo[srcId]!=null) 
		   {
			  clearTimeout(tempo[srcId]);
			  document.getElementById(src).focus();
		   }
		   if (mm<0) {mm+=12;yy--;} 
			  else if (mm>11) {mm-=12;yy++;}
		   dnow=new Date();
		   param=document.getElementById(srcId).parametre;
		   htm="<table cellpadding=0 cellspacing=0 >";
		   /*titre*/
		   if (param["titre"]!= null ) 
			  {htm+="<tr><td colspan='8' class='zoneTitre' >"+param["titre"]+"</td></tr>";}
		   /*entete*/
		   htm+="<tr><td colspan='8'><table width='100%' cellpadding=0 cellspacing=0 ><tr>";
		   htm+="<td class='zoneNav' onclick=\"gCal('"+src+"','"+srcId+"',"+mm+","+(yy-1)+")\">"+param["anneeMoins"]+"</td>";
		   htm+="<td class='zoneNav' onclick=\"gCal('"+src+"','"+srcId+"',"+(mm-1)+","+yy+")\">"+param["moisMoins"]+"</td>";
		   htm+="<td class='zoneMois'>"+param["mois"][mm]+"</td>";
		   htm+="<td class='zoneNav' onclick=\"gCal('"+src+"','"+srcId+"',"+(mm+1)+","+yy+")\" >"+param["moisPlus"]+"</td>";
		   htm+="<td class='zoneNav' onclick=\"gCal('"+src+"','"+srcId+"',"+mm+","+(yy+1)+")\">"+param["anneePlus"]+"</td>";
		   htm+="</tr></table></td></tr>";
		   /*jour*/
		   htm+="<tr><td></td>";
		   pJs = param["debutSemaine"];
		   pJm = new Date(yy,mm,1).getDay(); /*jour du 1ere du mois*/
		   pjT = 1-pJm+pJs;
		   pjT-=(pjT>1)?7:0;
		   dateX = new Date(yy,mm,pjT);
		   for (j=0;j<7;j++) 
			  {htm+="<td>"+param["jour"][(j+pJs)%7]+"</td>";} 
		   htm+="</tr>";
		   avantFinMois=true;idx=0;idxM=parseInt(nbJ(new Date(yy,mm,1))/7+1,10);
		   while(avantFinMois)
		   {
			  htm+=(idx%7==0)?"<tr><td class='nSemaine' >"+idxM+"</td>":"";
			  htm+="<td><a class='tdx' href='#' onclick=\"javascript:choix("+dateX.getFullYear()+","+dateX.getMonth()+","+dateX.getDate()+",'"+srcId+"','"+src+"')\"   >"+subDiv(param,idx,dateX,mm,aa,0)+"</a></td>";
			  idx++;
			  if (idx%7==0)
				 {htm+="</tr>"; idxM++;}
				 dateX= new Date(dateX.getFullYear(),dateX.getMonth(),dateX.getDate()+1);
			  if (idx>7&&idx%7==0&&dateX.getMonth()!=mm) 
				 {avantFinMois=false;}
		   }
		   /*annee*/htm+="<tr><td colspan='6'><a class='tdxNow' href='#' onclick=\"javascript:choix("+dnow.getFullYear()+","+dnow.getMonth()+","+dnow.getDate()+",'"+srcId+"','"+src+"')\"   >"+param["aujourdhui"]+"</a></td><td colspan='2'  class='zoneAnnee'>"+yy+"</td></tr>";
		   htm+="</table>";
		   document.getElementById(srcId).innerHTML=htm;
		}
		function addZero(val) { return ((val<10)?"0":"")+val;}
		function choix(aa,mm,jj,srcId,src)
		{
		var datePos=new Date(aa,mm,jj);var jour = datePos.getDay(); 
		param=document.getElementById(srcId).parametre;
		var dateAffiche = param["format"].replace("%j",addZero(datePos.getDate())).replace("%k",datePos.getDate()).replace("%d",param["jLib"][jour]);
		dateAffiche = dateAffiche.replace("%m",addZero(datePos.getMonth()+1)).replace("%n",datePos.getMonth()+1).replace("%p",param["mois"][datePos.getMonth()]);
		dateAffiche = dateAffiche.replace("%a",datePos.getFullYear()).replace("%y",datePos.getYear());
		document.getElementById(src).value = dateAffiche; 
		}

		function subDiv(param,idx,dateX,mm,aa,code)
		{
		   pJs = param["debutSemaine"];
		   dnow=new Date();
		   switch(code)
		   {
			  case 0 : return (param["jPause"][(idx+pJs)%7]==true) ? "<div class='enWeekEnd' >"+subDiv(param,idx,dateX,mm,aa,1)+"</div>" : subDiv(param,idx,dateX,mm,aa,1) ; break;
			  case 1 : return (param["jFeriee"][dateX.getDate()+"-"+(dateX.getMonth()+1)]!=null) ? ("<div class=\"enFeriee\" title=\""+param["jFeriee"][dateX.getDate()+"-"+(dateX.getMonth()+1)]+"\"  >"+subDiv(param,idx,dateX,mm,aa,2)+"</div>") : subDiv(param,idx,dateX,mm,aa,2) ; break;
			  case 2 : return (dateX.getMonth()==mm) ? "<div class='enMois' >"+subDiv(param,idx,dateX,mm,aa,3)+"</div>" : subDiv(param,idx,dateX,mm,aa,3) ; break;
			  case 3 : return (dateX.getMonth()==dnow.getMonth()&&dateX.getFullYear()==dnow.getFullYear()&&dateX.getDate()==dnow.getDate()) ? "<div class='aujourdhui' >"+subDiv(param,idx,dateX,mm,aa,4)+"</div>" : subDiv(param,idx,dateX,mm,aa,4) ; break;
			  case 4 : return dateX.getDate() ; break;
		   }
		}

		function visuCal(src,paramX)
		{
		   srcId = src.id+"_cal";
		
		   if (document.getElementById(srcId)==null)
		   {
			  param={}
			  for (e in pDefaut)
			  {trouve=false;
			   if (paramX!=null) 
				 for (i in paramX) { if (e==i) {param[e]=paramX[e];trouve=true;} }
			  if (!trouve) param[e]=pDefaut[e];
			  }
			  dnow= new Date();
			  div = document.createElement('div');
			  div.setAttribute('id',srcId);
			  div.style.position = 'absolute';

 // CODE ANNULE : position du calendrier par rapport à la zone date
			  //div.style.top = src.offsetTop + src.offsetHeight + 'px'; 
			  //div.style.left = src.offsetLeft + 'px'; /*this.deltaG = 0;  */

// MODIFICATION : position du calendrier par rapport à XY de la souris //
			  div.style.top = Mouse_Y + 10 + 'px';  /*Position de la souris*/
			  div.style.left = Mouse_X + 'px'; /*Position de la souris*/

			  div.className = 'divCal'; 
			  div.parametre = param;
			  document.body.appendChild(div);
			  gCal(src.id,srcId,dnow.getMonth(),dnow.getFullYear(),param);
		   } else
		   {
			  document.getElementById(src.id+"_cal").style.display='inline';
		   }
		}

		function masqueCal(src)
		{
		 tempo[src.id+"_cal"]=window.setTimeout("document.getElementById('"+src.id+"_cal').style.display='none'",500);
		}
		/******fin de la partie du script qui peut être copiée dans un fichier.js ******/

		function testTypeDate(src)    
		{
		   tst=false;
		   try
		   {rc=src.split("/");nd=new Date(rc[2],(rc[1]-1),rc[0]);
		   tst=(rc[2]>1800&&rc[2]<2200&&rc[2]==nd.getFullYear()&&rc[1]==(nd.getMonth()+1)&&rc[0]==nd.getDate());
		   } catch(e) {}
		   return tst?'black':'red';
		}
		/* création d'un paramétrage spécifique pour le changement de langue ou de propriété */
		paramGB={"mois" : new Array("January","February","March","April","May","June","July","August","September","October","November","December"),
		"jour" : new Array("Su","Mo","Tu","We","Th","Fr","Sa"), "jLib" : new Array("Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"), 
		"jFeriee" : {"26-5":"memorial Day","29-5":"JFK Birthday","14-6":"Flag Day","15-6":"Father's Day","1-9":"Labor Day","11-9":"Patriot Day","13-10":"Columbus Day","31-10":"Halloween", "2-11" : "Daylight Saving Time Ends" , "4-11" : "Election Day", "11-11" : "Veteran's Day" , "27-11" : "Thanksgiving" , "24-12" : "Christmas Eve" , "25-12" : "Christmas"},
		"debutSemaine" : 0, "format": "%a-%m-%j" , "titre" : "start","aujourdhui" : "now"}
		paramLib={"titre": "Date","format" : "%d, %k %p %a"}
		
		
// cette partie est pour détecter les coordonnées de la souris
var Mouse_X; // Variable globale Position X de la Mouse
var Mouse_Y; // Variable globale Position Y de la Mouse

//-----------------------------------------------------------------------------
// l'argument e n'est passé à la fonction que par les navigateur n'ayant pas
// implémenté event comme objet, IE posséde son propre objet bien connu event
//-----------------------------------------------------------------------------
function WhereMouse( e ){
  var DocRef;    // Variable pour IE uniquement

  // L'événement est passée à la fonction
  // donc tous sauf IE…
  if( e){                     // Dans ce cas on obtient directement la position dans la page
    Mouse_X = e.pageX;
    Mouse_Y = e.pageY;
  }
  else{                      // Dans ce cas on obtient la position relative à la fenêtre d'affichage
    Mouse_X = event.clientX;
    Mouse_Y = event.clientY;

    //-- Il faut traiter le CAS des DOCTYPE sous IE
    if( document.documentElement && document.documentElement.clientWidth) // Donc DOCTYPE
      DocRef = document.documentElement;   // Dans ce cas c'est documentElement qui est réfèrence
    else
      DocRef = document.body;                    // Dans ce cas c'est body qui est réfèrence

    //-- On rajoute la position liée aux ScrollBars
    Mouse_X += DocRef.scrollLeft;
    Mouse_Y += DocRef.scrollTop;
  }
}

//== INITIALISATION ================
document.onmousemove = WhereMouse;
Modifications:
1. on a ajouté en bas une procédure de détection des positions XY de la Souris
2. on a modifié les instructions de positionnement des coordonnées Left et Top du DIV portant le calendrier
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Eléphant du PHP | 150 Messages

28 avr. 2011, 19:05

Merci pr le calendrier c'est vraiment plus pratique.est ce que tu t'es penché sur mon code pour les heures de présence/absences pour le mois.
Tu veux mourir? OK!! Mais pas dans ma voiture, alors attache ta ceinture !! :pouce:
Tony :boire9:

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

28 avr. 2011, 19:31

Oui, il faut donner le mois de la date $date comme paramètre et non toute la date dans les requêtes. Corrige à ce niveau :
$mois =  date_format(date_create($date), "m"); // extrait le mois de $date 
$sql = "SELECT * FROM `nb_heures_absence_mois` WHERE mois = '" . $mois . "'  AND idEleve = '". $idEleve. "' ";
ou bien, en utilisant date() et strtotime() (PHP version <5)
$mois =  date("m", strtotime($date)); // extrait le mois de $date
$sql = "SELECT * FROM `nb_heures_absence_mois` WHERE mois = '" . $mois . "'  AND idEleve = '". $idEleve. "' ";
Dans tous les cas la date d'origine venue du calendrier est au format : aaaa-mm-jj
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

28 avr. 2011, 21:09

quand j'ouvre le fichier excel que le programme à créé il coupe le mot "absence" en fait ce qui se passe c'est que la case a cocher se positionne sur le texte il faudrait qu'il y est un espace avant "absent(e)" pour que si la case se mette par dessus on voit toujours le mot :

Image

peut être du a la mise en page, peut être que l'on peut ajouter des réglages?
Pour ce petit problème tu peux effectivement ajouter des espaces avant le mot "Absent(e)" pour le pousser vers la droite de la cellule. Moi j'ai mis 10 espaces et ça a suffit. J'ai utilisé pour ça la fonction str_repeat("&npsp;", 10) où le code &npsp; est le code HTML de l'espace qui est répété 10 fois.

Voici où j'ai fait les modifs dans le programme : formAssiduite_Export.php qui crée le fichier Excel :
		$listeAssiduiteEleves .= "<tr><td>".$row['nom']." ".$row['prenom']."</td>
		<td><input type=\"checkbox\" ".$mat_t1_checked." />".str_repeat('&nbsp;', 10) ."Abs</td>
		<td><input type=\"checkbox\" ".$mat_t2_checked." />".str_repeat('&nbsp;', 10) ."Abs</td>
		<td><input type=\"checkbox\" ".$amidi_t1_checked." />".str_repeat('&nbsp;', 10) ."Abs</td>
		<td><input type=\"checkbox\" ".$amidi_t2_checked." />".str_repeat('&nbsp;', 10) ."Abs</td>
		<td>" . $nbre_heures_absence . "</td></tr>";
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Eléphant du PHP | 150 Messages

29 avr. 2011, 09:27

un grand merci pour tout le travail que tu fait!!

Petit problème pour le mois :

Notice: Undefined index: nb_heures_absence_mois in C:\wamp\www\projet\site classe\code5_suite.php on line 61
if (isset($_GET['action_nb_absence_mois']) && !empty($idEleve) && !empty($date))
{
        // CALCUL DU NOMBRE D'ABSENCES D'UN ELEVE POUR UN MOIS
        $nombreheureabsencemois = 0;
        $sql = "SELECT * FROM `nb_heures_absence_mois` WHERE mois = '" . $mois . "'  AND idEleve = '". $idEleve. "' ";
        $result = mysql_query($sql) or die(mysql_error());
        if ($result)
        {
                $row = mysql_fetch_array($result);
                $nombreheureabsencemois = $row['nb_heures_absence_mois'];
        }
        $message = "	Nombre d'heures d'absence du mois : " . $nombreheureabsencemois . "H";
}
je ne vois pas du tout quelle est mon erreur!!
//------------------------------------------
if (isset($_GET['action_nb_presence_mois']) && !empty($idEleve) && !empty($date))
{
        // CALCUL DU NOMBRE DE PRESENCES D'UN ELEVE POUR UN MOIS
        $nombreheurepresencemois = 0;
        $sql = "SELECT * FROM `nb_heures_presence_mois` WHERE mois = '" . $mois . "'  AND idEleve = '". $idEleve. "' ";
        $result = mysql_query($sql) or die(mysql_error());
        if ($result)
        {
                $row = mysql_fetch_array($result);
                $nombreheurepresencemois = $row['nb_heures_presence_mois'];
        }
        $message = "	Nombre d'heures de présence du mois : " . $nombreheurepresencemois . "H";
}
Tu veux mourir? OK!! Mais pas dans ma voiture, alors attache ta ceinture !! :pouce:
Tony :boire9:

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

29 avr. 2011, 09:39

Bonjour,

L'erreur est dans :
$nombreheureabsencemois = $row['nb_heures_absence_mois'];
le nom $row['nb_heures_absence_mois'] n'est pas un nom de champ de la vue. Je pense que tu voulais écrire $row['nb_heures_absence'] qui est le bon nom du champ ciblé.

Rappel de la vue : `nb_heures_absence_mois` qui se trouve dans la base:
CREATE VIEW nb_heures_absence_mois AS
SELECT month(`date`) AS `mois`, `idEleve` AS `idEleve`,sum(8 - ((`assiduite`.`presence_mat_t1` * 2) + (`assiduite`.`presence_mat_t2` * 2) + (`assiduite`.`presence_amidi_t1` * 2) + (`assiduite`.`presence_amidi_t2` * 2))) AS `nbre_heures_absence` FROM `assiduite` GROUP BY month(`date`),`idEleve`;
J'ai remarqué aussi que tu avais une erreur dans la requête de la vue : 'nb_heures_presence_mois' du calcul de présences du mois, voici le corrigé :
CREATE VIEW nb_heures_presence_mois AS
SELECT month(`date`) AS `mois`, `idEleve` AS `idEleve`,sum((`assiduite`.`presence_mat_t1` * 2) + (`assiduite`.`presence_mat_t2` * 2) + (`assiduite`.`presence_amidi_t1` * 2) + (`assiduite`.`presence_amidi_t2` * 2)) AS `nbre_heures_presence` FROM `assiduite` GROUP BY month(`date`),`idEleve`;
La seule différence entre la requête de calcul des présences et celle des absences est que cette dernière soustrait la somme des heures de 8 heures par jour.
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Eléphant du PHP | 150 Messages

29 avr. 2011, 10:25

d'après tes conseils sa donne ça :
//-----------------------------------------------
if (isset($_GET['action_nb_absence_mois']) && !empty($idEleve) && !empty($date))
{
        // CALCUL DU NOMBRE D'ABSENCES D'UN ELEVE POUR UN MOIS
        $nombreheureabsencemois = 0;
        $sql = "SELECT * FROM `nb_heures_absence_mois` WHERE mois = '" . $mois . "'  AND idEleve = '". $idEleve. "' ";
        $result = mysql_query($sql) or die(mysql_error());
        if ($result)
        {
                $row = mysql_fetch_array($result);
                $nombreheureabsencemois = $row['nb_heures_absence'];
        }
        $message = "	Nombre d'heures d'absence du mois : " . $nombreheureabsencemois . "H";
}

//------------------------------------------
if (isset($_GET['action_nb_presence_mois']) && !empty($idEleve) && !empty($date))
{
        // CALCUL DU NOMBRE DE PRESENCES D'UN ELEVE POUR UN MOIS
        $nombreheurepresencemois = 0;
        $sql = "SELECT * FROM `nb_heures_presence_mois` WHERE mois = '" . $mois . "'  AND idEleve = '". $idEleve. "' ";
        $result = mysql_query($sql) or die(mysql_error());
        if ($result)
        {
                $row = mysql_fetch_array($result);
                $nombreheurepresencemois = $row['nb_heures_presence'];
        }
        $message = "	Nombre d'heures de présence du mois : " . $nombreheurepresencemois . "H";
}

//------------------------------------------
mais sa ne fonctionne toujours pas :

( ! ) Notice: Undefined index: nb_heures_absence in C:\wamp\www\projet\site classe\code5_suite.php on line 61
Call Stack
# Time Memory Function Location
1 0.0010 728208 {main}( ) ..\code5_suite.php:0
Tu veux mourir? OK!! Mais pas dans ma voiture, alors attache ta ceinture !! :pouce:
Tony :boire9:

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

29 avr. 2011, 11:05

Désolé, le bon nom du champ est $row['nbre_heures_absence'] et non pas $row['nb_heures_absence']

Hé wé ça arrive des p'tits lapsus comme ça :-*
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Eléphant du PHP | 150 Messages

02 mai 2011, 09:18

Bonjour,
merci!!
J'ai deux trois question :

- J'aimerais pouvoir modifier ou supprimer les élèves ou les profs ou les matières depuis le site est ce possible??par exemple changer le nom d'un élève ou ajouter un numéro de tel (je vais ajouter des champs dans ELEVES)

- Quand on imprime est ce qu'on peut modifier le texte qui est à l'écran? (ex : enlever le mot "absent(e) pour que les case soit vierge si on n'a pas encore enregistrer la feuille de présence)
==> d'ailleurs il y a toujours le "about blank" en haut a droite quand j'imprime.

- Est ce que ça serait possible d'archiver les élèves qui sont actuellement en deuxième année pour ne pas les avoir dans la liste des élève l'an prochain ?
Tu veux mourir? OK!! Mais pas dans ma voiture, alors attache ta ceinture !! :pouce:
Tony :boire9: