gestion absences/presences en php

Eléphant du PHP | 150 Messages

25 mai 2011, 10:39

petite question a part : pour définir mes nouvelle variable pour pas qu'il y est plusieurs fois "nom" etc, il faut bien que je laisse a un moment donné le même nom que dans la base de donnée ou bien c'est que dans les requête SQL qu'il faut impérativement avoir les mêmes nom?
C'est que dans les requêtes SQL que tu es obligé de respecter l'orthographe du nom du champ d'une table. Par contre, en PHP les variables qui commencent par $ tu peux les nommer "comme tu veux" mais il faut tout de même choisir des noms lisibles qui se rapportent à un objet dans son contexte. Comme par exemple, si tu as un champ "nom" dans la table "Etudiant" et à autre champ "nom" dans la table "Entreprise" ou "Prof" ... dans le code PHP tu peux utiliser 3 variables pour désigner ces noms nommées selon leurs contextes et rôles : $nomEtudiant, $nomEntreprise, $nomProf, ... Tu vois c'est lisible comme ça. En plus ces noms de variables peuvent être utilisés dans plusieurs programmes PHP du même projet sans devoir inventer à chaque fois d'autres noms comme $nomEtudiant1, $nomEtudiant2, ... ça c'est aberrant.
De plus, ce système de nommage peut s'étendre aux nom des zones des formulaires HTML. Par exemple : si dans un formulaire d'enregistrement d'un étudiant, tu as une zone de saisie du nom de l'étudiant, tu peux alors la nommer par : name="nomEtudiant" et ainsi de suite. C'est comme si tu devais adopter une méthode normalisée de nommage des entités, champs, variables, noms de fonctions et procédures, noms de fichiers et dossiers, ...

En effet, ce système de nommage en programmation ne rentre pas en conflit avec celui de la base de données dans les requêtes SQL. Par exemple pour une requête d'insertion on doit simplement distinguer et respecter les noms d'origine de la base de données représentant la structure de la table et ceux correspondants aux variables PHP contenant les valeurs insérées. Comme :
// récupérer les valeurs des champs du formulaire envoyé
$nomEtudiant = isset($_GET['nomEtudiant'])?$_GET['nomEtudiant']:null;
$prenomEtudiant = isset($_GET['prenomEtudiant'])?$_GET['prenomEtudiant']:null;
$adresseEtudiant = isset($_GET['adresseEtudiant'])?$_GET['adresseEtudiant']:null;

// requête d'insertion
$sql = "INSERT INTO Etudiant (nom, prenom, adresse) VALUES ('".$nomEtudiant."','".$prenomEtudiant."','".$adresseEtudiant."' )";
Dans la base de données, on a nommé les champs normalement : nom, prenom et adresse car ils sont encapsulés dans le contexte de leur table "Etudiant" pour les différencier d'autres homonymes de la base de données on utilise le nommage hiérarchique : Parent.enfant. Donc le nom de l'étudiant sera noté dans une requête hétérogènes (à plusieurs tables) comme ça : Etudiant.nom.
et pour mes autres post ?lol!

sinon pour les variable j'en n'est renommé, mais moi j'ai mis "nom_entr", "adresse_entr" pour toute les variable de l'entreprise,
par contre j'ai un petit souci : mes liste ne marche plus, (je crois qu'elle ne marchait dèja plus avant que je change les variable) peut être que sa vient des fonction que j'ai mis dans plusieurs fichiers, la liste des étudiants ne marche plus dans mes fichiers de modification ou suppression d'étudiant (même en rajoutant le champs d'année d'étude ou en mettant une autre fonction qui fait la liste sans contrainte, sa fait comme je t'es dis précédemment pour formAssiduite.php et consultation_assiduite.php!!j'aimerais bien savoir d'où viens cette erreur?
Tu veux mourir? OK!! Mais pas dans ma voiture, alors attache ta ceinture !! :pouce:
Tony :boire9:

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

25 mai 2011, 19:35

Non, c'est pas bon cette façon de faire. tu fais encore beaucoup d'include(). Il va falloir suivre la méthode que je vais expliquer si tu veux avancer. Voila:
Prenons par exemple la consultation de l'assiduité :
1. Il faut d'abord poser une fois pour toute la maquette de l'interface utilisateur (formulaire) et surtout les critères que l'utilisateur doit fournir (listes et zones de saisie) et l'enchainement entre eux et le programme pour aboutir au résultat à afficher. ça c'est le cas du formulaire et des résultats HTML affichés.
Dans ton cas, j'ai l'impression que ce n'est pas encore claire : faut'il une liste niveau et/ou année et/ou mois et/ou date, une liste d'étudiant ? comment ces critères seront imbriqués ?? ce n'est pas claire dans tes scripts actuels.

2. c'est bien de faire un include vers un fichier "fonctions" spécifique pour chaque traitement comme "fonctions_consultation.php" qui est lié au fichier "consulter_assiduite.php" qui comprend le formulaire HTML. C'est bien tout ça, mais il ne faut plus séparer les variables dans un fichier séparé, ça vaut pas le coups. Il faut intégrer les variables de travail et celles postées par le formulaire "consulter_assiduite.php" dans le fichier "fonctions_consultation.php" pour la simple raison que ces variables sont vraiment spécifiques au formulaire et aux traitements php/mysql sous-djscents.
Evite donc de centraliser toutes les variables de tous les différents programmes dans un seul fichier "variables.php" et évite de séparer des variables spécifiques du fichier où le traitement php existe. Car cela multiplie les includes et t’oblige à respecter un certain ORDRE entre les différents includes. Ordre important car si non respecté risque de fausser les traitements, et surtout cause aussi des risques de re-déclaration de variables dans différents fichiers. Les erreurs causées par les problèmes d'includes multiples ou imbriqués sont très difficiles à détecter.

Heureusement, tu as séparé les traitements php/mysql spécifiques au lieu de les centraliser. Tu dois donc te concentrer sur le fonctionnement des requêtes qui remplissent les listes et mettent à jour la base avec plus de maitrise. Mais encore une fois, la question du remplissage des liste dépend fortement du fonctionnement logique du formulaire (voir ce que j'ai dit au point n°1)

Si tu suis d'abord à cette organisation tu auras des premiers résultats satisfaisants. Car ton programme n'est pas compliqué.

Conclusion:
Voici l'enchainement classique des états d'un formulaire dans le cas de champs de critères imbriqués sous forme de listes :
Cycle 1: Formulaire : champs de critères (changement de valeur) -----> Programme PHP : logique d'enchainement des champs critères (remplissage de certains champs) -----> Formulaire ré-affiché : champs critères mis à jour -----> répéter le cycle 1 s'il le faut

Cycle 2: Formulaire : tous les champs nécessaires sont remplis + validation (submit avec une action précise nommée comme "action=Enregistrer") ----> Programme PHP : logique de traitement des actions envoyées par le formulaire (détection de l'action et des champs nécessaires transmis) ---> Formulaire ou Autre affichage HTML : résultat attendu du traitement invoqué par l'action préliminaire ou un retour d'erreurs signalées par le traitement. (Fin du cycle)

Voilà.
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Eléphant du PHP | 150 Messages

26 mai 2011, 14:25

je sais exactement ce que je veux lol.

Sur "attestation.php" je veux que l'on choisisse l'année d'études en premier, et après année + mois et ensuite liste d'étudiant par rapport aux 3 autres champs.


Dans "consultation_assiduite.php" je laisse comme c'est actuellement : année d'étude puis liste d'étudiants.


Dans "formAssiduite.php" il y a deux partie :

- la première où l'on choisis l'année d'études puis la classe qui correspond à l'année d'étude et on fait la liste étudiant de la classe sélectionné.
- la deuxième où l'on choisis l'année d'étude puis l'étudiant et on fait la "liste" de l'étudiant sélectionné (comme ça si un élève vient travailler un jour où il n'a pas cours normalement on peut le mettre présent.

Donc tout est clair dans ma tête! lol

Par contre je ne comprend toujours pas pourquoi la listes des étudiant par rapport au niveau d'étude ne fonctionne pas dans
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 mai 2011, 22:55

Pour être franc avec toi, moi j'ai corrigé tous les programmes que tu as affiché et ils fonctionnent bien exactement comme tu les veux, mais je ne posterai rien tant que tu ne respectes pas mes consignes pour que tout fonctionne bien. J'ai avancé avec toi en profondeur sur ton sujet pour que tu puisse en toucher toute la difficulté sans te poser de questions au préalable sur la conception logique de tes modules. Maintenant il est venu le temps que tu prennes le recul par rapport à tout ce qu'on a fait et commencer à réorganiser les programmes selon ce que j'ai expliqué dans le message précédent. C'est à dire, éviter de séparer les variables des fonctions php et ordonner les traitements php dans le fichier des fonctions selon un ordre logique correct (variables, traitement des boutons d'action et remplissage de listes)
Ce n'est pas compliqué de faire ça. Par exemple pour le cas de la consultation d’assiduité, tu n'as besoin que de 2 fichiers fondamentaux : le formulaire HTML et le traitement PHP variables comprises.

Autrement dit, on ne doit plus trouver un truc comme ça dans un programme donné :
<?php
include ("menu.php");
include ("variable.php");
include ("fonction.php");
include ("fonction_formassiduite.php");
?>
ça c'est abberant, car trop d'includes sources de confusion et d'erreurs et notamment les chevauchement possible entre variable.php et fonction.php puis encore fonction_formassiduite.php.
Déjà ce n'est du tout lisible et encore moins pratique pour déboguer le programme et encore pire si tu as un ordre logique non respecter entre fonctions et assignation de variables ou déclaration de variables.

Un autre exemple:
<?php
include ("menu.php");
include ("variable.php");
require_once ("fonction_consultation.php");
$mois =  date_format(date_create($date), "m"); // extrait le mois de $date

include ("fonction.php");
?>
Exemple d'erreur flagrante : on voit une assignation de la variable $mois dans le programme local qui vient après include('variable.php') et qui écrase en fait toute déclaration possible d'une variable $mois existant dans le fichier 'variable.php' et ça c'est pas bon d'autant plus que dans ce fichier 'variable.php' il y a toutes les variables même celles non exigées par ce programme qui fait l'include. Cette façon d'écrire est une erreur logique de programmation, il faut donc éliminer l'include('variable.php') et le remplacer par mettre directement des variables utiles avec les traitements PHP. Pour que ça soit lisible et facile à entretenir.

C'est le cas aussi du fichier fonction.php qui vient s'inclure tardivement après require_once ("fonction_consultation.php") : c'est vraiment difficile pour maitriser l'enchainement des fonctions et leurs variables comme ça. Car l'include est utilisé normalement pour faire référence à des modules génériques réutilisables mais dans notre cas, on fait un programme spécifique qui fait soit la consultation, soit l'ajout/modif/suppression d'entités soit l'attestation mais jamais tout en même temps. On peut utiliser un seul fichier 'fonction_consultation.php' et éliminer 'fonction.php'

Le seul include justifié dans les exemples que j'ai tiré est : include ("menu.php"); car c'est un module réutilisables qui ne gène aucun autre traitements des modules.

Voici un exemple de corrigé :
form_consultation_assiduite.php (Formulaire HTML)
<?php
include ("menu.php");
require_once ("fonctions_consultation_assiduite.php"); // 1 seul include vers les traitement PHP (variables+php+requêtes mysql)
?>
.... Contenu HTML du formulaire
fonctions_consultation_assiduite.php
//--- début du programme ---
// variables utiles
$machin = isset($_GET[....
$truc = telle valeur ...
etc ... 

// remplissages des liste selon un ordre logique et/ou selon un déclencheur bien défini
$liste1 = ....
.....

if (isset(telle variable)) {
    $liste2 = ....
    .....
}

// traitement des boutons d'action
if (isset($_GET[tel bouton d'action]) && !empty(telle variable) ......
     ...... code à exécuter
}
if (isset($_GET[tel bouton d'action]) && !empty(telle variable) ......
     ...... code à exécuter
}
.... etc ...

//--- fin du programme ----
Voila c'est dans ce sens là que tu dois écrire tes programmes.

Donc, pour que tes listes et tes requêtes fonctionnement il faut recoudre les programmes correctement avec les bonnes variables dans le bon ordre en évitant les 'includes redondants et en vérifiant les paramètres WHERE des requêtes SQL.
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Eléphant du PHP | 150 Messages

26 mai 2011, 23:54

Ne t'inquiète pas j'ai suivis tes conseils avant que je vois tes exemples j'avais déjà fait comme tu viens de le décrire et j'ai modifier les fichiers en conséquence, cela fait plus propre, c'est plus lisible et en plus cela marche mieux, j'ai aussi trouver comment afficher la liste des étudiant par rapport à l'année d'études pour mes autres fichiers ("formAssiduite.php" et "consultation_assiduite.php" ): il fallait enlever le "if (!empty($annee)){ } " et aussi enelever ça : " AND ". $annee ." BETWEEN SUBSTRING_INDEX(t1.promotion, '-', +1) AND SUBSTRING_INDEX(t1.promotion, '-', -1) ";" de la requête SQL car elle était spécifique pour l'attestation.

donc pour l'instant j'ai fait trois fichiers principaux :

fonction_attestation.php :
<?php
//ATTESTATION

//CONNEXION
mysql_select_db("bd_etudiants", @mysql_connect("localhost","root","")) or die(mysql_error());

//VARIABLES
	$annee = isset($_GET['annee'])? $_GET['annee'] : null;
	$mois = isset($_GET['mois']) ? $_GET['mois'] : null;
	$tab_nomMois_FR = array(1=>'Janvier',2=>'Février',3=>'Mars',4=>'Avril',5=>'Mai',6=>'Juin',7=>'Juillet',8=>'Août',9=>'Septembre',10=>'Octobre',11=>'Novembre',12=>'Décembre');
	$nomMois = isset($tab_nomMois_FR[$mois])?$tab_nomMois_FR[$mois]:null;
	$anneeNiveau = isset($_GET['anneeNiveau'])? $_GET['anneeNiveau'] : null;
	//etudiant
    $idEtudiant = isset($_GET['idEtudiant']) ? $_GET['idEtudiant'] : null;
    $civilite = isset($_GET['civilite']) ? $_GET['civilite'] : null;
	$nom = !empty($_GET['nom'])? $_GET['nom'] : null;
    $prenom = isset($_GET['prenom']) ? $_GET['prenom'] : null;
    $idClasse = isset($_GET['idClasse']) ? $_GET['idClasse'] : null;
   
//LISTES

				// remplissage de la liste des élèves pour l'année sélectionnée
                $listeDesEtudiants = "";
                if (!empty($annee)){
                        $sql = "SELECT * FROM etudiant t1 LEFT JOIN entreprise t2 ON t1.idEntreprise=t2.idEntreprise
                                                WHERE t1.annee='".$anneeNiveau."'
                                                AND ". $annee ." BETWEEN SUBSTRING_INDEX(t1.promotion, '-', +1) AND SUBSTRING_INDEX(t1.promotion, '-', -1) ";
                                                //pour detecter l'année de formation: $annee doit être comprise entre les 2 années du champ promotion
                        //echo $sql;
                        $result = mysql_query($sql) or die(mysql_error());
                        while($result && $row=mysql_fetch_array($result))
                        {
                                $selected = isset($idEtudiant)&&$row['idEtudiant']==$idEtudiant? " selected " : "";
                                $listeDesEtudiants .= "<option value=\"".$row['idEtudiant']."\" ".$selected." >".$row['nom']."</option>";
                        }
                }
				
                // crée la liste des AnneesNiveau
                $listeAnneesNiveau = "";
                $sql = "SELECT DISTINCT annee FROM Etudiant ORDER BY annee;";
                $result = mysql_query($sql) or die(mysql_error());
                while($result && $row=mysql_fetch_array($result))
                {
                                $selected = isset($anneeNiveau)&&$row['annee']==$anneeNiveau? " selected " : "";
                                $listeAnneesNiveau .= "<option value=\"".$row['annee']."\" ".$selected." >".$row['annee']."</option>";
                }
               

                // crée la liste des Annees
                $listeAnnees = "";
                $sql = "SELECT DISTINCT Year(date) as annee FROM assiduite ORDER BY Year(date);";
                $result = mysql_query($sql) or die(mysql_error());
                while($result && $row=mysql_fetch_array($result))
                {
                                $selected = isset($annee)&&$row['annee']==$annee? " selected " : "";
                                $listeAnnees .= "<option value=\"".$row['annee']."\" ".$selected." >".$row['annee']."</option>";
                }
               
                // crée la liste des mois d'une année donnée
                $listeMois = "";
                if (isset($annee)){
                        $sql = "SELECT DISTINCT Month(date) as mois FROM assiduite WHERE Year(date)=".$annee." ORDER BY Month(date);";
                        $result = mysql_query($sql) or die(mysql_error());
                        while($result && $row=mysql_fetch_array($result))
                        {
                                $selected = isset($mois)&&$row['mois']==$mois? " selected " : "";
                                $listeMois .= "<option value=\"".$row['mois']."\" ".$selected." >".$tab_nomMois_FR[$row['mois']]."</option>";
                        }
                }


//-------------------------------------
// TRAITEMENT DES BOUTON D'ACTION
//-------------------------------------
                       


             
                $message1 = "";
                $message4 = "";
                $message5 = "";
                $message6 = "";
                $message7 = "";
               
               
               
                //------------------------------------------
                // attestation (nom etudiant, entreprise, nombre heure par mois, jours d'absences)
                if (isset($_GET['action_attestation']) && !empty($idEtudiant))
                {

                        $sql = "SELECT * FROM etudiant t1 LEFT JOIN entreprise t2 ON t1.idEntreprise=t2.idEntreprise WHERE t1.idEtudiant='". $idEtudiant ."' ";
                        $result = mysql_query($sql) or die(mysql_error());
                        while($result && $row=mysql_fetch_array($result))
                        {
                                 // données élève utiles à l'attestation: etudiant, entreprise et classe
                                                                $idEtudiant = $row['idEtudiant'];
                                                                $nomEtudiant = $row['nom'];
                                                                $prenomEtudiant = $row['prenom'];
                                                                $civiliteEtudiant = $row['civilite'];
                                                                $promotion = $row['promotion'];
                                                                $idClasse = $row['idClasse'];
                        }
                                               
                        //afficher les heures d'absence/présence de l'élève par année et mois donnés
                        $nombreheurepresencemois = 0;
                        $nombreheureabsencemois = 0;
                       
                        if (isset($annee) && isset($mois)){
                                $sql = "SELECT * FROM `nb_heures_presence_mois` WHERE annee = '".$annee."' AND mois = '" . $mois . "'  AND idEtudiant = '". $idEtudiant. "' ";
                                //echo $sql;
                                $result = mysql_query($sql) or die(mysql_error());
                                if ($result)
                                {
                                                $row = mysql_fetch_array($result);
                                                $nombreheurepresencemois = $row['nbre_heures_presence'];
                                }
                                           
                                $sql = "SELECT * FROM `nb_heures_absence_mois` WHERE annee = '".$annee."' AND mois = '" . $mois . "'  AND idEtudiant = '". $idEtudiant. "' ";
                                //echo $sql;
                                $result = mysql_query($sql) or die(mysql_error());
                                if ($result)
                                {
                                                $row = mysql_fetch_array($result);
                                                $nombreheureabsencemois = $row['nbre_heures_absence'];
                                }
                               
                            // Détail des absences par jour    pour l'année et mois donnés  
                                $sql = "SELECT *  FROM  `nbre_heures_absence` WHERE year(date) = '".$annee."' AND month(date) = '" . $mois . "'  AND   idEtudiant = '". $idEtudiant . "'   AND nbre_heures_absence >0 ";  
                        //echo $sql;      
                        $result = mysql_query($sql) or die(mysql_error());
                        while ($result && $row = mysql_fetch_array($result))
                        {
                                   // afficher les heures d'absence de l'élève par jour
                                 $message1 .=  "<li>Le ". date('d', strtotime($row['date'])). " " .$tab_nomMois_FR[intval(date('m', strtotime($row['date'])))] . " " .date('Y', strtotime($row['date'])). "  pendant " . $row['nbre_heures_absence']. " h</li>";
                        }
                        }
                        //afficher l'attestation
                        include("afficher_attestation.php");
                        exit;                  
                }
				
//FIN DE CONNEXION
mysql_close();
                               
?>

attestation.php :

<?php
include ("menu.php");
require_once ("fonction_attestation.php");
?>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Gestion d'assiduité des élèves</title>
       
</head>
<body>
<div class="main2">
<h1>Consultation d'assiduité des élèves</h1>

<div id='feuille_absence'>
<form name="form1">
<table>
<tr>
<th>Année :&nbsp;&nbsp;
<select name="annee" onChange="form1.submit();">
<option value="" ></option>
<?php echo $listeAnnees; ?>
</select>
</th>
<th>Mois :&nbsp;&nbsp;
        <select name="mois" onChange="form1.submit();" >
        <option value="" ></option>
        <?php echo $listeMois; ?>
        </select>
</th>
</tr>
<tr>
<th>Année d'étude :&nbsp;&nbsp;
<select name="anneeNiveau" onChange="form1.submit();">
<option value="" ></option>
<?php echo $listeAnneesNiveau; ?>
</select>
</th>
<th>
</th>
</tr>
<tr>
<th>
Etudiant :&nbsp;&nbsp;      
        <select name="idEtudiant" >
        <option value="" >
        </option>
        <?php echo isset($listeDesEtudiants)?$listeDesEtudiants:null; ?>
        </select>
</th>
<th>
        <br/>
        <input type="submit" name="action_attestation" value="Total absences">
        <br /><br />          
</th>
 </tr>  
</table>
</form>
<div id="messag"><?php echo isset($message2)?$message2:''; ?></div>
<br/><br/>
                       
</div>
     
</div>
</body>
</html>

"fonction-consultation.php" :
<?php
//CONSULTATION D'ASSIDUITE

//CONNEXION
mysql_select_db("bd_etudiants", @mysql_connect("localhost","root","")) or die(mysql_error());

//VARIABLES
	$idEtudiant = !empty($_GET['idEtudiant'])? $_GET['idEtudiant'] : null;
	$anneeNiveau = isset($_GET['anneeNiveau'])? $_GET['anneeNiveau'] : null;
	$nom = !empty($_GET['nom'])? $_GET['nom'] : null;
	$date = isset($_GET['date'])? $_GET['date'] : null;
	$mois =  date_format(date_create($date), "m"); // extrait le mois de $date

//LISTES

	// remplissage de la liste des étudiants pour l'année sélectionnée
                $listeDesEtudiants = "";
                        $sql = "SELECT * FROM etudiant t1 LEFT JOIN entreprise t2 ON t1.idEntreprise=t2.idEntreprise
                                                WHERE t1.annee='".$anneeNiveau."'";
                                                //pour detecter l'année de formation: $annee doit être comprise entre les 2 années du champ promotion
                        //echo $sql;
                        $result = mysql_query($sql) or die(mysql_error());
                        while($result && $row=mysql_fetch_array($result))
                        {
                                $selected = isset($idEtudiant)&&$row['idEtudiant']==$idEtudiant? " selected " : "";
                                $listeDesEtudiants .= "<option value=\"".$row['idEtudiant']."\" ".$selected." >".$row['nom']."</option>";
                        }
				
                // crée la liste des AnneesNiveau
                $listeAnneesNiveau = "";
                $sql = "SELECT DISTINCT annee FROM Etudiant ORDER BY annee;";
                $result = mysql_query($sql) or die(mysql_error());
                while($result && $row=mysql_fetch_array($result))
                {
                                $selected = isset($anneeNiveau)&&$row['annee']==$anneeNiveau? " selected " : "";
                                $listeAnneesNiveau .= "<option value=\"".$row['annee']."\" ".$selected." >".$row['annee']."</option>";
                }

//-------------------------------------
// TRAITEMENT DES BOUTON D'ACTION
//-------------------------------------
                $message = "";
                if (isset($_GET['action_nb_absence_date']) && !empty($idEtudiant) && !empty($date))
                {
                                // CALCUL DU NOMBRE D'ABSENCES D'UN Etudiant POUR UNE DATE
                                $nombreheureabsence = 0;
                                $sql = "SELECT * FROM `nbre_heures_absence` WHERE date = '" . $date . "'  AND idEtudiant = '". $idEtudiant. "' ";
                                $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($idEtudiant) && !empty($date))
                {
                                // CALCUL DU NOMBRE DE PRESENCES D'UN Etudiant POUR UNE DATE
                                $nombreheurepresence = 0;
                                $sql = "SELECT * FROM `nbre_heures_presence` WHERE date = '" . $date . "'  AND idEtudiant = '". $idEtudiant. "' ";
                                $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_nb_absence_mois']) && !empty($idEtudiant) && !empty($date))
                {
                                // CALCUL DU NOMBRE D'ABSENCES D'UN Etudiant POUR UN MOIS
                                $nombreheureabsencemois = 0;
                                $sql = "SELECT * FROM `nb_heures_absence_mois` WHERE mois = '" . $mois . "'  AND idEtudiant = '". $idEtudiant. "' ";
                                $result = mysql_query($sql) or die(mysql_error());
                                if ($result)
                                {
                                                $row = mysql_fetch_array($result);
                                                $nombreheureabsencemois = $row['nbre_heures_absence'];
                                }
                                $message = "    Nombre d'heures d'absence du mois : " . $nombreheureabsencemois . "H";
                }

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

                //------------------------------------------
                if (isset($_GET['action_total_absence']) && !empty($idEtudiant))
                {
                                // CALCUL DU TOTAL D'ABSENCES D'UN Etudiant
                                $totalheureabsence  = 0;
                                $sql = "SELECT * FROM `total_heures_absence` WHERE idEtudiant = '". $idEtudiant. "' ";
                                $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($idEtudiant))
                {
                                // CALCUL DU TOTAL DE PRESENCES D'UN Etudiant
                                $totalheurepresence  = 0;
                                $sql = "SELECT * FROM `total_heures_presence` WHERE idEtudiant = '". $idEtudiant. "' ";
                                $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";
                }
                //----------------------------------------------------

                if (isset($_GET['action_nb_absence_jour']) && !empty($idEtudiant))
                {
                                // requête SQL: Nombre d'heures d'absence par jour pour l'élève $idEtudiant
                                $sql = "SELECT t1.* , t2.*  FROM  `nbre_heures_absence` t1  join `etudiant` t2 ON t1.idEtudiant=t2.idEtudiant
                                                   WHERE  t1.idEtudiant = '". $idEtudiant . "'   AND t1.nbre_heures_absence >0 ";

                                $result = mysql_query($sql) or die(mysql_error());
                                while ($result && $row = mysql_fetch_array($result))
                                {
                                   // afficher les heures d'absence de l'élève par jour
                                 $message .= "<p>L'étudiant(e) " . $row['nom']. " a été absent(e) le : " . date('d M Y', strtotime($row['date'])). "  pendant " . $row['nbre_heures_absence']. " h</p>";
                       
                                }
                }	
"fonction_assiduite.php" :
<?php
//FORMASSIDUITE

//CONNEXION
	mysql_select_db("bd_etudiants", @mysql_connect("localhost","root","")) or die(mysql_error());

//VARIABLES
	
	$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;
	
	$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;
	
	$idEtudiant = !empty($_GET['idEtudiant'])? $_GET['idEtudiant'] : null;
	$anneeNiveau = isset($_GET['anneeNiveau'])? $_GET['anneeNiveau'] : null;
	$nom = !empty($_GET['nom'])? $_GET['nom'] : null;
	$prenom = isset($_GET['prenom']) ? $_GET['prenom'] : null;
    $idClasse = isset($_GET['idClasse']) ? $_GET['idClasse'] : null;
	$date = isset($_GET['date'])? $_GET['date'] : 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;
	
	


//LISTES
	
	// 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 = isset($idClasse)&&$row['idClasse']==$idClasse? " selected " : "";
                                $listeClasses .= "<option value=\"".$row['idClasse']."\" ".$selected." >".$row['idClasse']."</option>";
                }
				
	// 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 étudiants 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>";
                                }
                }			
	
	// remplissage de la liste des étudiants pour l'année sélectionnée
                $listeDesEtudiants = "";
                        $sql = "SELECT * FROM etudiant t1 LEFT JOIN entreprise t2 ON t1.idEntreprise=t2.idEntreprise
                                                WHERE t1.annee='".$anneeNiveau."'";
                        $result = mysql_query($sql) or die(mysql_error());
                        while($result && $row=mysql_fetch_array($result))
                        {
                                $selected = isset($idEtudiant)&&$row['idEtudiant']==$idEtudiant? " selected " : "";
                                $listeDesEtudiants .= "<option value=\"".$row['idEtudiant']."\" ".$selected." >".$row['nom']."</option>";
                        }
				
	// crée la liste des AnneesNiveau
			$listeAnneesNiveau = "";
			$sql = "SELECT DISTINCT annee FROM Etudiant ORDER BY annee;";
			$result = mysql_query($sql) or die(mysql_error());
			while($result && $row=mysql_fetch_array($result))
			{
							$selected = isset($anneeNiveau)&&$row['annee']==$anneeNiveau? " selected " : "";
							$listeAnneesNiveau .= "<option value=\"".$row['annee']."\" ".$selected." >".$row['annee']."</option>";
			}

//-------------------------------------
// TRAITEMENT DES BOUTON D'ACTION
//-------------------------------------
    
                // 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($idEtudiant)) $message .= "<p>La sélection d'un étudiant est obligatoire !</p>";
                                if (empty($idClasse)) $message .= "<p>La classe est obligatoire !</p>";
                               // if (empty($annee)) $message .= "<p>L'Année 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 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 = isset($nomProf_mat_t1)&&$row['nom']==$nomProf_mat_t1? " selected " : "";
                                $listeProfs_mat_t1 .= "<option value=\"".$row['nom']."\" ".$selected." >".$row['nom']."</option>";    
                                //
                                $selected = isset($nomProf_mat_t2)&&$row['nom']==$nomProf_mat_t2? " selected " : "";
                                $listeProfs_mat_t2 .= "<option value=\"".$row['nom']."\" ".$selected." >".$row['nom']."</option>";
                                //
                                $selected = isset($nomProf_amidi_t1)&&$row['nom']==$nomProf_amidi_t1? " selected " : "";
                                $listeProfs_amidi_t1 .= "<option value=\"".$row['nom']."\" ".$selected." >".$row['nom']."</option>";
                                //
                                $selected = isset($nomProf_amidi_t2)&&$row['nom']==$nomProf_amidi_t2? " selected " : "";
                                $listeProfs_amidi_t2 .= "<option value=\"".$row['nom']."\" ".$selected." >".$row['nom']."</option>";
                }
               
                //liste des matiere
                $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 = isset($nomMatiere_mat_t1)&&$row['nom']==$nomMatiere_mat_t1? " selected " : "";
                                $listeMatieres_mat_t1 .= "<option value=\"".$row['nom']."\" ".$selected." >".$row['nom']."</option>";  
                                //
                                $selected = isset($nomMatiere_mat_t2)&&$row['nom']==$nomMatiere_mat_t2? " selected " : "";
                                $listeMatieres_mat_t2 .= "<option value=\"".$row['nom']."\" ".$selected." >".$row['nom']."</option>";
                                //
                                $selected = isset($nomMatiere_amidi_t1)&&$row['nom']==$nomMatiere_amidi_t1? " selected " : "";
                                $listeMatieres_amidi_t1 .= "<option value=\"".$row['nom']."\" ".$selected." >".$row['nom']."</option>";
                                //
                                $selected = isset($nomMatiere_amidi_t2)&&$row['nom']==$nomMatiere_amidi_t2? " selected " : "";
                                $listeMatieres_amidi_t2 .= "<option value=\"".$row['nom']."\" ".$selected." >".$row['nom']."</option>";
                }	

				
//FIN DE CONNEXION
mysql_close();
                               
?>
donc voila c'est bon comme ça je pense!!!?!! sinon quelle est la différence entre "include" et "require_once"

encore merci pour tes conseils, il faut juste que je trouve comment faire pour faire la liste d'un étudiant sélectionné.

et j'ai un autre problème : ma date dans "formAssiduite.php" ne se met plus dans ma base de donnée (elle met 0000-00-00 dans la table assiduite), est ce que cela peut venir du format d'affichage que j'ai changé dans le calendrier?(j'ai mis la date en libellé pour que cela soit plus lisible et donc peut être que la base de donnée ne sais pas la lire, donc est ce possible de laisser cette date en libellé ou dois-je remettre le bon format (et donc avoir un format pas très lisible sur le site)

edit : cela viens bien de ça (j'arrivais plus à trouver le code html pour remettre le format que tu m'avais mis ( this,{'format' : '%a-%m-%j'} ) ) Est ce que je peux modifier ce format pour avoir une date qui soit au moins dans le bon ordre (à la française) ?
Ps : la date en libellé est juste une option du calendrier :
commande précédent :
Date : </th><td><input type="text" id="dateLib" name="date" value="<?php echo $date; ?>" style="width:180px"
						onfocus="visuCal(this,paramLib)" onBlur="masqueCal(this);"  />
et la on voit l'option du calendrier : (ligne 152 de "calendrier.js") :
  paramLib={"titre": "date par libellé","format" : "%d %k %p %a"}
[/color]
Modifié en dernier par cobra2930 le 27 mai 2011, 09:46, modifié 1 fois.
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 mai 2011, 09:43

Bravo =D>

Je verrai tout à leur la question de la date.
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Eléphant du PHP | 150 Messages

27 mai 2011, 11:18

Bravo =D>

Je verrai tout à leur la question de la date.
Merci, il me reste a faire sa pour les etudiants, entreprise,etc

j'ai un autre petit problème : quand je fais un enregistrement d'absence/présence, la ligne : "<h2>Feuille de présence existante du <?php echo $date; ?></h2>" ne se met pas tout de suite en rechargeant la page, il se met que si je reclique sur "valider la date", de plus quand je change de classe elle ne se charge pas automatiquement mais que en cliquant sur "valider date" également, Peut on régler ce problème?
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 mai 2011, 12:28

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
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Eléphant du PHP | 150 Messages

30 mai 2011, 09:20

merci pour cette date complète!!Par contre pourquoi as tu modifié tout l'html?
maintenant on ne peut pas choisir l'année d'étude avant la classe, et il n'y a plus le deuxième choix avec les absences par élève (que je n'est toujours pas réussi a faire au passage) Sinon est-ce possible d'enlever la virgule entre le jour et la date?

sinon il manque un truc dans mon attestation et c'est assez urgent mais je n'arrive pas à le faire : il faudrait que l'entreprise ( relié a l'étudiant )avec son tuteur(civilite,nom,prenom) et son adresse se mette en haut à droite de l'attestation et aussi est ce que c'est possible de prendre l'adresse de l'étudiant si il n'a pas d'entreprise?

Rappel : entreprise ( idEntreprise, nom_entr, adresse,adresse2, code_postal, ville, tel , mail, civilite_tuteur, nom_tuteur, prenom_tuteur )


Merci d'avance si t'y arrive!!

sinon 3 autres petits truc mais pas urgent :
- il faudrait qu'en créant cette attestation cela me génère une autre page (sorte de courrier d'accompagnement) ou je mettrais d'autre champs) c'est possible?
- et aussi est ce possible de créer une attestation où l'on choisirait un étudiant et cela récapitulera toutes ces heures d'absences et présent pour tout les mois que l'on à rentré dans la base?
(exemple :
l'élève "bidule" :
septembre 2010 : 74h présences / 20h absences
octobre 2010 : 62h présence / 2h absences
...
mai 2011 : 98h présences/ 0h d'absence )
- mon logo que j'ai rajouté dans mon attestation ne s'affiche pas quand j'imprime (il écrit le nom de l'image a la place).

PS : j'aimerais savoir comment sont établi les <form> car dans certains fichiers il y a :
<form name="form1" action="" method="get">
dans d'autres il y a
<form name="form1">
certain on "form1" ou d'autres "form2", mais je ne les retrouve pas dans les fonctions, donc si tu pouvais m'expliquer comment les utiliser stp, d'ailleurs pour "formAssiduite.php" j'en avais mis deux mais ma liste d'étudiant par rapport a l'année ne marchait pas j'en est donc mis qu'un seul mais vu que j'ai le champ "année niveau" deux fois dans la page il se remplis deux fois donc c'est un peu gênant. Merci de m'éclairer sur ce point.

PS: ce que j'ai écrit en rouge est plus important.
Tu veux mourir? OK!! Mais pas dans ma voiture, alors attache ta ceinture !! :pouce:
Tony :boire9:

Eléphant du PHP | 150 Messages

31 mai 2011, 08:34

Est ce que quelqu'un peut m'aider??

j'ai vraiment besoin d'aide!!pour l'instant j'essaie de contourner le problème en sélectionnant l'entreprise en même temps que l'élève mais ça ne fonctionne pas non plus et ce n'est pas a l'utilisateur de savoir quelle entreprise va avec quel étudiant!

pour l'instant j'ai fais ça :
$sql = "SELECT idEtudiant, nom_entr, adresse_entr, adresse2_entr, code_postal_entr, ville_entr, civilite_tuteur, nom_tuteur, prenom_tuteur FROM Etudiant E, Entreprise T WHERE E.IdEtudiant=T.IdEntreprise AND idEtudiant='".$idEtudiant."'"; 
							$result = mysql_query($sql) or die(mysql_error());
							while($result && $row=mysql_fetch_array($result))
							{
																	//$idEntreprise =$row['idEntreprise'];
																	$nom_entr =$row['nom_entr'];
																	$adresse_entr =$row['adresse_entr'];
																	$adresse2_entr =$row['adresse2_entr'];
																	$code_postal_entr =$row['code_postal_entr'];
																	$ville_entr =$row['ville_entr'];
																	$civilite_tuteur =$row['civilite_tuteur'];
																	$nom_tuteur =$row['nom_tuteur'];
																	$prenom_tuteur =$row['prenom_tuteur'];
							}
						
mais le problème est que cela m'affiche l'entreprise qui a l'id égale a l'idEtudiant et pas celle qui correspond : si je prend l'étudiant qui à l'iD n°5 il me sort l'entreprise N°5 ... je suis vraiment pommé...
Tu veux mourir? OK!! Mais pas dans ma voiture, alors attache ta ceinture !! :pouce:
Tony :boire9:

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

31 mai 2011, 14:08

T'as une erreur dans ton SQL : la relation entre Entreprise et Etudiant se trouve dans la table Etudiant via le champ "idEntreprise" et toi dans ta requête tu mets : E.IdEtudiant=T.IdEntreprise or c'est faux.

Voici la relation correcte:
$sql = "SELECT idEtudiant, nom_entr, adresse_entr, adresse2_entr, code_postal_entr, ville_entr, civilite_tuteur, nom_tuteur, prenom_tuteur FROM Etudiant E, Entreprise T WHERE E.IdEntreprise =T.IdEntreprise AND idEtudiant='".$idEtudiant."'"; 
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Eléphant du PHP | 150 Messages

31 mai 2011, 14:22

T'as une erreur dans ton SQL : la relation entre Entreprise et Etudiant se trouve dans la table Etudiant via le champ "idEntreprise" et toi dans ta requête tu mets : E.IdEtudiant=T.IdEntreprise or c'est faux.

Voici la relation correcte:
$sql = "SELECT idEtudiant, nom_entr, adresse_entr, adresse2_entr, code_postal_entr, ville_entr, civilite_tuteur, nom_tuteur, prenom_tuteur FROM Etudiant E, Entreprise T WHERE E.IdEntreprise =T.IdEntreprise AND idEtudiant='".$idEtudiant."'"; 
Merci tu viens de me sauver la vie!!lol!sinon pourquoi quand je veux imprimer mon logo s'enlève?et il me marque l'id de l'image au lieu de l'image elle même.
Est possible d'ajouter un saut de page pour faire une attestation en deux partie?pour l'instant j'ai créé deux page différente ou il faut remplir les mêmes champs et donc c'est très lourd car il faut le faire deux fois par personne.

Sinon je te l'avais déjà demander mais tu ne m'as pas répondu : est ce possible de créer un récapitulatif pour un élève : absence de telle date a telle date avec les nombre d'heures d'absences pour chaque mois?
- il faudrait qu'en créant cette attestation cela me génère une autre page (sorte de courrier d'accompagnement) ou je mettrais d'autre champs) c'est possible?
- et aussi est ce possible de créer une attestation où l'on choisirait un étudiant et cela récapitulera toutes ces heures d'absences et présent pour tout les mois que l'on à rentré dans la base?
(exemple :
l'élève "bidule" :
septembre 2010 : 74h présences / 20h absences
octobre 2010 : 62h présence / 2h absences
...
mai 2011 : 98h présences/ 0h d'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

31 mai 2011, 21:44

- il faudrait qu'en créant cette attestation cela me génère une autre page (sorte de courrier d'accompagnement) ou je mettrais d'autre champs) c'est possible?
- et aussi est ce possible de créer une attestation où l'on choisirait un étudiant et cela récapitulera toutes ces heures d'absences et présent pour tout les mois que l'on à rentré dans la base?
(exemple :
l'élève "bidule" :
septembre 2010 : 74h présences / 20h absences
octobre 2010 : 62h présence / 2h absences
...
mai 2011 : 98h présences/ 0h d'absence )
Pour ça, il faudrait utiliser la vue `nbre_heures_absence` qu'on a créé dans la base de données et qui calcule le nombre d'absences par jour et par étudiant. Elle contient les champs : date, idEtudiant et nbre_heures_absence. Un select sur cette table suffira pour récupérer le détail des absences d'un étudiant pour une période de dates (même Année et mois que la date sélectionnée).

Bon, je ne me souviens plus si tu choisis dans le formulaire une date précise ou simplement une année et un mois.

Donc SI tu choisis dans le formulaire attestation une date précise, voici la requête :
$sql = "SELECT * FROM `nbre_heures_absence` WHERE date = '" . $date . "'  AND idEtudiant = '". $idEtudiant. "' ";
Par contre, SI tu choisis dans le formulaire attestation une année ($annee) et un n°de mois ($mois), voici la requête :
$sql = "SELECT * FROM `nbre_heures_absence` WHERE YEAR(date) = '" . $annee . "'  AND MONTH(date) = '" . $mois. "'  AND  idEtudiant = '". $idEtudiant. "' ";
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
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

31 mai 2011, 21:55

Est-ce possible d'ajouter un saut de page pour faire une attestation en deux partie?pour l'instant j'ai créé deux page différente ou il faut remplir les mêmes champs et donc c'est très lourd car il faut le faire deux fois par personne.
Je ne sais pas pas si t'as remarqué, le programme d'impression de l'attestation écrit en JavaScript imprime le contenu de l'attestation qui se trouve dans un <div id="attestation">....</div> donc pour diviser l'impression en 2 pages il suffit de diviser le contenu de l'attestation HTML en 2 <div> nommés chacun avec un ID différent. Puis de programmer l'impression pour imprimer les contenus des 2 div l'un après l'autre.
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Eléphant du PHP | 150 Messages

31 mai 2011, 22:08

Est-ce possible d'ajouter un saut de page pour faire une attestation en deux partie?pour l'instant j'ai créé deux page différente ou il faut remplir les mêmes champs et donc c'est très lourd car il faut le faire deux fois par personne.
Je ne sais pas pas si t'as remarqué, le programme d'impression de l'attestation écrit en JavaScript imprime le contenu de l'attestation qui se trouve dans un <div id="attestation">....</div> donc pour diviser l'impression en 2 pages il suffit de diviser le contenu de l'attestation HTML en 2 <div> nommés chacun avec un ID différent. Puis de programmer l'impression pour imprimer les contenus des 2 div l'un après l'autre.
si j'ai remarqué, mais si je change le script cela va le changer pour toutes les pages vu qu'il se trouve dans "menu.php" et est ce qu'il faut que je change le bouton?
<input type="button" value="Imprimer" onClick="imprime_zone('attestation2');">
comment je fais pour délimiter la zone d'impression sur les deux div? je met comme ça : <input type="button" value="Imprimer" onClick="imprime_zone('attestation,attestation2');">[/php]

sinon pour l'image cela vient de quoi?du script javascript qui n'est pas prévu pour imprimer des images?
Tu veux mourir? OK!! Mais pas dans ma voiture, alors attache ta ceinture !! :pouce:
Tony :boire9: