gestion absences/presences en php

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

01 juin 2011, 23:53

J'ai trouvé le problème et je t'explique: c'est la méthode utilisé par la fonction javascript (affectation de l'innerHTML) pour copier le code HTML de la zone d'impression dans le nouveau pop-up qui est obsolète car elle ne crée pas effectivement le nouveau document à imprimer par le pop-up mais fait un transfert dans la mémoire du contenu texte et donc l'image ne se charge pas car il n'y a aucun document (body) de créé (about:blank). La solution est d'écrire le contenu HTML du document à imprimer dans la fenêtre pop-up avec la fonction WRITE avant de lancer l'impression, comme ça, le document sera créé et le contenu HTML évalué dont les images IMG qui auront le temps de se charger. Voici la correction de la fonction JavaScript d'impression:
function imprime_zone(obj)
{
// Ouvre une nouvelle fenêtre
var f = window.open("", "", "height=50, width=400,toolbar=0, menubar=0, scrollbars=0, resizable=0,status=0, location=0, left=0, top=0");

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

// Attribut un titre
f.document.title = "Impression: " + document.title;

//Copier/Coller le contenu à imprimer
f.document.write(document.getElementById(obj).innerHTML);

// Imprime et ferme la fenêtre
f.window.print();
f.window.close();
return true;
}
</script>
Voilà.
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Eléphant du PHP | 150 Messages

02 juin 2011, 00:53

Merci franchement tu gère trop!!il me reste le problème des div juste pour l'affichage de l'attestation (toute les autres pages s'affiche normalement), et aussi le fait de rajouter le motif (comme je t'est expliqué dans les messages précédents) et le dernier truc c'est de rajouter une page qui fait comme le formAssiduite mais par etudiant et non par classe.

pour l'instant j'ai créé l'html pour "formAssiduite2.php" mais il faut que je refasse toutes les fonction?ou est ce que je peux le faire plus simplement en modifiant juste quelque champs?

formAssiduite2.php :
<?php
include ("menu.php"); 
require_once("fonction_formassiduite.php");
?>


<head>
<title>Gestion d'assiduité par Etudiant</title>
</head>

			<u><h1>Gestion d'assiduité par Etudiant</h1></u>
			<br/><br/>
	
	<b><FONT color="red" size="4"><u>Par Etudiant</u> :</font></b><br/><br/>
				<table>
				<tr>
				<th>
				Année d'étude :&nbsp;&nbsp;</th><td>
					<select name="anneeNiveau" onChange="form1.submit();">
					<option value="" ></option>
					<?php echo $listeAnneesNiveau; ?>
					</select>
				</td>
				
				<th>Etudiant :</th><td> <select name="idEtudiant" >
							<option value="" >
							</option>
							<?php echo isset($listeDesEtudiants)?$listeDesEtudiants:null; ?>
							</select></td>

				<th>&nbsp;&nbsp;&nbsp;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"); ?>" />

								&nbsp;&nbsp;&nbsp;<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($dateComplete)?$dateComplete: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 modifier cette feuille puis appuyer sur le bouton Enregistrer pour mettre à jour la base de données.</p>
				<?php } ?>
				<table border="1">
				<tr>
					<th width="82">Nom - Prenom</th>
					<th width="66">8h00 - 10h00</th>
					<th width="73">10h00 - 12h00</th>
					<th width="73">13h30 - 15h30</th>
					<th width="73">15h30 - 17h30</th>
					<th width="73">Motif</th>
					<th width="94">Total heures d'absences</th>
				</tr>
				<?php echo $listeAssiduiteEtudiants; ?>
				<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" />
			<span class="marge"></span>
			<input type="submit" name="action" value="Exporter" />
			<input type="button" value="Imprimer" onClick="imprime_zone('feuille_absence');">
			</form>
			<div id="message"><?php echo isset($message)?$message:''; ?></div>

		</div>
			<?php
					// Exportation de la feuille vers un fichier excel
					if (isset($_GET['action']) && $_GET['action']=='Exporter')
					{
							include("formAssiduite_Export.php");
					}
			?>
			
	</div>

	
</body>

</html>
PS: est ce qu'il faut que je mette des "include" ou des "require_once" pour ajouter mes fonction dans les page php?
et merci de m'avoir éclairer sur les "form"
Tu veux mourir? OK!! Mais pas dans ma voiture, alors attache ta ceinture !! :pouce:
Tony :boire9:

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

02 juin 2011, 19:48

Vaut mieux créer 2 fichiers spécifiques pour gérer le form assiduité par étudiant, donc : formAssiduite2.php et fonction_formassiduite2.php c'est certes la copie des programmes existants avec quelques modifications Mais au moins comme ça on ne faussera pas les programmes existants.

Pour la question : "est ce qu'il faut que je mette des "include" ou des "require_once" pour ajouter mes fonction dans les page php?" la seule différence entre include et require_once est que cette dernière effectue un include du fichier une seule fois et évite donc de ré-inclure le même fichier plusieurs fois si d'autres includes sont rencontrés dans la séquence d'exécution. Ce qui évite de déclarer certaines variables et fonctions plus d'une fois.
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Eléphant du PHP | 150 Messages

02 juin 2011, 23:17

d'accord je vais faire ça, et pour mon "formAssiduite2.php" il faut juste que j'enlève la classe dans les fonction et sa va fonctionner ou c'est plus compliqué?

et sinon est ce que tu sais comment faire pour rajouter les motifs d'absences?
Tu veux mourir? OK!! Mais pas dans ma voiture, alors attache ta ceinture !! :pouce:
Tony :boire9:

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

03 juin 2011, 21:25

Si tu n'as plus de liste de classe tu vas mettre à la place une liste d'étudiants où on va choisir un étudiant. On doit donc remplacer dans le code PHP et MySQL tous ce qui était relatif à la classe par une relativité à l'étudiant et notamment à l'idEtudiant.

Voici une correction dans ce sens :
<?php 
// init
$date = isset($_GET['date'])? $_GET['date'] : null;
$idEtudiant = isset($_GET['idEtudiant'])? $_GET['idEtudiant'] : 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'] : null;

// 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($idEtudiant)) $message .= "<p>L'étudiant 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 idEtudiant = '".$idEtudiant."';";
		$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;
			$motif = isset($listeAbsences["$idEtudiant"]['motif'])?$listeAbsences["$idEtudiant"]['motif']:null;
			//
			// 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."',
									
									motif = '".addslashes($motif)."',
									
									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."',
									
									motif = '".addslashes($motif)."',
									
									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 Etudiants
$listeEtudiants = "";
$sql = "SELECT * FROM Etudiant ORDER BY idClasse, nom, prenom;";
$result = mysql_query($sql) or die(mysql_error());
while($result && $row=mysql_fetch_array($result))
{
	$selected = $row['idEtudiant']==$idEtudiant? " selected " : "";
	$listeEtudiants .= "<option value=\"".$row['idEtudiant']."\" ".$selected." >".$row['nom']." ".$row['prenom']." (".$row['idClasse'].")</option>";
}

// crée la listeAssiduiteEtudiants
$listeAssiduiteEtudiants = "";
if (isset($idEtudiant) && !empty($idEtudiant) && isset($date) && !empty($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.idEtudiant = '".$idEtudiant."'
	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;
		// 
		$motif = $row['motif'];
		$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><input type=\"text\" name=\"absences[".$row['idEtudiant']."][motif]\" value=\"".($motif)."\" /></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>Etudiant :</th><td><select name="idEtudiant" onchange="form1.submit();" value="<?php echo $idEtudiant; ?>" >
<option value="" ></option>
<?php echo $listeEtudiants; ?>
</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>Motif</th><th>Total heures d'absences</th></tr>
<?php echo $listeAssiduiteEtudiants; ?>
<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");
	}
?>
J'y ai intégré l'ajout du motif.
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Eléphant du PHP | 150 Messages

03 juin 2011, 22:09

Si tu n'as plus de liste de classe tu vas mettre à la place une liste d'étudiants où on va choisir un étudiant. On doit donc remplacer dans le code PHP et MySQL tous ce qui était relatif à la classe par une relativité à l'étudiant et notamment à l'idEtudiant.

Voici une correction dans ce sens :
<?php 
// init
$date = isset($_GET['date'])? $_GET['date'] : null;
$idEtudiant = isset($_GET['idEtudiant'])? $_GET['idEtudiant'] : 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'] : null;

// 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($idEtudiant)) $message .= "<p>L'étudiant 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 idEtudiant = '".$idEtudiant."';";
		$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 Etudiants
$listeEtudiants = "";
$sql = "SELECT * FROM Etudiant ORDER BY idClasse, nom, prenom;";
$result = mysql_query($sql) or die(mysql_error());
while($result && $row=mysql_fetch_array($result))
{
	$selected = $row['idEtudiant']==$idEtudiant? " selected " : "";
	$listeEtudiants .= "<option value=\"".$row['idEtudiant']."\" ".$selected." >".$row['nom']." ".$row['prenom']." (".$row['idClasse'].")</option>";
}

// crée la listeAssiduiteEtudiants
$listeAssiduiteEtudiants = "";
if (isset($idEtudiant) && !empty($idEtudiant) && isset($date) && !empty($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.idEtudiant = '".$idEtudiant."'
	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>Etudiant :</th><td><select name="idEtudiant" onchange="form1.submit();" value="<?php echo $idEtudiant; ?>" >
<option value="" ></option>
<?php echo $listeEtudiants; ?>
</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 $listeAssiduiteEtudiants; ?>
<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");
	}
?>
c'est ce que j'avais fait mais comme je veux que l'on choississe l'année d'études avant l'étudiant sa a dû faire conflit :

fonction_formAssiduite2.php
<?php
//FORMASSIDUITE

//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;
	$dateComplete = isset($_GET['dateComplete'])? $_GET['dateComplete'] : 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;
	
	$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;
	
	$prenom = isset($_GET['prenom']) ? $_GET['prenom'] : null;
    $idClasse = isset($_GET['idClasse']) ? $_GET['idClasse'] : 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;
	
	



//-------------------------------------
// 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($message))
                                {
                                        $listeAbsences = isset($_GET['absences'])?$_GET['absences']:array();
                                        //echo "<pre>"; print_r($listeAbsences); echo "</pre>";
                                        $sql = "SELECT * FROM etudiant WHERE idEtudiant = '".$idEtudiant."';";
                                        $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_prof;";
                $result = mysql_query($sql) or die(mysql_error());
                while($result && $row=mysql_fetch_array($result))
                {
                                $selected = isset($nomProf_mat_t1)&&$row['nom_prof']==$nomProf_mat_t1? " selected " : "";
                                $listeProfs_mat_t1 .= "<option value=\"".$row['nom_prof']."\" ".$selected." >".$row['nom_prof']."</option>";    
                                //
                                $selected = isset($nomProf_mat_t2)&&$row['nom_prof']==$nomProf_mat_t2? " selected " : "";
                                $listeProfs_mat_t2 .= "<option value=\"".$row['nom_prof']."\" ".$selected." >".$row['nom_prof']."</option>";
                                //
                                $selected = isset($nomProf_amidi_t1)&&$row['nom_prof']==$nomProf_amidi_t1? " selected " : "";
                                $listeProfs_amidi_t1 .= "<option value=\"".$row['nom_prof']."\" ".$selected." >".$row['nom_prof']."</option>";
                                //
                                $selected = isset($nomProf_amidi_t2)&&$row['nom_prof']==$nomProf_amidi_t2? " selected " : "";
                                $listeProfs_amidi_t2 .= "<option value=\"".$row['nom_prof']."\" ".$selected." >".$row['nom_prof']."</option>";
                }
               
                //liste des matiere
                $listeMatieres_mat_t1 = "";
                $listeMatieres_mat_t2 = "";
                $listeMatieres_amidi_t1 = "";
                $listeMatieres_amidi_t2 = "";
                $sql = "SELECT * FROM matiere ORDER BY nom_matiere;";
                $result = mysql_query($sql) or die(mysql_error());
                while($result && $row=mysql_fetch_array($result))
                {
                                $selected = isset($nomMatiere_mat_t1)&&$row['nom_matiere']==$nomMatiere_mat_t1? " selected " : "";
                                $listeMatieres_mat_t1 .= "<option value=\"".$row['nom_matiere']."\" ".$selected." >".$row['nom_matiere']."</option>";  
                                //
                                $selected = isset($nomMatiere_mat_t2)&&$row['nom_matiere']==$nomMatiere_mat_t2? " selected " : "";
                                $listeMatieres_mat_t2 .= "<option value=\"".$row['nom_matiere']."\" ".$selected." >".$row['nom_matiere']."</option>";
                                //
                                $selected = isset($nomMatiere_amidi_t1)&&$row['nom_matiere']==$nomMatiere_amidi_t1? " selected " : "";
                                $listeMatieres_amidi_t1 .= "<option value=\"".$row['nom_matiere']."\" ".$selected." >".$row['nom_matiere']."</option>";
                                //
                                $selected = isset($nomMatiere_amidi_t2)&&$row['nom_matiere']==$nomMatiere_amidi_t2? " selected " : "";
                                $listeMatieres_amidi_t2 .= "<option value=\"".$row['nom_matiere']."\" ".$selected." >".$row['nom_matiere']."</option>";
                }	

//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."'";
                        $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>";
			}
			
				
	// LISTE DES ÉLÈVES DE LA CLASSE SÉLECTIONNÉE
                $listeAssiduiteEtudiants = "";
                if (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.idEtudiant = '".$idEtudiant."'
								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>";
                                }
                }			

			
			
//FIN DE CONNEXION
mysql_close();
                               
?>
et formAssiduite2.php :
<?php
include ("menu.php"); 
require_once("fonction_formassiduite.php");
?>


<head>
<title>Gestion d'assiduité par Etudiant</title>
</head>

			<u><h1>Gestion d'assiduité par Etudiant</h1></u>
			<br/><br/>
	
	<b><FONT color="red" size="4"><u>Par Etudiant</u> :</font></b><br/><br/>
				<form name="form1" action="" method="get">
				<table>
				<tr>
				<th>
				Année d'étude :&nbsp;&nbsp;</th><td>
					<select name="anneeNiveau" onChange="form1.submit();">
					<option value="" ></option>
					<?php echo $listeAnneesNiveau; ?>
					</select>
				</td>
				
				<th>Etudiant :</th><td> <select name="idEtudiant" >
							<option value="" >
							</option>
							<?php echo isset($listeDesEtudiants)?$listeDesEtudiants:null; ?>
							</select></td>

				<th>&nbsp;&nbsp;&nbsp;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"); ?>" />

								&nbsp;&nbsp;&nbsp;<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($dateComplete)?$dateComplete: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 modifier cette feuille puis appuyer sur le bouton Enregistrer pour mettre à jour la base de données.</p>
				<?php } ?>
				<table border="1">
				<tr>
					<th width="82">Nom - Prenom</th>
					<th width="66">8h00 - 10h00</th>
					<th width="73">10h00 - 12h00</th>
					<th width="73">13h30 - 15h30</th>
					<th width="73">15h30 - 17h30</th>
					<th width="73">Motif</th>
					<th width="94">Total heures d'absences</th>
				</tr>
				<?php echo $listeAssiduiteEtudiants; ?>
				<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" />
			<span class="marge"></span>
			<input type="submit" name="action" value="Exporter" />
			<input type="button" value="Imprimer" onClick="imprime_zone('feuille_absence');">
			</form>
			<div id="message"><?php echo isset($message)?$message:''; ?></div>

		</div>
			<?php
					// Exportation de la feuille vers un fichier excel
					if (isset($_GET['action']) && $_GET['action']=='Exporter')
					{
							include("formAssiduite_Export.php");
					}
			?>
			
	</div>

	
</body>

</html>
j'ai pourtant changé l'idClasse en idEtudiant mais cela ne fonctionne pas : l'étudiant ne s'affiche pas mais aucun message d'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

03 juin 2011, 22:55

J'ai juste changé require_once("fonction_formassiduite.php"); par require_once("fonction_formassiduite2.php"); dans ton code et ça fonctionne nikel, il affiche les étudiants pour chaque niveau choisi et affiche l'assiduité pour l'étudiant et la date choisis.

Par contre, il manque toujours le motif. Regarde dans le code que j'ai posté dans mon dernier message.
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Eléphant du PHP | 150 Messages

03 juin 2011, 23:17

J'ai juste changé require_once("fonction_formassiduite.php"); par require_once("fonction_formassiduite2.php"); dans ton code et ça fonctionne nikel, il affiche les étudiants pour chaque niveau choisi et affiche l'assiduité pour l'étudiant et la date choisis.

Par contre, il manque toujours le motif. Regarde dans le code que j'ai posté dans mon dernier message.
Merci je suis vraiment trop nul... sinon pour le motif sa va me le rajouter dans ma base ?ou il faut que je le rajoute dans la table assiduite dans ma base de donnée?

edit : ça marche, maintenant je vais essayer de le mettre dans ma consultation d'assiduité.
Tu veux mourir? OK!! Mais pas dans ma voiture, alors attache ta ceinture !! :pouce:
Tony :boire9:

Eléphant du PHP | 150 Messages

04 juin 2011, 00:49

J'ai essayé de faire ça :
if (isset($_GET['action_nb_absence_jour']) && !empty($idEtudiant))
                {
								$sql = "SELECT * FROM `assiduite` WHERE idEtudiant = '". $idEtudiant. "' ";
                                $result = mysql_query($sql) or die(mysql_error());
                                if ($result)
                                {
                                                $row = mysql_fetch_array($result);
                                                $motif = $row['motif'];
                                }
                                // 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']. "pour cause de". $row['motif']. "h</p>";
                       
                                }
                }	
mais cela me met cette erreur :

Code : Tout sélectionner

Notice: Undefined index: motif in C:\wamp\www\projet\site classe\fonction_consultation.php on line 132


alors que j'ai bien défini la variable motif :
	$motif = isset($_GET['motif'])? $_GET['motif'] : null;
donc je ne comprend pas où est mon erreur.
Je voulais quand cliquant sur "jours d'absences" cela m'affiche les jours d'absence de l'étudiant avec le nombre d'heure comme avant mais je veux ajouter "pour cause de $motif".
Tu veux mourir? OK!! Mais pas dans ma voiture, alors attache ta ceinture !! :pouce:
Tony :boire9:

Eléphant du PHP | 150 Messages

04 juin 2011, 13:28

Complètement rien a voir mais est ce que tu as déjà utilisé mySQL Workbench? car j'ai réussi à me connecter a la base de donnée et je retrouve mes tables et tout mais je ne sais pas comment générer le schéma!
Tu veux mourir? OK!! Mais pas dans ma voiture, alors attache ta ceinture !! :pouce:
Tony :boire9:

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

04 juin 2011, 15:04

Complètement rien a voir mais est ce que tu as déjà utilisé mySQL Workbench? car j'ai réussi à me connecter a la base de donnée et je retrouve mes tables et tout mais je ne sais pas comment générer le schéma!
Dans le menu "database" il y a une commande "reverse engineering" pour créer un schéma à partir d'une base existante.
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Eléphant du PHP | 150 Messages

04 juin 2011, 23:58

Complètement rien a voir mais est ce que tu as déjà utilisé mySQL Workbench? car j'ai réussi à me connecter a la base de donnée et je retrouve mes tables et tout mais je ne sais pas comment générer le schéma!
Dans le menu "database" il y a une commande "reverse engineering" pour créer un schéma à partir d'une base existante.
merci bien,et comment on fait les liens entre les tables?d'ailleurs quels sont ils?

et pour mon motif dans mes jours d'absences tu sais où est mon 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

05 juin 2011, 01:59

Ton programme est faux, car tu ne peux trouver le motif en exécutant une requête à part de la requête principale qui calcule le nombre d'heures d'absences par jour. C'est cette requête qui doit fournir le champ motif.
Donc le programme doit rester comme ça:
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, pour cause de ". $row['motif']. "</p>";
                       
                                }
                }       
Regardes tous les champs que tu affiches :
$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, pour cause de ". $row['motif']. "</p>";
ils proviennent tous de la requête :
$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 ";
Certains champs comme nom et prenom proviennent de la table 'etudiant' (alias t2) et d'autres comme date, nbre_heures_absence de la vue `nbre_heures_absence` (alias t1) et le champ motif doit normalement provenir de la vue `nbre_heures_absence` car il ne peut être dans la table 'etudiant'.

C'est donc la vue `nbre_heures_absence` qui doit être modifiée dans la base de données (par phpmyadmin) pour y ajouter le champ motif. Et tu n'as pas besoin de déclarer quoique ce soit dans le programme PHP.
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Eléphant du PHP | 150 Messages

05 juin 2011, 11:59

Ton programme est faux, car tu ne peux trouver le motif en exécutant une requête à part de la requête principale qui calcule le nombre d'heures d'absences par jour. C'est cette requête qui doit fournir le champ motif.
Donc le programme doit rester comme ça:
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, pour cause de ". $row['motif']. "</p>";
                       
                                }
                }       
Regardes tous les champs que tu affiches :
$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, pour cause de ". $row['motif']. "</p>";
ils proviennent tous de la requête :
$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 ";
Certains champs comme nom et prenom proviennent de la table 'etudiant' (alias t2) et d'autres comme date, nbre_heures_absence de la vue `nbre_heures_absence` (alias t1) et le champ motif doit normalement provenir de la vue `nbre_heures_absence` car il ne peut être dans la table 'etudiant'.

C'est donc la vue `nbre_heures_absence` qui doit être modifiée dans la base de données (par phpmyadmin) pour y ajouter le champ motif. Et tu n'as pas besoin de déclarer quoique ce soit dans le programme PHP.
mais pourtant le champ "motif" se trouve dans la table 'assiduite' donc je ne peux pas le prendre par la?et comment modifier la vu `nbre_heures_absence` ?déjà que je galère en requête SQL pour le php mais la pour une vue c'est encore plus dure.
Tu veux mourir? OK!! Mais pas dans ma voiture, alors attache ta ceinture !! :pouce:
Tony :boire9:

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

05 juin 2011, 16:34

mais pourtant le champ "motif" se trouve dans la table 'assiduite' donc je ne peux pas le prendre par la?et comment modifier la vu `nbre_heures_absence` ?déjà que je galère en requête SQL pour le php mais la pour une vue c'est encore plus dure.
A non, tu ne vas pas me dire que tu ne sais pas comment créer une vue alors qu'on a déjà fait ça. C'est pas dur une vue c'est juste une requête SELECT considérée comme une table virtuelle.

Tu récupère le code SQL qui décrit la vue : `nbre_heures_absence` dans le script de ta base de données, tu le modifie en ajoutant le champ motif dans le SELECT et tu l'exécute sous PHPMyAdmin pour remplacer la vue existante. Puis tu fais la même chose avec la vue `nbre_heures_presence`.

Voici un exemple pédagogique:
Soit la vue existante : vue1
--
-- Structure de la vue `vue1`
--
DROP TABLE IF EXISTS `vue1`;

CREATE VIEW `vue1` AS SELECT `table1`.`champ1` AS `champ1`,`table1`.`champ2` AS `champ2`, sum(`champ3`) as Somme1 FROM `table1` GROUP BY `champ1`,`champ2`;
Pour modifier cette vue en ajoutant un nouveau champ nommé `champ4` qui existe bien sûr dans la table `table1` il faut réécrire la vue comme ça:
-- Structure de la vue `vue1`
--
DROP TABLE IF EXISTS `vue1`;

CREATE VIEW `vue1` AS SELECT `table1`.`champ1` AS `champ1`,`table1`.`champ2` AS `champ2`, sum(`champ3`) as Somme1, `table1`.`champ4` AS `champ4`  FROM `table1` GROUP BY `champ1`,`champ2`, `champ4`;
En exécutant cette requête modifiée la vue1 sera modifiée dans la base de données.

Remarques:
1. La requête DROP TABLE permet de supprimer la table virtuelle doublure de la vue et la requête CREATE VIEW permet de créer la vue.
2. La position (ordre) du champ ajouté (champ3) dans le SELECT n'est importante que s'il y a une clause ORDER BY pour le classement ou une clause GROUP BY pour regrouper les enregistrement pour les calculs effectués par la requête.
3. Les champs calculés ne figurent jamais dans un GROUP BY si utilisé

Voilà, je pense qu'avec ça tu n'auras pas de motif de réticence.
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène