D'abord pour la date voici une solution rapide sans se lancer dans un système de conversion. c’est donc une solution parmi d'autres.
On peut donc ajouter une seconde zone cachée où le calendrier pourra nous mettre la date au format brut "aaaa-mm-jj" nommée "date" et laisser la zone actuelle de la date complète au format "jour, n°jour Mois Année" mais en la nommant "dateComplete".
Voici donc les Modifications apportées aux zones dates dans HTML, JavaScript et PHP:
Modification dans HTML : l'appel de la fonction "visuCal" est modifié pour transmettre 2 zones : date complete et date brute
1. une zone "dateComplete" pour la date affichée au format "Jour, n°jour Mois Année"
2. une zone cachée "date" pour la date abrégé au format "aaaa-mm-jj"
On peut stocker les 2 dates dans mysql pour éviter les conversions.
<th>Date : </th><td><input type="text" id="dateLib" name="dateComplete" value="<?php echo $dateComplete; ?>"
style="width:180px" onfocus="visuCal('date', this,{'format' : '%d, %k %p %a'})"
onblur="masqueCal(this);" />
<input type="hidden" id="date" name="date" value="<?php echo $date; ?>" />
<input type="submit" name="action" value="Valider la date" />
</td>
</tr>
Modification dans le Javascript pour prendre en compte les 2 zones de date : la date à afficher et la date brute
fonctions javascript modifiées :
visuCal : cette fonction est appelée par la zone "dateComplete" du formulaire
1. Ajout du paramètre "srcDateBrute" correspondant à la zone "date" du formulaire où la date brute sera renvoyée par le calendrier
2. Modification dans l'appel de la fonction "gCal" en transmettant le paramètre "srcDateBrute"
gCal : cette fonction est appelée par la fonction "visuCal"
1. Ajout du nouveau paramètre "srcDateBrute" dans la signature de cette fonction "gCal" (y compris tout les appels récursifs effectués)
2. Ajout aussi dans la signature de la fonction "choix" appelée dans les onclick.
choix : cette fonction est appelée par un clic utilisateur dans le calendrier sur un jour. C'est cette fonction qui nous intéresse le plus car c'est elle qui affecte la date choisie dans les zones du formulaire.
1. Ajout de l'affectation de la date brute choisie dans la zone "srcDateBrute"
/*--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(srcDateBrute, 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('"+srcDateBrute+"','"+src+"','"+srcId+"',"+mm+","+(yy-1)+")\">"+param["anneeMoins"]+"</td>";
htm+="<td class='zoneNav' onclick=\"gCal('"+srcDateBrute+"','"+src+"','"+srcId+"',"+(mm-1)+","+yy+")\">"+param["moisMoins"]+"</td>";
htm+="<td class='zoneMois'>"+param["mois"][mm]+"</td>";
htm+="<td class='zoneNav' onclick=\"gCal('"+srcDateBrute+"','"+src+"','"+srcId+"',"+(mm+1)+","+yy+")\" >"+param["moisPlus"]+"</td>";
htm+="<td class='zoneNav' onclick=\"gCal('"+srcDateBrute+"','"+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+"','"+srcDateBrute+"')\" >"+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+"','"+srcDateBrute+"')\" >"+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,srcDateBrute)
{
var datePos=new Date(aa,mm,jj);
var jourSemaine = datePos.getDay();
//
document.getElementById(srcDateBrute).value = aa+'-'+addZero(mm+1)+'-'+addZero(jj); //date brute
//
param=document.getElementById(srcId).parametre;
//
var dateAffiche = param["format"].replace("%j",addZero(datePos.getDate())).replace("%k",datePos.getDate()).replace("%d",param["jLib"][jourSemaine]);
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; //date affichée selon le format souhaitée
}
//////////////
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(srcDateBrute, 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';
//div.style.top = src.top + src.height + 'px';
//div.style.left = src.left + 'px'; /*this.deltaG = 0; */
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(srcDateBrute, 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;
Modification dans PHP :
1. ajout d'une affectation de la variable $dateComplete pour la date affichée
// variables pour la date
$dateComplete = isset($_GET['dateComplete'])? $_GET['dateComplete'] : null;
$date = isset($_GET['date']) ? $_GET['date'] : null;
Voici pour information le programme "formAssiduite.php" modifié :
<?php
//echo "<pre>"; print_r($_GET); echo "</pre>";
// init
$dateComplete = isset($_GET['dateComplete'])? $_GET['dateComplete'] : null;
$date = isset($_GET['date']) ? $_GET['date'] : null;
$idClasse = isset($_GET['idClasse']) ? $_GET['idClasse'] : null;
//
$nomProf_mat_t1 = isset($_GET['nomProf_mat_t1']) ? $_GET['nomProf_mat_t1'] : null;
$nomProf_mat_t2 = isset($_GET['nomProf_mat_t2']) ? $_GET['nomProf_mat_t2'] : null;
$nomProf_amidi_t1 = isset($_GET['nomProf_amidi_t1']) ? $_GET['nomProf_amidi_t1'] : null;
$nomProf_amidi_t2 = isset($_GET['nomProf_amidi_t2']) ? $_GET['nomProf_amidi_t2'] : null;
//
$nomMatiere_mat_t1 = isset($_GET['nomMatiere_mat_t1']) ? $_GET['nomMatiere_mat_t1'] : null;
$nomMatiere_mat_t2 = isset($_GET['nomMatiere_mat_t2']) ? $_GET['nomMatiere_mat_t2'] : null;
$nomMatiere_amidi_t1 = isset($_GET['nomMatiere_amidi_t1']) ? $_GET['nomMatiere_amidi_t1'] : null;
$nomMatiere_amidi_t2 = isset($_GET['nomMatiere_amidi_t2']) ? $_GET['nomMatiere_amidi_t2'] : null;
// variable pour savoir s'il faut créer une nouvelle absence ou modifier une existante
$mode_ajout = isset($_GET['mode_ajout'])? $_GET['mode_ajout'] : true; // par défaut mode ajout
// connexion à la base de données
mysql_select_db("bd_Etudiants", @mysql_connect("localhost","root","")) or die(mysql_error());
mysql_query ('SET NAMES utf8');
// enregistrer la saisie du formulaire
if (isset($_GET['action']) && $_GET['action']=='Enregistrer')
{
//
$message = "";
if (empty($date)) $message .= "<p>La date est obligatoire !</p>";
if (empty($idClasse)) $message .= "<p>La classe est obligatoire !</p>";
if (empty($nomMatiere_mat_t1) || empty($nomMatiere_mat_t2)
||empty($nomMatiere_amidi_t1) || empty($nomMatiere_amidi_t2)) $message .= "<p>La matière est obligatoire !</p>";
if (empty($nomProf_mat_t1) || empty($nomProf_mat_t2)
||empty($nomProf_amidi_t1) || empty($nomProf_amidi_t2)) $message .= "<p>Le/la prof est obligatoire !</p>";
//
if (empty($message))
{
$listeAbsences = isset($_GET['absences'])?$_GET['absences']:array();
//echo "<pre>"; print_r($listeAbsences); echo "</pre>";
$sql = "SELECT * FROM Etudiant WHERE idClasse = '".$idClasse."';";
$result = mysql_query($sql) or die(mysql_error());
while($result && $row=mysql_fetch_array($result))
{
$idEtudiant = $row['idEtudiant']; $nomEtudiant = $row['nom'];
$presence_mat_t1 = isset($listeAbsences["$idEtudiant"]['mat_t1'])?0:1;
$presence_mat_t2 = isset($listeAbsences["$idEtudiant"]['mat_t2'])?0:1;
$presence_amidi_t1 = isset($listeAbsences["$idEtudiant"]['amidi_t1'])?0:1;
$presence_amidi_t2 = isset($listeAbsences["$idEtudiant"]['amidi_t2'])?0:1;
//
// Nouvel enregistrement ou Mise à jour
if ($mode_ajout==true){
$sql="INSERT INTO assiduite SET date='".$date."', idEtudiant='".$idEtudiant."',
presence_mat_t1='".$presence_mat_t1."',
presence_mat_t2='".$presence_mat_t2."',
presence_amidi_t1='".$presence_amidi_t1."',
presence_amidi_t2='".$presence_amidi_t2."',
nomProf_mat_t1 = '".$nomProf_mat_t1."',
nomProf_mat_t2 = '".$nomProf_mat_t2."',
nomProf_amidi_t1 = '".$nomProf_amidi_t1."',
nomProf_amidi_t2 = '".$nomProf_amidi_t2."',
nomMatiere_mat_t1 = '".$nomMatiere_mat_t1."',
nomMatiere_mat_t2 = '".$nomMatiere_mat_t2."',
nomMatiere_amidi_t1 = '".$nomMatiere_amidi_t1."',
nomMatiere_amidi_t2 = '".$nomMatiere_amidi_t2."';";
} else {
$sql="UPDATE assiduite SET
presence_mat_t1='".$presence_mat_t1."',
presence_mat_t2='".$presence_mat_t2."',
presence_amidi_t1='".$presence_amidi_t1."',
presence_amidi_t2='".$presence_amidi_t2."',
nomProf_mat_t1 = '".$nomProf_mat_t1."',
nomProf_mat_t2 = '".$nomProf_mat_t2."',
nomProf_amidi_t1 = '".$nomProf_amidi_t1."',
nomProf_amidi_t2 = '".$nomProf_amidi_t2."',
nomMatiere_mat_t1 = '".$nomMatiere_mat_t1."',
nomMatiere_mat_t2 = '".$nomMatiere_mat_t2."',
nomMatiere_amidi_t1 = '".$nomMatiere_amidi_t1."',
nomMatiere_amidi_t2 = '".$nomMatiere_amidi_t2."'
WHERE date='".$date."' AND idEtudiant='".$idEtudiant."';";
}
//
//echo $sql;
if (!@mysql_query($sql)) $message .= "<li>".$nomEtudiant." => Erreur : ".mysql_error()."</li>";
}
if (empty($message)) $message = "Enregistrement effectué avec succès";
else $message = "<p>Les Erreurs suivantes sont rencontrées :</ul>" . $message . "</ul></p>";
}
}
// crée la liste des classes
$listeClasses = "";
$sql = "SELECT DISTINCT idClasse FROM Etudiant ORDER BY idClasse;";
$result = mysql_query($sql) or die(mysql_error());
while($result && $row=mysql_fetch_array($result))
{
$selected = $row['idClasse']==$idClasse? " selected " : "";
$listeClasses .= "<option value=\"".$row['idClasse']."\" ".$selected." >".$row['idClasse']."</option>";
}
// crée la liste des élèves de la classe sélectionnée
$listeAssiduiteEtudiants = "";
if (isset($idClasse) && isset($date))
{
// on fait une jointure externe à gauche du côté de la table client vers la table assiduité
// pour afficher tous les élèves de la classe même si les données de présence sont NULL (cas nouvelle saisie)
$sql = "SELECT a.*, total_ha.*, e.*
FROM Etudiant e LEFT OUTER JOIN assiduite a ON e.idEtudiant=a.idEtudiant AND a.date=date('".$date."')
LEFT OUTER JOIN total_heures_absence total_ha ON e.idEtudiant=total_ha.idEtudiant
WHERE e.idClasse = '".$idClasse."'
ORDER BY e.nom, e.prenom";
//echo $sql;
$result = mysql_query($sql) or die(mysql_error());
while($result && $row=mysql_fetch_array($result))
{
// si les données d'assiduité sont NULL (surtout la date) alors il s'agit d'une nouvelle feuille de présence
// sinon affiche l'absence sous 4 tranches horaires : 2 le matin(mat_t1 et mat_t2) et 2 l'après-midi(amidi_t1 et amidi_t2)
if (is_null($row["date"])) $mode_ajout = true; else $mode_ajout = false;
// stat du total des nbre_heures_absence
$nbre_heures_absence = $row['nbre_heures_absence'];
//
$nomProf_mat_t1 = $row['nomProf_mat_t1'];
$nomProf_mat_t2 = $row['nomProf_mat_t2'];
$nomProf_amidi_t1 = $row['nomProf_amidi_t1'];
$nomProf_amidi_t2 = $row['nomProf_amidi_t2'];
//
$nomMatiere_mat_t1 = $row['nomMatiere_mat_t1'];
$nomMatiere_mat_t2 = $row['nomMatiere_mat_t2'];
$nomMatiere_amidi_t1 = $row['nomMatiere_amidi_t1'];
$nomMatiere_amidi_t2 = $row['nomMatiere_amidi_t2'];
//
$mat_t1_checked = $row['presence_mat_t1']!=1 && !is_null($row['presence_mat_t1']) ? " checked " : "";
$mat_t2_checked = $row['presence_mat_t2']!=1 && !is_null($row['presence_mat_t2']) ? " checked " : "";
$amidi_t1_checked = $row['presence_amidi_t1']!=1 && !is_null($row['presence_amidi_t1']) ? " checked " : "";
$amidi_t2_checked = $row['presence_amidi_t2']!=1 && !is_null($row['presence_amidi_t2']) ? " checked " : "";
//
$listeAssiduiteEtudiants .= "<tr><td>".$row['nom']." ".$row['prenom']."</td>
<td><input type=\"checkbox\" name=\"absences[".$row['idEtudiant']."][mat_t1]\" ".$mat_t1_checked." /> Absent(e)</td>
<td><input type=\"checkbox\" name=\"absences[".$row['idEtudiant']."][mat_t2]\" ".$mat_t2_checked." /> Absent(e)</td>
<td><input type=\"checkbox\" name=\"absences[".$row['idEtudiant']."][amidi_t1]\" ".$amidi_t1_checked." /> Absent(e)</td>
<td><input type=\"checkbox\" name=\"absences[".$row['idEtudiant']."][amidi_t2]\" ".$amidi_t2_checked." /> Absent(e)</td>
<td>" . $nbre_heures_absence . "</td></tr>";
}
}
// crée les listes des matières
$listeMatieres_mat_t1 = "";
$listeMatieres_mat_t2 = "";
$listeMatieres_amidi_t1 = "";
$listeMatieres_amidi_t2 = "";
$sql = "SELECT * FROM matiere ORDER BY nom;";
$result = mysql_query($sql) or die(mysql_error());
while($result && $row=mysql_fetch_array($result))
{
$selected = $row['nom']==$nomMatiere_mat_t1? " selected " : "";
$listeMatieres_mat_t1 .= "<option value=\"".$row['nom']."\" ".$selected." >".$row['nom']."</option>";
//
$selected = $row['nom']==$nomMatiere_mat_t2? " selected " : "";
$listeMatieres_mat_t2 .= "<option value=\"".$row['nom']."\" ".$selected." >".$row['nom']."</option>";
//
$selected = $row['nom']==$nomMatiere_amidi_t1? " selected " : "";
$listeMatieres_amidi_t1 .= "<option value=\"".$row['nom']."\" ".$selected." >".$row['nom']."</option>";
//
$selected = $row['nom']==$nomMatiere_amidi_t2? " selected " : "";
$listeMatieres_amidi_t2 .= "<option value=\"".$row['nom']."\" ".$selected." >".$row['nom']."</option>";
}
// crée les listes des profs
$listeProfs_mat_t1 = "";
$listeProfs_mat_t2 = "";
$listeProfs_amidi_t1 = "";
$listeProfs_amidi_t2 = "";
$sql = "SELECT * FROM prof ORDER BY nom;";
$result = mysql_query($sql) or die(mysql_error());
while($result && $row=mysql_fetch_array($result))
{
$selected = $row['nom']==$nomProf_mat_t1? " selected " : "";
$listeProfs_mat_t1 .= "<option value=\"".$row['nom']."\" ".$selected." >".$row['nom']."</option>";
//
$selected = $row['nom']==$nomProf_mat_t2? " selected " : "";
$listeProfs_mat_t2 .= "<option value=\"".$row['nom']."\" ".$selected." >".$row['nom']."</option>";
//
$selected = $row['nom']==$nomProf_amidi_t1? " selected " : "";
$listeProfs_amidi_t1 .= "<option value=\"".$row['nom']."\" ".$selected." >".$row['nom']."</option>";
//
$selected = $row['nom']==$nomProf_amidi_t2? " selected " : "";
$listeProfs_amidi_t2 .= "<option value=\"".$row['nom']."\" ".$selected." >".$row['nom']."</option>";
}
// fin de connexion
mysql_close();
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Gestion d'assiduité des élèves</title>
<link rel="stylesheet" type="text/css" href="calendrier.css">
<script type="text/javascript" src="calendrier.js"></script>
</head>
<body>
<h1>Gestion d'assiduité des élèves</h1>
<form name="form1" action="" method="get">
<table>
<tr>
<th>Classe :</th><td><select name="idClasse" onchange="form1.submit();" value="<?php echo $idClasse; ?>" >
<option value="" ></option>
<?php echo $listeClasses; ?>
</select></td>
<th>Date : </th><td><input type="text" id="dateLib" name="dateComplete" value="<?php echo isset($dateComplete)?$dateComplete:date("d-m-Y"); ?>" style="width:180px" onfocus="visuCal('date', this,{'format' : '%d, %k %p %a'})" onblur="masqueCal(this);" />
<input type="hidden" id="date" name="date" value="<?php echo isset($date)?date("Y-m-d",strtotime($date)):date("Y-m-d"); ?>" />
<input type="submit" name="action" value="Valider la date" />
</td>
</tr>
</table>
<hr />
<?php if ($mode_ajout==true) { ?>
<h2>Nouvelle Feuille de présence du <?php echo isset($date)?date("d-m-Y",strtotime($date)):date("d-m-Y"); ?></h2>
<p>Veuillez cocher une case pour désigner une absence.<br />
Pour ajouter cette feuille dans la base de données, appuyer sur le bouton Enregistrer</p>
<?php } else { ?>
<h2>Feuille de présence existante du <?php echo isset($date)?date("d-m-Y",strtotime($date)):'Aucune date'; ?></h2>
<p>Veuillez cocher une case pour désigner une absence.<br />
Vous pouvez modifie cette feuille puis appuyer sur le bouton Enregistrer pour mettre à jour la base de données.</p>
<?php } ?>
<table border="1">
<tr><th>Nom - Prenom</th><th>8h00 - 10h00</th><th>10h00 - 12h00</th><th>13h30 - 15h30</th><th>15h30 - 17h30</th><th>Total heures d'absences</th></tr>
<?php echo $listeAssiduiteEtudiants; ?>
<tr>
<th>Prof : </th>
<td><select id="nomProf1" name="nomProf_mat_t1" value="<?php echo $nomProf_mat_t1; ?>" onchange="remplissageAuto('nomProf',this.value)">
<option value="" ></option>
<?php echo $listeProfs_mat_t1; ?>
</select></td>
<td><select id="nomProf2" name="nomProf_mat_t2" value="<?php echo $nomProf_mat_t2; ?>" >
<option value="" ></option>
<?php echo $listeProfs_mat_t2; ?>
</select></td>
<td><select id="nomProf3" name="nomProf_amidi_t1" value="<?php echo $nomProf_amidi_t1; ?>" >
<option value="" ></option>
<?php echo $listeProfs_amidi_t1; ?>
</select></td>
<td><select id="nomProf4" name="nomProf_amidi_t2" value="<?php echo $nomProf_amidi_t2; ?>" >
<option value="" ></option>
<?php echo $listeProfs_amidi_t2; ?>
</select></td>
</tr>
<tr>
<th>Matière : </th>
<td><select id="nomMat1" name="nomMatiere_mat_t1" value="<?php echo $nomMatiere_mat_t1; ?>" onchange="remplissageAuto('nomMat',this.value)">
<option value="" ></option>
<?php echo $listeMatieres_mat_t1; ?>
</select></td>
<td><select id="nomMat2" name="nomMatiere_mat_t2" value="<?php echo $nomMatiere_mat_t2; ?>" >
<option value="" ></option>
<?php echo $listeMatieres_mat_t2; ?>
</select></td>
<td><select id="nomMat3" name="nomMatiere_amidi_t1" value="<?php echo $nomMatiere_amidi_t1; ?>" >
<option value="" ></option>
<?php echo $listeMatieres_amidi_t1; ?>
</select></td>
<td><select id="nomMat4" name="nomMatiere_amidi_t2" value="<?php echo $nomMatiere_amidi_t2; ?>" >
<option value="" ></option>
<?php echo $listeMatieres_amidi_t2; ?>
</select></td>
</tr>
</table>
<script type="text/javascript">
function remplissageAuto(idZone, valeur){
for(i=1;i<=4;i++) document.getElementById(idZone+i).value = valeur;
}
</script>
<input type="hidden" name="mode_ajout" value="<?php echo $mode_ajout; ?>" />
<input type="submit" name="action" value="Enregistrer" />
<input type="submit" name="action" value="Exporter" />
</form>
<div id="message"><?php echo isset($message)?$message:''; ?></div>
</body>
</html>
<?php
// Exportation de la feuille vers un fichier excel
if (isset($_GET['action']) && $_GET['action']=='Exporter')
{
include("formAssiduite_Export.php");
}
?>
Attention à l'ordre des traitements dans ce programme : variables, traitement de l'enregistrement, remplissage des listes et validation date, et finalement le formulaire HTML.
Car c'est un programme cyclique qui tourne autour du formulaire HTML(dernier de la séquence)
Le remplissage des listes vient après l’enregistrement des données pour ne pas risquer de modifier les données envoyées