gestion absences/presences en php

Eléphant du PHP | 150 Messages

26 avr. 2011, 14:50

j'ai utilisé tes requête mais je ne sais pas où les mettre exactement dans le php :
Eleve : 
<select name="idEleve" value="<?php $sql = "SELECT * FROM eleve"; ?>" >
<option value="<?php $sql = "SELECT * FROM eleve"; ?>" ></option>
</select>
Date : </th><td><input type="text" id="dateLib" name="date" value="<?php echo $date; ?>" style="width:180px"
        onfocus="visuCal(this,{'format' : '%a-%m-%j'})" onblur="masqueCal(this);"  /></td><br/><br/>
	<input type="submit" name="action" value="nb heures absence" onclick="<?php $sql = "SELECT * FROM `nbre_heures_absence` WHERE date = '" . $date . "'  AND idEleve = '". $idEleve. "' ";?>"> 	
</select>
<br/><br/>		
		
Eleve : 
<select name="idEleve" value="<?php $sql = "SELECT * FROM eleve"; ?>" >
<option value="<?php $sql = "SELECT * FROM eleve"; ?>" ></option>
</select>
Date : </th><td><input type="text" id="dateLib" name="date" value="<?php echo $date; ?>" style="width:180px"
        onfocus="visuCal(this,{'format' : '%a-%m-%j'})" onblur="masqueCal(this);"  /></td><br/><br/>
	<input type="submit" name="action" value="nb heures présence" onclick="<?php $sql = "SELECT * FROM `nbre_heures_absence` WHERE date = '" . $date . "'  AND idEleve = '". $idEleve. "' ";?>"> 	
	</select>
	<br/><br/>
	
Eleve : 
<select name="idEleve" value="<?php $sql = "SELECT * FROM eleve"; ?>" >
<option value="" ></option>
</select>&nbsp;&nbsp;&nbsp
<input type="submit" name="action" value="Total heures présence">

<br/><br/>

Eleve : 
<select name="idEleve" value="<?php $sql = "SELECT * FROM eleve"; ?>" >
<option value="" ></option>
</select>&nbsp;&nbsp;&nbsp
<input type="submit" name="action" value="Total heures absence">
Tu veux mourir? OK!! Mais pas dans ma voiture, alors attache ta ceinture !! :pouce:
Tony :boire9:

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

26 avr. 2011, 19:23

Je ne comprends pas ton script php et ce n'est pas comme ça qu'on remplie une liste déroulante à partir de SQL.

Explique d'abord ce que tu veux obtenir en affichage et révise le programme qu'on a fait précédemment concernant le remplissage d'une liste déroulante. Sinon on avancera pas.

Aller, Courage. :wink:
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Eléphant du PHP | 150 Messages

27 avr. 2011, 08:46

Bonjour,
dsl j'ai essayer de "bidouiller" à ma façon.
Ce que je veux c'est ce que j'ai expliquer auparavant et ce que tu vois dans l'html :

donc un truc dans ce genre :
Image

mais ce qui serait le top et plus simple pour l'utilisateur serait ça :
Image

Le problème c'est que je pense qu'en reprenant ton code il faut que je change listeEleve :
$nom = isset($_GET['nom']) && !empty($_GET['nom'])? $_GET['nom'] : null;
$idEleve = isset($_GET['idEleve']) && !empty($_GET['idEleve'])? $_GET['idEleve'] : null;
//nombre d'heure d'absence par rapport a la date
$nombreheureabsence = "";
$sql = "SELECT * FROM `nbre_heures_absence` WHERE date = '" . $date . "'  AND idEleve = '". $idEleve. "' ";
$result = mysql_query($sql) or die(mysql_error());

//nombre d'heure de présence par rapport a la date
$nombreheurepresence = "";
$sql = "SELECT * FROM `nbre_heures_presence` WHERE date = '" . $date . "'  AND idEleve = '". $idEleve. "' ";
$result = mysql_query($sql) or die(mysql_error());

//total heure presence
$totalheurepresence = "";
$sql = "SELECT * FROM `total_heures_presence` ";
$result = mysql_query($sql) or die(mysql_error());

//total heure absence
$totalheureabsence = "";
$sql = "SELECT * FROM `total_heures_absence` ";
$result = mysql_query($sql) or die(mysql_error());

//liste des élèves 
$listeDesEleves = "";
$sql = "SELECT * FROM eleve";
$result = mysql_query($sql) or die(mysql_error());
while($result && $row=mysql_fetch_array($result))
{
        $selected = $row['nom']==$nom? " selected " : "";
        $listeDesEleves .= "<option value=\"".$row['nom']."\" ".$selected." >".$row['nom']."</option>";
}
Eleve : 
<select name="nom" onchange="form1.submit();" value="<?php echo $nom; ?>" >
<option value="" ></option>
<?php echo $listeDesEleves; ?>
</select>
Date : </th><td><input type="text" id="dateLib" name="date" value="<?php echo $date; ?>" style="width:180px"
        onfocus="visuCal(this,{'format' : '%a-%m-%j'})" onblur="masqueCal(this);"  /></td><br/><br/>
	<input type="submit" name="action" value="nb heures absence" onclick="<?php $sql = "SELECT * FROM `nbre_heures_absence` WHERE date = '" . $date . "'  AND idEleve = '". $idEleve. "' ";?>"> 	
</select>
<br/><br/>		
		
Eleve : 
<select name="nom" onchange="form1.submit();" value="<?php echo $nom; ?>" >
<option value="" ></option>
<?php echo $listeDesEleves; ?>
</select>
Date : </th><td><input type="text" id="dateLib" name="date" value="<?php echo $date; ?>" style="width:180px"
        onfocus="visuCal(this,{'format' : '%a-%m-%j'})" onblur="masqueCal(this);"  /></td><br/><br/>
	<input type="submit" name="action" value="nb heures présence" onclick="<?php?>"> 	
	</select>
	<br/><br/>
	
Eleve : 
<select name="nom" onchange="form1.submit();" value="<?php echo $nom; ?>" >
<option value="" ></option>
<?php echo $listeDesEleves; ?>
</select>&nbsp;&nbsp;&nbsp
<input type="submit" name="action" value="Total heures présence">

<br/><br/>

Eleve : 
<select name="nom" onchange="form1.submit();" value="<?php echo $nom; ?>" >
<option value="" ></option>
<?php echo $listeDesEleves; ?>&nbsp;&nbsp;&nbsp
<input type="submit" name="action" value="Total heures absence">


Par contre je ne sais pas comment relier les bouton pour qu'ils fassent ce que je leur demande, de plus j'ai du me tromper en écrivant " le nombre d'heure d'absence par rapport a la date" et les autres aussi, il doit manquer des choses.
Tu veux mourir? OK!! Mais pas dans ma voiture, alors attache ta ceinture !! :pouce:
Tony :boire9:

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

27 avr. 2011, 14:13

mais ce qui serait le top et plus simple pour l'utilisateur serait ça :
Image
Ce formulaire est en effet, le plus approprié et le plus simple à programmer.

Voici comment l'enchainement se fera:
1. L'utilisateur choisie un élève dans la liste d'élèves
2. L'utilisateur choisie éventuellement une date (s'il souhaite afficher les absences/présences par date (jour)
3. L'utilisateur clic sur un des boutons pour déclencher le programme qui recherche les nombres d'absences/présences via les requêtes de calcul.

Nous allons procéder par étape pour que tu puisse comprendre ce que tu fais. Voici la première étape que tu dois faire:

Alors, il faudra d'abord donner les bon noms à chaque objet du formulaire :
1. la liste des élèves sera nommée : idEleve et ses lignes <option> auront comme VALUE les idEleve et afficheront les noms des élèves. Car quand un utilisateur choisi un élève le formulaire transmettra son idEleve qui est la clé primaire ce qui nous permet d'utiliser cet idEleve dans les requêtes de calcul des nombres d' absences/présences.

2. la zone de date sera nommée : date

3. chaque bouton de calcul sera un bouton de type submit et aura un nom désignant sa tâche, par exemple le bouton qui doit calculer le nombre d'absences par date aura le nom : "action_nb_absences_date" etc...
Le fait de nommer les boutons submit nous permet dans le programme php de savoir quand exécuter telle ou telle requête de calcul.

Quand un des boutons d'action est cliqué, le formulaire est envoyé au programme php qui reçoit donc les noms des zones saisies et du bouton activé dans le tableau $_GET ou $_POST selon la méthode de postage du formulaire.

Ok, maintenant le travail à faire est d'écrire le code HTML du formulaire selon les règles que j'ai expliqué et aussi la partie du code PHP qui réceptionne les zones envoyées.

Fais ça d'abord et montre le moi.
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Eléphant du PHP | 150 Messages

27 avr. 2011, 17:11

pour l'instant j'ai fait sa :
//liste des élèves 
$listeDesEleves = "";
$sql = "SELECT * FROM eleve";
$result = mysql_query($sql) or die(mysql_error());
while($result && $row=mysql_fetch_array($result))
{
        $selected = $row['idEleve']==$nom? " selected " : "";
        $listeDesEleves .= "<option value=\"".$row['idEleve']."\" ".$selected." >".$row['nom']."</option>";
}
la liste des élèves s'affiche mais dès que je choisis le nom il ne reste pas.et j'aimerais savoir si je me suis pas tromper avec les "id", si ils sont au bon endroit ou pas.

De plus j'ai une erreur sur mon serveur dès que je choisis la classe (pour la premiere partie que tu m'as créer):
You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '('2011-04-27') WHERE e.idClasse = 'BTS AG 1' OR
Tu veux mourir? OK!! Mais pas dans ma voiture, alors attache ta ceinture !! :pouce:
Tony :boire9:

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

27 avr. 2011, 18:09

Eu, j'ai une question : Où est-ce que tu écris ce nouveau programme, est-ce que tu l'ajoute au programme précédant (feuille d'absence) ou bien tu le mets dans une nouvelle page sur un formulaire à part ?

A mon avis, il faut mettre ce nouveau formulaire dans une page et un programme PHP à part.
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
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, 08:21

Oui je vais le mettre sur une page a part !!pourquoi le nom que je sélectionne ne reste pas alors?et mon code alors qu'est ce qu'il ne va pas?

Autre question : est t'il possible d'exporter la feuille d'absence sur excel ?
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, 09:13

si je t'est posé des question par rapport au serveur ne t'en occupe plus car pour l'instant il faut que je le finisse en local, sinon je ne peux pas supprimer des heures d'absences des élèves, c'est normal ?
Erreur

requête SQL:

DELETE FROM `bd_eleves`.`nbre_heures_absence` WHERE `nbre_heures_absence`.`date` = '2024-02-11' AND `nbre_heures_absence`.`idEleve` =31 AND CONCAT( `nbre_heures_absence`.`nbre_heures_absence` ) = '0' LIMIT 1

MySQL a répondu: Documentation
#1288 - The target table nbre_heures_absence of the DELETE is not updatable 
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, 09:15

en faite c'est bon il faut que je supprime a partir de la table assiduité.
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, 09:55

Voici ce que j'ai mis dans la page de consultation des nombres d'absences/présences par élève et par date :
<?php
// reception des zones du formulaires
$date = isset($_GET['date']) && !empty($_GET['date'])? $_GET['date'] : null;
$idEleve = isset($_GET['idEleve']) && !empty($_GET['idEleve'])? $_GET['idEleve'] : null;

// connexion à la base de données
mysql_select_db("bd_eleves", @mysql_connect("localhost","root","")) or die(mysql_error());

// remplissage systématique de la liste des élèves
$listeDesEleves = "";
$sql = "SELECT * FROM eleve";
$result = mysql_query($sql) or die(mysql_error());
while($result && $row=mysql_fetch_array($result))
{
        $selected = $row['idEleve']==$idEleve? " selected " : "";
        $listeDesEleves .= "<option value=\"".$row['idEleve']."\" ".$selected." >".$row['nom']."</option>";
}

//-------------------------------------
// TRAITEMENT DES BOUTON D'ACTION
//-------------------------------------
$message = "";
if (isset($_GET['action_nb_absence_date']) && !empty($idEleve) && !empty($date))
{
	// CALCUL DU NOMBRE D'ABSENCES D'UN ELEVE POUR UNE DATE
	$nombreheureabsence = 0;
	$sql = "SELECT * FROM `nbre_heures_absence` WHERE date = '" . $date . "'  AND idEleve = '". $idEleve. "' ";
	$result = mysql_query($sql) or die(mysql_error());
	if ($result)
	{
		$row = mysql_fetch_array($result);
		$nombreheureabsence = $row['nbre_heures_absence'];
	}
	$message = "Nombre d'heures d'absence : " . $nombreheureabsence . "H";
}
//------------------------------------------
if (isset($_GET['action_nb_presence_date']) && !empty($idEleve) && !empty($date))
{
	// CALCUL DU NOMBRE DE PRESENCES D'UN ELEVE POUR UNE DATE
	$nombreheurepresence = 0;
	$sql = "SELECT * FROM `nbre_heures_presence` WHERE date = '" . $date . "'  AND idEleve = '". $idEleve. "' ";
	$result = mysql_query($sql) or die(mysql_error());
	if ($result)
	{
		$row = mysql_fetch_array($result);
		$nombreheurepresence = $row['nbre_heures_presence'];
	}
	$message = "Nombre d'heures de présence : " . $nombreheurepresence . "H";
}
//-----------------------------------------------
if (isset($_GET['action_total_absence']) && !empty($idEleve))
{
	// CALCUL DU TOTAL D'ABSENCES D'UN ELEVE
	$totalheureabsence  = 0;
	$sql = "SELECT * FROM `total_heures_absence` WHERE idEleve = '". $idEleve. "' ";
	$result = mysql_query($sql) or die(mysql_error());
	if ($result)
	{
		$row = mysql_fetch_array($result);
		$totalheureabsence = $row['nbre_heures_absence'];
	}
	$message = "Total heures d'absence : " . $totalheureabsence . "H";
}
//-----------------------------------------------
if (isset($_GET['action_total_presence']) &&  !empty($idEleve))
{
	// CALCUL DU TOTAL DE PRESENCES D'UN ELEVE
	$totalheurepresence  = 0;
	$sql = "SELECT * FROM `total_heures_presence` WHERE idEleve = '". $idEleve. "' ";
	$result = mysql_query($sql) or die(mysql_error());
	if ($result)
	{
		$row = mysql_fetch_array($result);
		$totalheurepresence = $row['nbre_heures_presence'];
	}
	$message = "Total heures de présence : " . $totalheurepresence . "H";
}

// fin php
?>

<form name="form1">
<table>
<tr>
<th>Eleve :</th>
<th><select name="idEleve" onchange="form1.submit();" value="<?php echo isset($idEleve)?$idEleve:null; ?>" >
<option value="" ></option>
<?php echo isset($listeDesEleves)?$listeDesEleves:null; ?>
</select></th>
<th>Date : </th>
<th><input type="text" id="dateLib" name="date" value="<?php echo isset($date)?$date:null; ?>" style="width:180px"
        onfocus="visuCal(this,{'format' : '%a-%m-%j'})" onblur="masqueCal(this);"  /></th>
<th>
<input type="submit" name="action_nb_absence_date" value="nb heures absences par date">
<br />           
<input type="submit" name="action_nb_presence_date" value="nb heures présences par date">
<br />           
<input type="submit" name="action_total_absence" value="Total absences">
<br />           
<input type="submit" name="action_total_presence" value="Total présences">
</th>
</tr>
</table>
<p><?php echo isset($message)?$message:null; ?></p>
</form>
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
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, 10:47

Merci bien,les totaux fonctionnent mais pas le reste mais cela doit venir de ma base de donnée où il manque des choses,tu ne m'as pas répondu pour l'exportation sur excel . C'est possible ?
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, 10:51

Oui c'est possible d'exporter des données au format CSV compatible Excel. Tu peux aussi exporter la table assiduité via phpMyAdmin sous le format CSV ou directement Excel et construire un tableau croisé dynamique dessus.
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
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, 11:07

depuis la base je sais que c'est possible mais j'aimerais le faire depuis le site, en faite le directeur voudrait pouvoir récupérer les tableaux sur excel une fois qu'il les a enregistrer pour avoir une trace.Donc est ce que ça c'est possible?et d'ailleurs pour imprimer le tableau on est obliger d'utiliser une feuille de style?
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, 12:05

j'ai une autre question : Est il possible de récupérer le nombre d'heure pour un mois choisis?
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, 12:45

Oui c'est possible, car manuellement, on peut faire l'affaire par copier le tableau sur le navigateur internet et coller vers Excel. Du coup, on peut programmer même en PHP une opération similaire. C'est à dire rediriger l'affichage de la feuille de présence vers un fichier au lieu de l'afficher vers le navigateur du client.
Cette redirection d'affichage est possible sous PHP grâce aux fonction de "buffurisation" ob_start() et ob_end_flush().

Voici un exemple simple :
<?php
// fonction de gestion du buffer d'affichage redirigé par ob_end_flush()
function enregistrer_sous_excel($buffer)
{
  // enregistre l'affichage sous un fichier Excel
  file_put_contents ("f1.xls", $buffer);
  return $buffer; // affiche vers le navigateur
}
// redirige l'affichage vers la fonction désignée
ob_start('enregistrer_sous_excel');

// ce qui doit être affiché
echo "coucou";

// déclenche la redirection de l'affichage
ob_end_flush();
?>
Ce qui crée un fichier f1.xls qui va contenir une feuille nommée "f1" et un texte "coucou" dans la première cellule A1
Et donc t'as compris la suite, tous ce qui est affiché entre ob_start() et ob_end_flush() par des instruction echo ou print ou même écrit en HTML sera redirigé vers la fonction callback qui est déclarée au niveau de ob_start(...) et c'est cette fonction callback qui réalise l'enregistrement de l'affichage dans le fichier f1.xls (on lui a donné l'extension .xls pour que Excel l'ouvre par défaut, mais il reste toutefois un simple fichier texte/html)

Alors maintenant que tu as compris le principe, on va s'amuser à exporter une table HTML sous Excel. Voici l'exemple:
<?php
// fonction de gestion du buffer d'affichage redirigé par ob_end_flush()
function enregistrer_sous_excel($buffer)
{
  // enregistre l'affichage sous un fichier Excel
  file_put_contents ("mesContacts.xls", $buffer);
  return "<a href=\"mesContacts.xls\">Fichier mesContacts.xls exporté</a>"; // affiche vers le navigateur
}
// redirige l'affichage vers la fonction désignée
ob_start('enregistrer_sous_excel');

// ce qui doit être affiché
?>
<h1>Liste de contacts</h1>
<table border="1">
<tr><th>N°</th><th>Nom</th><th>Email</th></tr>
<tr><td>1</td><td>Aline</td><td>[email protected]</td></tr>
<tr><td>2</td><td>Marc</td><td>[email protected]</td></tr>
</table>

<?php
// déclenche la redirection de l'affichage
ob_end_flush();
?>
Ce programme crée donc une table de contacts (n°, nom et email) et l'exporte sous Excel.

Bien, maintenant en appliquant ce principe à notre cas de gestion d'absences, on peut exporter sous Excel, la feuille de présence telle qu'elle est remplie et enregistrée par le programme qu'on déjà élaboré.
Pour cela, il faut ajouter un bouton "exporter" au formulaire existant qui doit renvoyer vers le programme d'exportation suivant : (que j'ai appelé : formAssiduite_export.php)
<?php
// fonction de gestion du buffer d'affichage redirigé par ob_end_flush()
function enregistrer_sous_excel($buffer)
{
  // enregistre l'affichage sous un fichier Excel
  file_put_contents ("formAssiduite.xls", $buffer);
  return "Exportation effectuée dans le fichier <a href=\"formAssiduite.xls\">formAssiduite.xls</a>"; // affiche un message vers le navigateur
}
// redirige l'affichage vers la fonction désignée
ob_start('enregistrer_sous_excel');


// init
$date = isset($_GET['date']) && !empty($_GET['date'])? $_GET['date'] : null;
$idClasse = isset($_GET['idClasse']) && !empty($_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;


// connexion à la base de données
mysql_select_db("bd_eleves", @mysql_connect("localhost","root","")) or die(mysql_error());


// crée la liste des élèves de la classe sélectionnée
$listeAssiduiteEleves = "";
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 eleve e LEFT OUTER JOIN assiduite a ON e.idEleve=a.idEleve AND a.date=date('".$date."')
	LEFT OUTER JOIN total_heures_absence total_ha ON e.idEleve=total_ha.idEleve
	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 " : "";
		//
		$listeAssiduiteEleves .= "<tr><td>".$row['nom']." ".$row['prenom']."</td>
		<td><input type=\"checkbox\" ".$mat_t1_checked." /> Absent(e)</td>
		<td><input type=\"checkbox\" ".$mat_t2_checked." /> Absent(e)</td>
		<td><input type=\"checkbox\" ".$amidi_t1_checked." /> Absent(e)</td>
		<td><input type=\"checkbox\" ".$amidi_t2_checked." /> Absent(e)</td>
		<td>" . $nbre_heures_absence . "</td></tr>";
	}
}

// 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">
</head>
<body>
<h1>Gestion d'assiduité des élèves</h1>
<table>
<tr>
<th>Classe :</th><td><?php echo $idClasse; ?></td>
<th>Date : </th><td><?php echo $date; ?></td>
</tr>
</table>
<hr />
<h2>Feuille de présence existante du <?php echo date("d-m-Y",strtotime($date)); ?></h2>
<p>Veuillez cocher une case pour désigner une absence.</p>
<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 $listeAssiduiteEleves; ?>
<tr>
<th>Prof : </th>
<td><?php echo $nomProf_mat_t1; ?></td><td><?php echo $nomProf_mat_t2; ?></td>
<td><?php echo $nomProf_amidi_t1; ?></td><td><?php echo $nomProf_amidi_t2; ?></td>
</tr>
<tr>
<th>Matière : </th>
<td><?php echo $nomMatiere_mat_t1; ?></td><td><?php echo $nomMatiere_mat_t2; ?></td>
<td><?php echo $nomMatiere_amidi_t1; ?></td><td><?php echo $nomMatiere_amidi_t2; ?></td>
</tr>
</table>
</body>
</html>

<?php
// déclenche la redirection de l'affichage
ob_end_flush();
?>
Ce programme est la copie du programme existant qui remplie et enregistre les absences sauf qu'il n'affiche plus les listes déroulantes et qu'il repose sur les données déjà enregistrées. C'est juste un programme d'affichage d'une feuille d'absence existante. Il doit être appelé donc dans le programme principal via le bouton "exporter"

Voici un rappel du programme principal : formAssiduite.php qui enregistre les absences, avec l'ajout du bouton "exporter":
<?php 
// init
$date = isset($_GET['date']) && !empty($_GET['date'])? $_GET['date'] : null;
$idClasse = isset($_GET['idClasse']) && !empty($_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']) && !empty($_GET['mode_ajout'])? $_GET['mode_ajout'] : null;

// connexion à la base de données
mysql_select_db("bd_eleves", @mysql_connect("localhost","root","")) or die(mysql_error());

// 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 eleve WHERE idClasse = '".$idClasse."';";
		$result = mysql_query($sql) or die(mysql_error());
		while($result && $row=mysql_fetch_array($result))
		{
			$idEleve = $row['idEleve'];	$nomEleve = $row['nom'];
			$presence_mat_t1 = isset($listeAbsences["$idEleve"]['mat_t1'])?0:1;
			$presence_mat_t2 = isset($listeAbsences["$idEleve"]['mat_t2'])?0:1;
			$presence_amidi_t1 = isset($listeAbsences["$idEleve"]['amidi_t1'])?0:1;
			$presence_amidi_t2 = isset($listeAbsences["$idEleve"]['amidi_t2'])?0:1;
			//
			// Nouvel enregistrement ou Mise à jour
			if ($mode_ajout==true){
			$sql="INSERT INTO assiduite SET date='".$date."', idEleve='".$idEleve."', 
									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 idEleve='".$idEleve."';";			
			}
			//
			//echo $sql;
			if (!@mysql_query($sql)) $message .= "<li>".$nomEleve." => 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 eleve 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
$listeAssiduiteEleves = "";
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 eleve e LEFT OUTER JOIN assiduite a ON e.idEleve=a.idEleve AND a.date=date('".$date."')
	LEFT OUTER JOIN total_heures_absence total_ha ON e.idEleve=total_ha.idEleve
	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 " : "";
		//
		$listeAssiduiteEleves .= "<tr><td>".$row['nom']." ".$row['prenom']."</td>
		<td><input type=\"checkbox\" name=\"absences[".$row['idEleve']."][mat_t1]\" ".$mat_t1_checked." /> Absent(e)</td>
		<td><input type=\"checkbox\" name=\"absences[".$row['idEleve']."][mat_t2]\" ".$mat_t2_checked." /> Absent(e)</td>
		<td><input type=\"checkbox\" name=\"absences[".$row['idEleve']."][amidi_t1]\" ".$amidi_t1_checked." /> Absent(e)</td>
		<td><input type=\"checkbox\" name=\"absences[".$row['idEleve']."][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="date" value="<?php echo $date; ?>" style="width:180px"
        onfocus="visuCal(this,{'format' : '%a-%m-%j'})" onblur="masqueCal(this);"  />
		<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 date("d-m-Y",strtotime($date)); ?></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 date("d-m-Y",strtotime($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 $listeAssiduiteEleves; ?>
<tr>
<th>Prof : </th>
<td><select name="nomProf_mat_t1" value="<?php echo $nomProf_mat_t1; ?>" >
<option value="" ></option>
<?php echo $listeProfs_mat_t1; ?>
</select></td>
<td><select name="nomProf_mat_t2" value="<?php echo $nomProf_mat_t2; ?>" >
<option value="" ></option>
<?php echo $listeProfs_mat_t2; ?>
</select></td>
<td><select name="nomProf_amidi_t1" value="<?php echo $nomProf_amidi_t1; ?>" >
<option value="" ></option>
<?php echo $listeProfs_amidi_t1; ?>
</select></td>
<td><select 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 name="nomMatiere_mat_t1" value="<?php echo $nomMatiere_mat_t1; ?>" >
<option value="" ></option>
<?php echo $listeMatieres_mat_t1; ?>
</select></td>
<td><select name="nomMatiere_mat_t2" value="<?php echo $nomMatiere_mat_t2; ?>" >
<option value="" ></option>
<?php echo $listeMatieres_mat_t2; ?>
</select></td>
<td><select name="nomMatiere_amidi_t1" value="<?php echo $nomMatiere_amidi_t1; ?>" >
<option value="" ></option>
<?php echo $listeMatieres_amidi_t1; ?>
</select></td>
<td><select name="nomMatiere_amidi_t2" value="<?php echo $nomMatiere_amidi_t2; ?>" >
<option value="" ></option>
<?php echo $listeMatieres_amidi_t2; ?>
</select></td>
</tr>
</table>

<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");
	}
?>
Voila, bonne lecture.
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène