// crée la liste des classes
if (isset($dateSeance))
{
$sql = "SELECT DISTINCT idClasse FROM eleve ORDER BY idClasse;";
mysql_select_db("bd_eleves", @mysql_connect("localhost","root","")) or die(mysql_error());
$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>";
}
mysql_close();
}
a la place de ça
@mysql_connect("localhost","root",""); // ici: nom serveur="localhost", nom d'utilisateur="root" et mot de passe=""
Mais ce qui est très important c'est la requête qui récupère les états de présence/absence des élèves de la classe sélectionnée dans une date qui correspond à une séance de cours. C'est à dire celle-là:
// crée la liste des élèves et leurs infos assiduité pour la classe sélectionnée
if (isset($idClasse) && isset($idSeance))
{
$sql = "SELECT e.idEleve, e.nom, e.prenom, a.presence_mat_t1, a.presence_mat_t2, a.presence_amidi_t1, a.presence_amidi_t2
FROM eleve e Left outer JOIN assiduite a ON a.idSeance='".$idSeance."' AND e.idEleve=a.idEleve
WHERE e.idClasse = '".$idClasse."'
ORDER BY e.nom, e.prenom";
//
mysql_select_db("bd_eleves", @mysql_connect("localhost","root","")) or die(mysql_error());
$result = mysql_query($sql) or die(mysql_error());
while($result && $row=mysql_fetch_array($result))
{
// 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)
$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 " : "";
// les checkbox sont nommés comme un tableau nommé : absences[tranche horaire][id séance][id élève]
$listeAssiduiteEleves .= "<tr><td>".$row['nom']." ".$row['prenom']."</td>
<td><input type=\"checkbox\" name=\"absences[mat_t1][".$idSeance.",".$row['idEleve']."]\" ".$mat_t1_checked." /> Absent(e)</td>
<td><input type=\"checkbox\" name=\"absences[mat_t2][".$idSeance.",".$row['idEleve']."]\" ".$mat_t2_checked." /> Absent(e)</td>
<td><input type=\"checkbox\" name=\"absences[amidi_t1][".$idSeance.",".$row['idEleve']."]\" ".$amidi_t1_checked." /> Absent(e)</td>
<td><input type=\"checkbox\" name=\"absences[amidi_t2][".$idSeance.",".$row['idEleve']."]\" ".$amidi_t2_checked." /> Absent(e)</td>
</tr>";
}
mysql_close();
}
La question donc est : Est-ce que tu as gardé cette requête tel quel ? et si oui, est-ce que tu as une table séance et comment fais-tu pour récupérer l'idSeance dans ton programme ?
je n'est pas touché a cette requète. la seule que j'ai modifier est celle que je t'es mise avant.La question donc est : Est-ce que tu as gardé cette requête tel quel ? et si oui, est-ce que tu as une table séance et comment fais-tu pour récupérer l'idSeance dans ton programme ?
// crée la liste des élèves et leurs infos assiduité pour la classe sélectionnée
if (isset($idClasse) /* && isset($idSeance) */)
a la place de ça :
// crée la liste des élèves et leurs infos assiduité pour la classe sélectionnée
if (isset($idClasse) && isset($idSeance))
donc j'ai juste commenter "&&isset($idSeance)"que veux tu dire par modèle relationnel? et l'url que tu as mise marche pas je ne peux en l’occurrence allez voir.Par ailleurs, j'aimerai bien jeter un coup d’œil sur ton modèle relationnel de la base de données.
Et pour information, moi j'ai utilisé ce modèle relationnel pour mon exemple:
le problème est que je dois créer une gestion d'absence pour que le directeur gagne du temps (pour lui il veut juste a avoir les absences du jour et pouvoir les retrouver par la suite) alors si il faut qu'il rentre les séances c'est un temps fou de perdu et autant rester sur papier.donc tu pense que je suis obliger de supprimer la table séance?et donc créer une table matiéres et professeurs?Ba v'la le problème. Pour toi, tu zappe complétement la notion de séance ; Car Tu listes toutes les classes sans relation avec la date que tu saisie et tu espères noter l'état de présence d'une classe que tu choisi dans cette liste ; Or, il se trouve que la classe que tu choisi n'a pas de cours (séance) pour la date saisie, ce qui provoque une erreur logique et la base de données a été conçue pour noter les présences par élève et par séance. Si tu ne donne pas l'id Séance correspondant à la date saisie et à la classe choisie, la requête de mise à jour des présence échoue.
Mais tu veux ignorer la notion de séance, il faut supprimer la table "seance" et intégrer ses champs dans la table "assiduite" ce qui te permet de saisir l'état de présence d'une classe dans le temps comme tu veux, c'est à dire sans avoir à programmer au préalable le planning des séances de cours des classes d'élèves. Ce qui est obérant à mon humble avis et qui engendre beaucoup de redondances de données au niveau de la table "assiduite" comme la date, la classe, le prof et la matière qui sont communs aux élèves de la même classe. Mais bon tu peux aller dans ce sens même si je te le déconseille.
NB: Le modèle relationnel est le schéma de la base de données.
-- phpMyAdmin SQL Dump
-- version 3.3.9
-- http://www.phpmyadmin.net
--
-- Serveur: localhost
-- Généré le : Jeu 21 Avril 2011 à 22:18
-- Version du serveur: 5.5.8
-- Version de PHP: 5.3.5
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
--
-- Base de données: `bd_eleves`
--
-- --------------------------------------------------------
--
-- Structure de la table `assiduite`
--
CREATE TABLE IF NOT EXISTS `assiduite` (
`date` date NOT NULL,
`idEleve` int(11) NOT NULL,
`nomMatiere` varchar(50) NOT NULL,
`nomProf` varchar(50) NOT NULL,
`presence_mat_t1` int(11) NOT NULL DEFAULT '1',
`presence_mat_t2` int(11) NOT NULL DEFAULT '1',
`presence_amidi_t1` int(1) NOT NULL DEFAULT '1',
`presence_amidi_t2` int(11) NOT NULL DEFAULT '1',
UNIQUE KEY `idCours` (`date`,`idEleve`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
--
-- Contenu de la table `assiduite`
--
INSERT INTO `assiduite` (`date`, `idEleve`, `nomMatiere`, `nomProf`, `presence_mat_t1`, `presence_mat_t2`, `presence_amidi_t1`, `presence_amidi_t2`) VALUES
('2011-04-18', 1, 'Programmation', 'Mme. La Prof', 1, 1, 1, 1),
('2011-04-18', 2, 'Programmation', 'Mme. La Prof', 1, 1, 1, 1),
('2011-04-18', 3, 'Programmation', 'Mme. La Prof', 0, 0, 0, 0),
('2011-04-18', 4, 'Anglais', 'Mme. La Prof', 0, 1, 1, 1),
('2011-04-18', 5, 'Anglais', 'Mme. La Prof', 0, 0, 0, 0);
-- --------------------------------------------------------
--
-- Structure de la table `eleve`
--
CREATE TABLE IF NOT EXISTS `eleve` (
`idEleve` int(11) NOT NULL AUTO_INCREMENT,
`nom` varchar(20) NOT NULL,
`prenom` varchar(20) NOT NULL,
`idClasse` varchar(20) DEFAULT NULL,
PRIMARY KEY (`idEleve`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=6 ;
--
-- Contenu de la table `eleve`
--
INSERT INTO `eleve` (`idEleve`, `nom`, `prenom`, `idClasse`) VALUES
(1, 'LABELLE', 'Aline', 'BTS-INF-A1'),
(2, 'BONHOMME', 'Olivier', 'BTS-INF-A1'),
(3, 'JAMAISLA', 'Stéphane', 'BTS-INF-A1'),
(4, 'RENAULT', 'Pascal', 'BTS-INF-A2'),
(5, 'DAHOU', 'Géraldine', 'BTS-INF-A2');
-- --------------------------------------------------------
--
-- Structure de la table `matiere`
--
CREATE TABLE IF NOT EXISTS `matiere` (
`nom` varchar(50) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
--
-- Contenu de la table `matiere`
--
INSERT INTO `matiere` (`nom`) VALUES
('Programmation'),
('Anglais');
-- --------------------------------------------------------
--
-- Structure de la table `prof`
--
CREATE TABLE IF NOT EXISTS `prof` (
`nom` varchar(50) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
--
-- Contenu de la table `prof`
--
INSERT INTO `prof` (`nom`) VALUES
('Mr. Le Prof'),
('Mme. La Prof');
Et le programme :
<?php
// init
$date = isset($_GET['date']) && !empty($_GET['date'])? $_GET['date'] : null;
$idClasse = isset($_GET['idClasse']) && !empty($_GET['idClasse'])? $_GET['idClasse'] : null;
$nomMatiere = isset($_GET['nomMatiere']) && !empty($_GET['nomMatiere'])? $_GET['nomMatiere'] : null;
$nomProf = isset($_GET['nomProf']) && !empty($_GET['nomProf'])? $_GET['nomProf'] : 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;
// connction à la base de données
mysql_select_db("bd_eleves", @mysql_connect("localhost","root","")) or die(mysql_error());
// enregistrer la saisie du formulaire
if (isset($_GET['action']) && $_GET['action']=='Enregistrer')
{
//
$message = "";
if (empty($date)) $message .= "<p>La date est obligatoire !</p>";
if (empty($idClasse)) $message .= "<p>La classe est obligatoire !</p>";
if (empty($nomMatiere)) $message .= "<p>La matière est obligatoire !</p>";
if (empty($nomProf)) $message .= "<p>Le/la prof est obligatoire !</p>";
//
if (empty($message))
{
$listeAbsences = isset($_GET['absences'])?$_GET['absences']:array();
//echo "<pre>"; print_r($listeAbsences); echo "</pre>";
$sql = "SELECT * FROM eleve WHERE idClasse = '".$idClasse."';";
$result = mysql_query($sql) or die(mysql_error());
while($result && $row=mysql_fetch_array($result))
{
$idEleve = $row['idEleve']; $nomEleve = $row['nom'];
$presence_mat_t1 = isset($listeAbsences["$idEleve"]['mat_t1'])?0:1;
$presence_mat_t2 = isset($listeAbsences["$idEleve"]['mat_t2'])?0:1;
$presence_amidi_t1 = isset($listeAbsences["$idEleve"]['amidi_t1'])?0:1;
$presence_amidi_t2 = isset($listeAbsences["$idEleve"]['amidi_t2'])?0:1;
//
// Nouvel enregistrement ou Mise à jour
if ($mode_ajout==true){
$sql="INSERT INTO assiduite SET date='".$date."', idEleve='".$idEleve."',
nomMatiere='".$nomMatiere."', nomProf='".$nomProf."',
presence_mat_t1='".$presence_mat_t1."',
presence_mat_t2='".$presence_mat_t2."',
presence_amidi_t1='".$presence_amidi_t1."',
presence_amidi_t2='".$presence_amidi_t2."';";
} else {
$sql="UPDATE assiduite SET nomMatiere='".$nomMatiere."', nomProf='".$nomProf."',
presence_mat_t1='".$presence_mat_t1."',
presence_mat_t2='".$presence_mat_t2."',
presence_amidi_t1='".$presence_amidi_t1."',
presence_amidi_t2='".$presence_amidi_t2."'
WHERE date='".$date."' AND idEleve='".$idEleve."';";
}
//
//echo $sql;
if (!@mysql_query($sql)) $message .= "<li>".$nomEleve." => Erreur : ".mysql_error()."</li>";
}
if (empty($message)) $message = "Enregistrement effectué avec succès";
else $message = "<p>Les Erreurs suivantes sont rencontrées :</ul>" . $message . "</ul></p>";
}
}
// crée la liste des classes
$listeClasses = "";
$sql = "SELECT DISTINCT idClasse FROM eleve ORDER BY idClasse;";
$result = mysql_query($sql) or die(mysql_error());
while($result && $row=mysql_fetch_array($result))
{
$selected = $row['idClasse']==$idClasse? " selected " : "";
$listeClasses .= "<option value=\"".$row['idClasse']."\" ".$selected." >".$row['idClasse']."</option>";
}
// crée les listes des matières
$listeMatieres = "";
$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? " selected " : "";
$listeMatieres .= "<option value=\"".$row['nom']."\" ".$selected." >".$row['nom']."</option>";
}
// crée les listes des profs
$listeProfs = "";
$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? " selected " : "";
$listeProfs .= "<option value=\"".$row['nom']."\" ".$selected." >".$row['nom']."</option>";
}
// crée la liste des élèves de la classe sélectionnée
$listeAssiduiteEleves = "";
if (isset($idClasse) && isset($date))
{
// on fait une jointure externe à gauche du côté de la table client vers la table assiduité
// pour afficher tous les élèves de la classe même si les données de présence sont NULL (cas nouvelle saisie)
$sql = "SELECT a.*, e.*
FROM eleve e LEFT OUTER JOIN assiduite a ON e.idEleve=a.idEleve AND a.date=date('".$date."')
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;
//
$mat_t1_checked = $row['presence_mat_t1']!=1 && !is_null($row['presence_mat_t1']) ? " checked " : "";
$mat_t2_checked = $row['presence_mat_t2']!=1 && !is_null($row['presence_mat_t2']) ? " checked " : "";
$amidi_t1_checked = $row['presence_amidi_t1']!=1 && !is_null($row['presence_amidi_t1']) ? " checked " : "";
$amidi_t2_checked = $row['presence_amidi_t2']!=1 && !is_null($row['presence_amidi_t2']) ? " checked " : "";
//
$listeAssiduiteEleves .= "<tr><td>".$row['nom']." ".$row['prenom']."</td>
<td><input type=\"checkbox\" name=\"absences[".$row['idEleve']."][mat_t1]\" ".$mat_t1_checked." /> Absent(e)</td>
<td><input type=\"checkbox\" name=\"absences[".$row['idEleve']."][mat_t2]\" ".$mat_t2_checked." /> Absent(e)</td>
<td><input type=\"checkbox\" name=\"absences[".$row['idEleve']."][amidi_t1]\" ".$amidi_t1_checked." /> Absent(e)</td>
<td><input type=\"checkbox\" name=\"absences[".$row['idEleve']."][amidi_t2]\" ".$amidi_t2_checked." /> Absent(e)</td>
</tr>";
}
}
// fin de connexion
mysql_close();
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Gestion d'assiduité des élèves</title>
<link rel="stylesheet" type="text/css" href="calendrier.css">
<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>Date : </th><td><input type="text" id="dateLib" name="date" value="<?php echo $date; ?>" style="width:180px"
onfocus="visuCal(this,{'format' : '%a-%m-%j'})" onblur="masqueCal(this);" /></td>
<th>Classe :</th><td><select name="idClasse" onchange="form1.submit();" value="<?php echo $idClasse; ?>" >
<option value="" ></option>
<?php echo $listeClasses; ?>
</select></td>
<th>Matière : </th><td><select name="nomMatiere" value="<?php echo $nomMatiere; ?>" >
<option value="" ></option>
<?php echo $listeMatieres; ?>
</select></td>
<th>Prof : </th><td><select name="nomProf" value="<?php echo $nomProf; ?>" >
<option value="" ></option>
<?php echo $listeProfs; ?>
</select></td>
</tr>
</table>
<hr />
<?php if ($mode_ajout==true) { ?>
<h2>Nouvelle Feuille de présence</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</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></tr>
<?php echo $listeAssiduiteEleves; ?>
</table>
<input type="hidden" name="mode_ajout" value="<?php echo $mode_ajout; ?>" />
<input type="submit" name="action" value="Enregistrer" />
</form>
<div id="message"><?php echo isset($message)?$message:''; ?></div>
</body>
</html>
Le programme est légèrement modifié pour détecter automatiquement si la feuille de présence affichée est une nouvelle feuille ou une feuille existante et effectue donc soit l'insertion de nouvelles données de pésences/Absences ou bien il met à jour des présences/absences existantes.
Pour la dernière question, il vaudrait mieux laisser les cases à cocher c'est plus ergonomique et facile à saisir.Merci le programme est nikel à un détail près : la matière et le prof sont définis pour la journée et non pour la tranche horaires comme je t'avais envoyer dans mon tableau (car en faite il y a 3 BTS mais ils ont leur cours en même temps dans une seul salle de classe). Est ce que sa vient juste de la disposition et que si je refait juste l'html (le tableau) en mettant plusieurs fois la matière et le prof sa va fonctionner ou est ce qu'il faut changer quelque chose à la base de donnée??
Et serait il possible de remettre des liste déroulante avec présent par défaut et donc = 0 et si on veut mettre absent on choisit absent et donc =1 mais je ne sais pas si c'est judicieux car c'est beaucoup plus long que de cocher des cases.
-- phpMyAdmin SQL Dump
-- version 3.3.9
-- http://www.phpmyadmin.net
--
-- Serveur: localhost
-- Généré le : Ven 22 Avril 2011 à 09:11
-- Version du serveur: 5.5.8
-- Version de PHP: 5.3.4
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
--
-- Base de données: `bd_eleves`
--
-- --------------------------------------------------------
--
-- Structure de la table `assiduite`
--
CREATE TABLE IF NOT EXISTS `assiduite` (
`date` date NOT NULL,
`idEleve` int(11) NOT NULL,
`presence_mat_t1` int(11) NOT NULL DEFAULT '1',
`presence_mat_t2` int(11) NOT NULL DEFAULT '1',
`presence_amidi_t1` int(1) NOT NULL DEFAULT '1',
`presence_amidi_t2` int(11) NOT NULL DEFAULT '1',
`nomProf_mat_t1` varchar(50) NOT NULL,
`nomProf_mat_t2` varchar(50) NOT NULL,
`nomProf_amidi_t1` varchar(50) NOT NULL,
`nomProf_amidi_t2` varchar(50) NOT NULL,
`nomMatiere_mat_t1` varchar(50) NOT NULL,
`nomMatiere_mat_t2` varchar(50) NOT NULL,
`nomMatiere_amidi_t1` varchar(50) NOT NULL,
`nomMatiere_amidi_t2` varchar(50) NOT NULL,
UNIQUE KEY `idAssiduite` (`date`,`idEleve`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
--
-- Contenu de la table `assiduite`
--
INSERT INTO `assiduite` (`date`, `idEleve`, `presence_mat_t1`, `presence_mat_t2`, `presence_amidi_t1`, `presence_amidi_t2`, `nomProf_mat_t1`, `nomProf_mat_t2`, `nomProf_amidi_t1`, `nomProf_amidi_t2`, `nomMatiere_mat_t1`, `nomMatiere_mat_t2`, `nomMatiere_amidi_t1`, `nomMatiere_amidi_t2`) VALUES
('2011-04-18', 1, 1, 1, 1, 1, 'Mme. La Prof', 'Mme. La Prof', 'Mme. La Prof', 'Mme. La Prof', 'Anglais', 'Anglais', 'Anglais', 'Anglais'),
('2011-04-18', 2, 1, 1, 1, 1, 'Mme. La Prof', 'Mme. La Prof', 'Mme. La Prof', 'Mme. La Prof', 'Anglais', 'Anglais', 'Anglais', 'Anglais'),
('2011-04-18', 3, 0, 0, 0, 0, 'Mme. La Prof', 'Mme. La Prof', 'Mme. La Prof', 'Mme. La Prof', 'Anglais', 'Anglais', 'Anglais', 'Anglais'),
('2011-04-18', 4, 1, 1, 0, 1, 'Mr. Le Prof', 'Mr. Le Prof', 'Mme. La Prof', 'Mme. La Prof', 'Programmation', 'Programmation', 'Anglais', 'Anglais'),
('2011-04-18', 5, 1, 1, 0, 1, 'Mr. Le Prof', 'Mr. Le Prof', 'Mme. La Prof', 'Mme. La Prof', 'Programmation', 'Programmation', 'Anglais', 'Anglais');
-- --------------------------------------------------------
--
-- Structure de la table `eleve`
--
CREATE TABLE IF NOT EXISTS `eleve` (
`idEleve` int(11) NOT NULL AUTO_INCREMENT,
`nom` varchar(20) NOT NULL,
`prenom` varchar(20) NOT NULL,
`idClasse` varchar(20) DEFAULT NULL,
PRIMARY KEY (`idEleve`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=6 ;
--
-- Contenu de la table `eleve`
--
INSERT INTO `eleve` (`idEleve`, `nom`, `prenom`, `idClasse`) VALUES
(1, 'LABELLE', 'Aline', 'BTS-INF-A1'),
(2, 'BONHOMME', 'Olivier', 'BTS-INF-A1'),
(3, 'JAMAISLA', 'Stéphane', 'BTS-INF-A1'),
(4, 'RENAULT', 'Pascal', 'BTS-INF-A2'),
(5, 'DAHOU', 'Géraldine', 'BTS-INF-A2');
-- --------------------------------------------------------
--
-- Structure de la table `matiere`
--
CREATE TABLE IF NOT EXISTS `matiere` (
`nom` varchar(50) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
--
-- Contenu de la table `matiere`
--
INSERT INTO `matiere` (`nom`) VALUES
('Programmation'),
('Anglais');
-- --------------------------------------------------------
--
-- Structure de la table `prof`
--
CREATE TABLE IF NOT EXISTS `prof` (
`nom` varchar(50) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
--
-- Contenu de la table `prof`
--
INSERT INTO `prof` (`nom`) VALUES
('Mr. Le Prof'),
('Mme. La Prof');
Le programme modifié :
<?php
// init
$date = isset($_GET['date']) && !empty($_GET['date'])? $_GET['date'] : null;
$idClasse = isset($_GET['idClasse']) && !empty($_GET['idClasse'])? $_GET['idClasse'] : null;
//
$nomProf_mat_t1 = isset($_GET['nomProf_mat_t1']) ? $_GET['nomProf_mat_t1'] : null;
$nomProf_mat_t2 = isset($_GET['nomProf_mat_t2']) ? $_GET['nomProf_mat_t2'] : null;
$nomProf_amidi_t1 = isset($_GET['nomProf_amidi_t1']) ? $_GET['nomProf_amidi_t1'] : null;
$nomProf_amidi_t2 = isset($_GET['nomProf_amidi_t2']) ? $_GET['nomProf_amidi_t2'] : null;
//
$nomMatiere_mat_t1 = isset($_GET['nomMatiere_mat_t1']) ? $_GET['nomMatiere_mat_t1'] : null;
$nomMatiere_mat_t2 = isset($_GET['nomMatiere_mat_t2']) ? $_GET['nomMatiere_mat_t2'] : null;
$nomMatiere_amidi_t1 = isset($_GET['nomMatiere_amidi_t1']) ? $_GET['nomMatiere_amidi_t1'] : null;
$nomMatiere_amidi_t2 = isset($_GET['nomMatiere_amidi_t2']) ? $_GET['nomMatiere_amidi_t2'] : null;
// variable pour savoir s'il faut créer une nouvelle absence ou modifier une existante
$mode_ajout = isset($_GET['mode_ajout']) && !empty($_GET['mode_ajout'])? $_GET['mode_ajout'] : null;
// connction à la base de données
mysql_select_db("bd_eleves", @mysql_connect("localhost","root","")) or die(mysql_error());
// enregistrer la saisie du formulaire
if (isset($_GET['action']) && $_GET['action']=='Enregistrer')
{
//
$message = "";
if (empty($date)) $message .= "<p>La date est obligatoire !</p>";
if (empty($idClasse)) $message .= "<p>La classe est obligatoire !</p>";
if (empty($nomMatiere_mat_t1) || empty($nomMatiere_mat_t2)
||empty($nomMatiere_amidi_t1) || empty($nomMatiere_amidi_t2)) $message .= "<p>La matière est obligatoire !</p>";
if (empty($nomProf_mat_t1) || empty($nomProf_mat_t2)
||empty($nomProf_amidi_t1) || empty($nomProf_amidi_t2)) $message .= "<p>Le/la prof est obligatoire !</p>";
//
if (empty($message))
{
$listeAbsences = isset($_GET['absences'])?$_GET['absences']:array();
//echo "<pre>"; print_r($listeAbsences); echo "</pre>";
$sql = "SELECT * FROM eleve WHERE idClasse = '".$idClasse."';";
$result = mysql_query($sql) or die(mysql_error());
while($result && $row=mysql_fetch_array($result))
{
$idEleve = $row['idEleve']; $nomEleve = $row['nom'];
$presence_mat_t1 = isset($listeAbsences["$idEleve"]['mat_t1'])?0:1;
$presence_mat_t2 = isset($listeAbsences["$idEleve"]['mat_t2'])?0:1;
$presence_amidi_t1 = isset($listeAbsences["$idEleve"]['amidi_t1'])?0:1;
$presence_amidi_t2 = isset($listeAbsences["$idEleve"]['amidi_t2'])?0:1;
//
// Nouvel enregistrement ou Mise à jour
if ($mode_ajout==true){
$sql="INSERT INTO assiduite SET date='".$date."', idEleve='".$idEleve."',
presence_mat_t1='".$presence_mat_t1."',
presence_mat_t2='".$presence_mat_t2."',
presence_amidi_t1='".$presence_amidi_t1."',
presence_amidi_t2='".$presence_amidi_t2."',
nomProf_mat_t1 = '".$nomProf_mat_t1."',
nomProf_mat_t2 = '".$nomProf_mat_t2."',
nomProf_amidi_t1 = '".$nomProf_amidi_t1."',
nomProf_amidi_t2 = '".$nomProf_amidi_t2."',
nomMatiere_mat_t1 = '".$nomMatiere_mat_t1."',
nomMatiere_mat_t2 = '".$nomMatiere_mat_t2."',
nomMatiere_amidi_t1 = '".$nomMatiere_amidi_t1."',
nomMatiere_amidi_t2 = '".$nomMatiere_amidi_t2."';";
} else {
$sql="UPDATE assiduite SET
presence_mat_t1='".$presence_mat_t1."',
presence_mat_t2='".$presence_mat_t2."',
presence_amidi_t1='".$presence_amidi_t1."',
presence_amidi_t2='".$presence_amidi_t2."',
nomProf_mat_t1 = '".$nomProf_mat_t1."',
nomProf_mat_t2 = '".$nomProf_mat_t2."',
nomProf_amidi_t1 = '".$nomProf_amidi_t1."',
nomProf_amidi_t2 = '".$nomProf_amidi_t2."',
nomMatiere_mat_t1 = '".$nomMatiere_mat_t1."',
nomMatiere_mat_t2 = '".$nomMatiere_mat_t2."',
nomMatiere_amidi_t1 = '".$nomMatiere_amidi_t1."',
nomMatiere_amidi_t2 = '".$nomMatiere_amidi_t2."'
WHERE date='".$date."' AND idEleve='".$idEleve."';";
}
//
//echo $sql;
if (!@mysql_query($sql)) $message .= "<li>".$nomEleve." => Erreur : ".mysql_error()."</li>";
}
if (empty($message)) $message = "Enregistrement effectué avec succès";
else $message = "<p>Les Erreurs suivantes sont rencontrées :</ul>" . $message . "</ul></p>";
}
}
// crée la liste des classes
$listeClasses = "";
$sql = "SELECT DISTINCT idClasse FROM eleve ORDER BY idClasse;";
$result = mysql_query($sql) or die(mysql_error());
while($result && $row=mysql_fetch_array($result))
{
$selected = $row['idClasse']==$idClasse? " selected " : "";
$listeClasses .= "<option value=\"".$row['idClasse']."\" ".$selected." >".$row['idClasse']."</option>";
}
// crée 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>";
}
// crée la liste des élèves de la classe sélectionnée
$listeAssiduiteEleves = "";
if (isset($idClasse) && isset($date))
{
// on fait une jointure externe à gauche du côté de la table client vers la table assiduité
// pour afficher tous les élèves de la classe même si les données de présence sont NULL (cas nouvelle saisie)
$sql = "SELECT a.*, e.*
FROM eleve e LEFT OUTER JOIN assiduite a ON e.idEleve=a.idEleve AND a.date=date('".$date."')
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;
//
$nomProf_mat_t1 = $row['nomProf_mat_t1'];
$nomProf_mat_t2 = $row['nomProf_mat_t2'];
$nomProf_amidi_t1 = $row['nomProf_amidi_t1'];
$nomProf_amidi_t2 = $row['nomProf_amidi_t2'];
//
$nomMatiere_mat_t1 = $row['nomMatiere_mat_t1'];
$nomMatiere_mat_t2 = $row['nomMatiere_mat_t2'];
$nomMatiere_amidi_t1 = $row['nomMatiere_amidi_t1'];
$nomMatiere_amidi_t2 = $row['nomMatiere_amidi_t2'];
//
$mat_t1_checked = $row['presence_mat_t1']!=1 && !is_null($row['presence_mat_t1']) ? " checked " : "";
$mat_t2_checked = $row['presence_mat_t2']!=1 && !is_null($row['presence_mat_t2']) ? " checked " : "";
$amidi_t1_checked = $row['presence_amidi_t1']!=1 && !is_null($row['presence_amidi_t1']) ? " checked " : "";
$amidi_t2_checked = $row['presence_amidi_t2']!=1 && !is_null($row['presence_amidi_t2']) ? " checked " : "";
//
$listeAssiduiteEleves .= "<tr><td>".$row['nom']." ".$row['prenom']."</td>
<td><input type=\"checkbox\" name=\"absences[".$row['idEleve']."][mat_t1]\" ".$mat_t1_checked." /> Absent(e)</td>
<td><input type=\"checkbox\" name=\"absences[".$row['idEleve']."][mat_t2]\" ".$mat_t2_checked." /> Absent(e)</td>
<td><input type=\"checkbox\" name=\"absences[".$row['idEleve']."][amidi_t1]\" ".$amidi_t1_checked." /> Absent(e)</td>
<td><input type=\"checkbox\" name=\"absences[".$row['idEleve']."][amidi_t2]\" ".$amidi_t2_checked." /> Absent(e)</td>
</tr>";
}
}
// fin de connexion
mysql_close();
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Gestion d'assiduité des élèves</title>
<link rel="stylesheet" type="text/css" href="calendrier.css">
<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>Date : </th><td><input type="text" id="dateLib" name="date" value="<?php echo $date; ?>" style="width:180px"
onfocus="visuCal(this,{'format' : '%a-%m-%j'})" onblur="masqueCal(this);" /></td>
<th>Classe :</th><td><select name="idClasse" onchange="form1.submit();" value="<?php echo $idClasse; ?>" >
<option value="" ></option>
<?php echo $listeClasses; ?>
</select></td>
</tr>
</table>
<hr />
<?php if ($mode_ajout==true) { ?>
<h2>Nouvelle Feuille de présence</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</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></tr>
<?php echo $listeAssiduiteEleves; ?>
<tr>
<th>Prof : </th>
<td><select name="nomProf_mat_t1" value="<?php echo $nomProf_mat_t1; ?>" >
<option value="" ></option>
<?php echo $listeProfs_mat_t1; ?>
</select></td>
<td><select name="nomProf_mat_t2" value="<?php echo $nomProf_mat_t2; ?>" >
<option value="" ></option>
<?php echo $listeProfs_mat_t2; ?>
</select></td>
<td><select name="nomProf_amidi_t1" value="<?php echo $nomProf_amidi_t1; ?>" >
<option value="" ></option>
<?php echo $listeProfs_amidi_t1; ?>
</select></td>
<td><select name="nomProf_amidi_t2" value="<?php echo $nomProf_amidi_t2; ?>" >
<option value="" ></option>
<?php echo $listeProfs_amidi_t2; ?>
</select></td>
</tr>
<tr>
<th>Matière : </th>
<td><select name="nomMatiere_mat_t1" value="<?php echo $nomMatiere_mat_t1; ?>" >
<option value="" ></option>
<?php echo $listeMatieres_mat_t1; ?>
</select></td>
<td><select name="nomMatiere_mat_t2" value="<?php echo $nomMatiere_mat_t2; ?>" >
<option value="" ></option>
<?php echo $listeMatieres_mat_t2; ?>
</select></td>
<td><select name="nomMatiere_amidi_t1" value="<?php echo $nomMatiere_amidi_t1; ?>" >
<option value="" ></option>
<?php echo $listeMatieres_amidi_t1; ?>
</select></td>
<td><select name="nomMatiere_amidi_t2" value="<?php echo $nomMatiere_amidi_t2; ?>" >
<option value="" ></option>
<?php echo $listeMatieres_amidi_t2; ?>
</select></td>
</tr>
</table>
<input type="hidden" name="mode_ajout" value="<?php echo $mode_ajout; ?>" />
<input type="submit" name="action" value="Enregistrer" />
</form>
<div id="message"><?php echo isset($message)?$message:''; ?></div>
</body>
</html>
Oui, tu peux avec une requête de calcul interroger la table "assiduité" sachant qu'un état de présence vaut 1 et un état d'absence vaut 0, on peut multiplier chaque état par 2 pour le convertir en heures.est ce que c'est possible de définir que si on coche une case "absent" c'est égale a 2h d'absence ? et donc par la suite pouvoir comptabilisé les heures d'absences pour un élève?et est ce que c'est possible de comptabilisé les heures de présence pour un élève??
-- phpMyAdmin SQL Dump
-- version 3.3.9
-- http://www.phpmyadmin.net
--
-- Serveur: localhost
-- Généré le : Ven 22 Avril 2011 à 09:26
-- Version du serveur: 5.5.8
-- Version de PHP: 5.3.4
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
--
-- Base de données: `bd_eleves`
--
USE `bd_eleves`;
-- --------------------------------------------------------
--
-- Structure de la vue `nbre_heures_absence_par_jour`
--
CREATE VIEW `nbre_heures_absence_par_jour` AS
select `date` AS `date`,`idEleve` AS `idEleve`,
sum(8 -((`presence_mat_t1` * 2) +(`presence_mat_t2` * 2) + (`presence_amidi_t1` * 2) + (`presence_amidi_t2` * 2))) AS `nbre_heures_absence`
from `assiduite` group by `date`,`idEleve`;
-- --------------------------------------------------------
--
-- Structure de la vue `nbre_heures_presence_par_jour`
--
CREATE VIEW `nbre_heures_presence_par_jour` AS
select `date` AS `date`,`idEleve` AS `idEleve`,
sum((`presence_mat_t1` * 2) +(`presence_mat_t2` * 2) + (`presence_amidi_t1` * 2) + (`presence_amidi_t2` * 2)) AS `nbre_heures_presence`
from `assiduite` group by `date`,`idEleve`;
Et par extension, voici le calcul global par élève :
--
-- Structure de la vue `total_heures_absence`
--
CREATE VIEW `total_heures_absence` AS
select `idEleve` AS `idEleve`,
sum(8 -((`presence_mat_t1` * 2) +(`presence_mat_t2` * 2) + (`presence_amidi_t1` * 2) + (`presence_amidi_t2` * 2))) AS `nbre_heures_absence`
from `assiduite` group by `idEleve`;
-- --------------------------------------------------------
--
-- Structure de la vue `total_heures_presence`
--
CREATE VIEW `total_heures_presence` AS
select `idEleve` AS `idEleve`,
sum((`presence_mat_t1` * 2) +(`presence_mat_t2` * 2) + (`presence_amidi_t1` * 2) + (`presence_amidi_t2` * 2)) AS `nbre_heures_presence`
from `assiduite` group by `idEleve`;
Voici un essai qui intégre le calcul du total d'heures d'absence par élève et l'affiche sur le formulaire qu'on a développé. Ce programme exige que les vues (requêtes) de calcul soit créée sur MySQL en tant que vues.
<?php
// init
$date = isset($_GET['date']) && !empty($_GET['date'])? $_GET['date'] : null;
$idClasse = isset($_GET['idClasse']) && !empty($_GET['idClasse'])? $_GET['idClasse'] : null;
//
$nomProf_mat_t1 = isset($_GET['nomProf_mat_t1']) ? $_GET['nomProf_mat_t1'] : null;
$nomProf_mat_t2 = isset($_GET['nomProf_mat_t2']) ? $_GET['nomProf_mat_t2'] : null;
$nomProf_amidi_t1 = isset($_GET['nomProf_amidi_t1']) ? $_GET['nomProf_amidi_t1'] : null;
$nomProf_amidi_t2 = isset($_GET['nomProf_amidi_t2']) ? $_GET['nomProf_amidi_t2'] : null;
//
$nomMatiere_mat_t1 = isset($_GET['nomMatiere_mat_t1']) ? $_GET['nomMatiere_mat_t1'] : null;
$nomMatiere_mat_t2 = isset($_GET['nomMatiere_mat_t2']) ? $_GET['nomMatiere_mat_t2'] : null;
$nomMatiere_amidi_t1 = isset($_GET['nomMatiere_amidi_t1']) ? $_GET['nomMatiere_amidi_t1'] : null;
$nomMatiere_amidi_t2 = isset($_GET['nomMatiere_amidi_t2']) ? $_GET['nomMatiere_amidi_t2'] : null;
// variable pour savoir s'il faut créer une nouvelle absence ou modifier une existante
$mode_ajout = isset($_GET['mode_ajout']) && !empty($_GET['mode_ajout'])? $_GET['mode_ajout'] : null;
// connction à la base de données
mysql_select_db("bd_eleves", @mysql_connect("localhost","root","")) or die(mysql_error());
// enregistrer la saisie du formulaire
if (isset($_GET['action']) && $_GET['action']=='Enregistrer')
{
//
$message = "";
if (empty($date)) $message .= "<p>La date est obligatoire !</p>";
if (empty($idClasse)) $message .= "<p>La classe est obligatoire !</p>";
if (empty($nomMatiere_mat_t1) || empty($nomMatiere_mat_t2)
||empty($nomMatiere_amidi_t1) || empty($nomMatiere_amidi_t2)) $message .= "<p>La matière est obligatoire !</p>";
if (empty($nomProf_mat_t1) || empty($nomProf_mat_t2)
||empty($nomProf_amidi_t1) || empty($nomProf_amidi_t2)) $message .= "<p>Le/la prof est obligatoire !</p>";
//
if (empty($message))
{
$listeAbsences = isset($_GET['absences'])?$_GET['absences']:array();
//echo "<pre>"; print_r($listeAbsences); echo "</pre>";
$sql = "SELECT * FROM eleve WHERE idClasse = '".$idClasse."';";
$result = mysql_query($sql) or die(mysql_error());
while($result && $row=mysql_fetch_array($result))
{
$idEleve = $row['idEleve']; $nomEleve = $row['nom'];
$presence_mat_t1 = isset($listeAbsences["$idEleve"]['mat_t1'])?0:1;
$presence_mat_t2 = isset($listeAbsences["$idEleve"]['mat_t2'])?0:1;
$presence_amidi_t1 = isset($listeAbsences["$idEleve"]['amidi_t1'])?0:1;
$presence_amidi_t2 = isset($listeAbsences["$idEleve"]['amidi_t2'])?0:1;
//
// Nouvel enregistrement ou Mise à jour
if ($mode_ajout==true){
$sql="INSERT INTO assiduite SET date='".$date."', idEleve='".$idEleve."',
presence_mat_t1='".$presence_mat_t1."',
presence_mat_t2='".$presence_mat_t2."',
presence_amidi_t1='".$presence_amidi_t1."',
presence_amidi_t2='".$presence_amidi_t2."',
nomProf_mat_t1 = '".$nomProf_mat_t1."',
nomProf_mat_t2 = '".$nomProf_mat_t2."',
nomProf_amidi_t1 = '".$nomProf_amidi_t1."',
nomProf_amidi_t2 = '".$nomProf_amidi_t2."',
nomMatiere_mat_t1 = '".$nomMatiere_mat_t1."',
nomMatiere_mat_t2 = '".$nomMatiere_mat_t2."',
nomMatiere_amidi_t1 = '".$nomMatiere_amidi_t1."',
nomMatiere_amidi_t2 = '".$nomMatiere_amidi_t2."';";
} else {
$sql="UPDATE assiduite SET
presence_mat_t1='".$presence_mat_t1."',
presence_mat_t2='".$presence_mat_t2."',
presence_amidi_t1='".$presence_amidi_t1."',
presence_amidi_t2='".$presence_amidi_t2."',
nomProf_mat_t1 = '".$nomProf_mat_t1."',
nomProf_mat_t2 = '".$nomProf_mat_t2."',
nomProf_amidi_t1 = '".$nomProf_amidi_t1."',
nomProf_amidi_t2 = '".$nomProf_amidi_t2."',
nomMatiere_mat_t1 = '".$nomMatiere_mat_t1."',
nomMatiere_mat_t2 = '".$nomMatiere_mat_t2."',
nomMatiere_amidi_t1 = '".$nomMatiere_amidi_t1."',
nomMatiere_amidi_t2 = '".$nomMatiere_amidi_t2."'
WHERE date='".$date."' AND idEleve='".$idEleve."';";
}
//
//echo $sql;
if (!@mysql_query($sql)) $message .= "<li>".$nomEleve." => Erreur : ".mysql_error()."</li>";
}
if (empty($message)) $message = "Enregistrement effectué avec succès";
else $message = "<p>Les Erreurs suivantes sont rencontrées :</ul>" . $message . "</ul></p>";
}
}
// crée la liste des classes
$listeClasses = "";
$sql = "SELECT DISTINCT idClasse FROM eleve ORDER BY idClasse;";
$result = mysql_query($sql) or die(mysql_error());
while($result && $row=mysql_fetch_array($result))
{
$selected = $row['idClasse']==$idClasse? " selected " : "";
$listeClasses .= "<option value=\"".$row['idClasse']."\" ".$selected." >".$row['idClasse']."</option>";
}
// crée la liste des élèves de la classe sélectionnée
$listeAssiduiteEleves = "";
if (isset($idClasse) && isset($date))
{
// on fait une jointure externe à gauche du côté de la table client vers la table assiduité
// pour afficher tous les élèves de la classe même si les données de présence sont NULL (cas nouvelle saisie)
$sql = "SELECT a.*, total_ha.*, e.*
FROM eleve e LEFT OUTER JOIN assiduite a ON e.idEleve=a.idEleve AND a.date=date('".$date."')
LEFT OUTER JOIN total_heures_absence total_ha ON e.idEleve=total_ha.idEleve
WHERE e.idClasse = '".$idClasse."'
ORDER BY e.nom, e.prenom";
//echo $sql;
$result = mysql_query($sql) or die(mysql_error());
while($result && $row=mysql_fetch_array($result))
{
// si les données d'assiduité sont NULL (surtout la date) alors il s'agit d'une nouvelle feuille de présence
// sinon affiche l'absence sous 4 tranches horaires : 2 le matin(mat_t1 et mat_t2) et 2 l'après-midi(amidi_t1 et amidi_t2)
if (is_null($row["date"])) $mode_ajout = true; else $mode_ajout = false;
// stat du total des nbre_heures_absence
$nbre_heures_absence = $row['nbre_heures_absence'];
//
$nomProf_mat_t1 = $row['nomProf_mat_t1'];
$nomProf_mat_t2 = $row['nomProf_mat_t2'];
$nomProf_amidi_t1 = $row['nomProf_amidi_t1'];
$nomProf_amidi_t2 = $row['nomProf_amidi_t2'];
//
$nomMatiere_mat_t1 = $row['nomMatiere_mat_t1'];
$nomMatiere_mat_t2 = $row['nomMatiere_mat_t2'];
$nomMatiere_amidi_t1 = $row['nomMatiere_amidi_t1'];
$nomMatiere_amidi_t2 = $row['nomMatiere_amidi_t2'];
//
$mat_t1_checked = $row['presence_mat_t1']!=1 && !is_null($row['presence_mat_t1']) ? " checked " : "";
$mat_t2_checked = $row['presence_mat_t2']!=1 && !is_null($row['presence_mat_t2']) ? " checked " : "";
$amidi_t1_checked = $row['presence_amidi_t1']!=1 && !is_null($row['presence_amidi_t1']) ? " checked " : "";
$amidi_t2_checked = $row['presence_amidi_t2']!=1 && !is_null($row['presence_amidi_t2']) ? " checked " : "";
//
$listeAssiduiteEleves .= "<tr><td>".$row['nom']." ".$row['prenom']."</td>
<td><input type=\"checkbox\" name=\"absences[".$row['idEleve']."][mat_t1]\" ".$mat_t1_checked." /> Absent(e)</td>
<td><input type=\"checkbox\" name=\"absences[".$row['idEleve']."][mat_t2]\" ".$mat_t2_checked." /> Absent(e)</td>
<td><input type=\"checkbox\" name=\"absences[".$row['idEleve']."][amidi_t1]\" ".$amidi_t1_checked." /> Absent(e)</td>
<td><input type=\"checkbox\" name=\"absences[".$row['idEleve']."][amidi_t2]\" ".$amidi_t2_checked." /> Absent(e)</td>
<td>" . $nbre_heures_absence . "</td></tr>";
}
}
// crée les listes des matières
$listeMatieres_mat_t1 = "";
$listeMatieres_mat_t2 = "";
$listeMatieres_amidi_t1 = "";
$listeMatieres_amidi_t2 = "";
$sql = "SELECT * FROM matiere ORDER BY nom;";
$result = mysql_query($sql) or die(mysql_error());
while($result && $row=mysql_fetch_array($result))
{
$selected = $row['nom']==$nomMatiere_mat_t1? " selected " : "";
$listeMatieres_mat_t1 .= "<option value=\"".$row['nom']."\" ".$selected." >".$row['nom']."</option>";
//
$selected = $row['nom']==$nomMatiere_mat_t2? " selected " : "";
$listeMatieres_mat_t2 .= "<option value=\"".$row['nom']."\" ".$selected." >".$row['nom']."</option>";
//
$selected = $row['nom']==$nomMatiere_amidi_t1? " selected " : "";
$listeMatieres_amidi_t1 .= "<option value=\"".$row['nom']."\" ".$selected." >".$row['nom']."</option>";
//
$selected = $row['nom']==$nomMatiere_amidi_t2? " selected " : "";
$listeMatieres_amidi_t2 .= "<option value=\"".$row['nom']."\" ".$selected." >".$row['nom']."</option>";
}
// crée les listes des profs
$listeProfs_mat_t1 = "";
$listeProfs_mat_t2 = "";
$listeProfs_amidi_t1 = "";
$listeProfs_amidi_t2 = "";
$sql = "SELECT * FROM prof ORDER BY nom;";
$result = mysql_query($sql) or die(mysql_error());
while($result && $row=mysql_fetch_array($result))
{
$selected = $row['nom']==$nomProf_mat_t1? " selected " : "";
$listeProfs_mat_t1 .= "<option value=\"".$row['nom']."\" ".$selected." >".$row['nom']."</option>";
//
$selected = $row['nom']==$nomProf_mat_t2? " selected " : "";
$listeProfs_mat_t2 .= "<option value=\"".$row['nom']."\" ".$selected." >".$row['nom']."</option>";
//
$selected = $row['nom']==$nomProf_amidi_t1? " selected " : "";
$listeProfs_amidi_t1 .= "<option value=\"".$row['nom']."\" ".$selected." >".$row['nom']."</option>";
//
$selected = $row['nom']==$nomProf_amidi_t2? " selected " : "";
$listeProfs_amidi_t2 .= "<option value=\"".$row['nom']."\" ".$selected." >".$row['nom']."</option>";
}
// fin de connexion
mysql_close();
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Gestion d'assiduité des élèves</title>
<link rel="stylesheet" type="text/css" href="calendrier.css">
<script type="text/javascript" src="calendrier.js"></script>
</head>
<body>
<h1>Gestion d'assiduité des élèves</h1>
<form name="form1" action="" method="get">
<table>
<tr>
<th>Classe :</th><td><select name="idClasse" onchange="form1.submit();" value="<?php echo $idClasse; ?>" >
<option value="" ></option>
<?php echo $listeClasses; ?>
</select></td>
<th>Date : </th><td><input type="text" id="dateLib" name="date" value="<?php echo $date; ?>" style="width:180px"
onfocus="visuCal(this,{'format' : '%a-%m-%j'})" onblur="masqueCal(this);" />
<input type="submit" name="action" value="Valider la date" />
</td>
</tr>
</table>
<hr />
<?php if ($mode_ajout==true) { ?>
<h2>Nouvelle Feuille de présence du <?php echo date("d-m-Y",strtotime($date)); ?></h2>
<p>Veuillez cocher une case pour désigner une absence.<br />
Pour ajouter cette feuille dans la base de données, appuyer sur le bouton Enregistrer</p>
<?php } else { ?>
<h2>Feuille de présence existante du <?php echo date("d-m-Y",strtotime($date)); ?></h2>
<p>Veuillez cocher une case pour désigner une absence.<br />
Vous pouvez modifie cette feuille puis appuyer sur le bouton Enregistrer pour mettre à jour la base de données.</p>
<?php } ?>
<table border="1">
<tr><th>Nom - Prenom</th><th>8h00 - 10h00</th><th>10h00 - 12h00</th><th>13h30 - 15h30</th><th>15h30 - 17h30</th><th>Total heures d'absences</th></tr>
<?php echo $listeAssiduiteEleves; ?>
<tr>
<th>Prof : </th>
<td><select name="nomProf_mat_t1" value="<?php echo $nomProf_mat_t1; ?>" >
<option value="" ></option>
<?php echo $listeProfs_mat_t1; ?>
</select></td>
<td><select name="nomProf_mat_t2" value="<?php echo $nomProf_mat_t2; ?>" >
<option value="" ></option>
<?php echo $listeProfs_mat_t2; ?>
</select></td>
<td><select name="nomProf_amidi_t1" value="<?php echo $nomProf_amidi_t1; ?>" >
<option value="" ></option>
<?php echo $listeProfs_amidi_t1; ?>
</select></td>
<td><select name="nomProf_amidi_t2" value="<?php echo $nomProf_amidi_t2; ?>" >
<option value="" ></option>
<?php echo $listeProfs_amidi_t2; ?>
</select></td>
</tr>
<tr>
<th>Matière : </th>
<td><select name="nomMatiere_mat_t1" value="<?php echo $nomMatiere_mat_t1; ?>" >
<option value="" ></option>
<?php echo $listeMatieres_mat_t1; ?>
</select></td>
<td><select name="nomMatiere_mat_t2" value="<?php echo $nomMatiere_mat_t2; ?>" >
<option value="" ></option>
<?php echo $listeMatieres_mat_t2; ?>
</select></td>
<td><select name="nomMatiere_amidi_t1" value="<?php echo $nomMatiere_amidi_t1; ?>" >
<option value="" ></option>
<?php echo $listeMatieres_amidi_t1; ?>
</select></td>
<td><select name="nomMatiere_amidi_t2" value="<?php echo $nomMatiere_amidi_t2; ?>" >
<option value="" ></option>
<?php echo $listeMatieres_amidi_t2; ?>
</select></td>
</tr>
</table>
<input type="hidden" name="mode_ajout" value="<?php echo $mode_ajout; ?>" />
<input type="submit" name="action" value="Enregistrer" />
</form>
<div id="message"><?php echo isset($message)?$message:''; ?></div>
</body>
</html>
Pour rappel voici la dernière mise à jour de la base de données:
-- phpMyAdmin SQL Dump
-- version 3.3.9
-- http://www.phpmyadmin.net
--
-- Serveur: localhost
-- Généré le : Ven 22 Avril 2011 à 10:15
-- Version du serveur: 5.5.8
-- Version de PHP: 5.3.4
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
--
-- Base de données: `bd_eleves`
--
-- --------------------------------------------------------
--
-- Structure de la table `assiduite`
--
CREATE TABLE IF NOT EXISTS `assiduite` (
`date` date NOT NULL,
`idEleve` int(11) NOT NULL,
`presence_mat_t1` int(11) NOT NULL DEFAULT '1',
`presence_mat_t2` int(11) NOT NULL DEFAULT '1',
`presence_amidi_t1` int(1) NOT NULL DEFAULT '1',
`presence_amidi_t2` int(11) NOT NULL DEFAULT '1',
`nomProf_mat_t1` varchar(50) NOT NULL,
`nomProf_mat_t2` varchar(50) NOT NULL,
`nomProf_amidi_t1` varchar(50) NOT NULL,
`nomProf_amidi_t2` varchar(50) NOT NULL,
`nomMatiere_mat_t1` varchar(50) NOT NULL,
`nomMatiere_mat_t2` varchar(50) NOT NULL,
`nomMatiere_amidi_t1` varchar(50) NOT NULL,
`nomMatiere_amidi_t2` varchar(50) NOT NULL,
UNIQUE KEY `idAssiduite` (`date`,`idEleve`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
--
-- Contenu de la table `assiduite`
--
INSERT INTO `assiduite` (`date`, `idEleve`, `presence_mat_t1`, `presence_mat_t2`, `presence_amidi_t1`, `presence_amidi_t2`, `nomProf_mat_t1`, `nomProf_mat_t2`, `nomProf_amidi_t1`, `nomProf_amidi_t2`, `nomMatiere_mat_t1`, `nomMatiere_mat_t2`, `nomMatiere_amidi_t1`, `nomMatiere_amidi_t2`) VALUES
('2011-04-18', 1, 1, 1, 1, 1, 'Mme. La Prof', 'Mme. La Prof', 'Mme. La Prof', 'Mme. La Prof', 'Anglais', 'Anglais', 'Anglais', 'Anglais'),
('2011-04-18', 2, 1, 1, 1, 1, 'Mme. La Prof', 'Mme. La Prof', 'Mme. La Prof', 'Mme. La Prof', 'Anglais', 'Anglais', 'Anglais', 'Anglais'),
('2011-04-18', 3, 0, 0, 0, 0, 'Mme. La Prof', 'Mme. La Prof', 'Mme. La Prof', 'Mme. La Prof', 'Anglais', 'Anglais', 'Anglais', 'Anglais'),
('2011-04-18', 4, 1, 1, 0, 1, 'Mr. Le Prof', 'Mr. Le Prof', 'Mme. La Prof', 'Mme. La Prof', 'Programmation', 'Programmation', 'Anglais', 'Anglais'),
('2011-04-18', 5, 1, 1, 0, 1, 'Mr. Le Prof', 'Mr. Le Prof', 'Mme. La Prof', 'Mme. La Prof', 'Programmation', 'Programmation', 'Anglais', 'Anglais'),
('2011-04-20', 1, 1, 1, 1, 1, 'Mr. Le Prof', 'Mr. Le Prof', 'Mme. La Prof', 'Mme. La Prof', 'Programmation', 'Programmation', 'Anglais', 'Anglais'),
('2011-04-20', 2, 1, 1, 1, 1, 'Mr. Le Prof', 'Mr. Le Prof', 'Mme. La Prof', 'Mme. La Prof', 'Programmation', 'Programmation', 'Anglais', 'Anglais'),
('2011-04-20', 3, 0, 0, 0, 0, 'Mr. Le Prof', 'Mr. Le Prof', 'Mme. La Prof', 'Mme. La Prof', 'Programmation', 'Programmation', 'Anglais', 'Anglais');
-- --------------------------------------------------------
--
-- Structure de la table `eleve`
--
CREATE TABLE IF NOT EXISTS `eleve` (
`idEleve` int(11) NOT NULL AUTO_INCREMENT,
`nom` varchar(20) NOT NULL,
`prenom` varchar(20) NOT NULL,
`idClasse` varchar(20) DEFAULT NULL,
PRIMARY KEY (`idEleve`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=6 ;
--
-- Contenu de la table `eleve`
--
INSERT INTO `eleve` (`idEleve`, `nom`, `prenom`, `idClasse`) VALUES
(1, 'LABELLE', 'Aline', 'BTS-INF-A1'),
(2, 'BONHOMME', 'Olivier', 'BTS-INF-A1'),
(3, 'JAMAISLA', 'Stéphane', 'BTS-INF-A1'),
(4, 'RENAULT', 'Pascal', 'BTS-INF-A2'),
(5, 'DAHOU', 'Géraldine', 'BTS-INF-A2');
-- --------------------------------------------------------
--
-- Structure de la table `matiere`
--
CREATE TABLE IF NOT EXISTS `matiere` (
`nom` varchar(50) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
--
-- Contenu de la table `matiere`
--
INSERT INTO `matiere` (`nom`) VALUES
('Programmation'),
('Anglais');
-- --------------------------------------------------------
--
-- Doublure de structure pour la vue `nbre_heures_absence`
--
CREATE TABLE IF NOT EXISTS `nbre_heures_absence` (
`date` date
,`idEleve` int(11)
,`nbre_heures_absence` decimal(37,0)
);
-- --------------------------------------------------------
--
-- Doublure de structure pour la vue `nbre_heures_presence`
--
CREATE TABLE IF NOT EXISTS `nbre_heures_presence` (
`date` date
,`idEleve` int(11)
,`nbre_heures_presence` decimal(36,0)
);
-- --------------------------------------------------------
--
-- Structure de la table `prof`
--
CREATE TABLE IF NOT EXISTS `prof` (
`nom` varchar(50) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
--
-- Contenu de la table `prof`
--
INSERT INTO `prof` (`nom`) VALUES
('Mr. Le Prof'),
('Mme. La Prof');
-- --------------------------------------------------------
--
-- Doublure de structure pour la vue `total_heures_absence`
--
CREATE TABLE IF NOT EXISTS `total_heures_absence` (
`idEleve` int(11)
,`nbre_heures_absence` decimal(37,0)
);
-- --------------------------------------------------------
--
-- Doublure de structure pour la vue `total_heures_presence`
--
CREATE TABLE IF NOT EXISTS `total_heures_presence` (
`idEleve` int(11)
,`nbre_heures_presence` decimal(36,0)
);
-- --------------------------------------------------------
--
-- Structure de la vue `nbre_heures_absence`
--
DROP TABLE IF EXISTS `nbre_heures_absence`;
CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `nbre_heures_absence` AS select `assiduite`.`date` AS `date`,`assiduite`.`idEleve` AS `idEleve`,sum((8 - ((((`assiduite`.`presence_mat_t1` * 2) + (`assiduite`.`presence_mat_t2` * 2)) + (`assiduite`.`presence_amidi_t1` * 2)) + (`assiduite`.`presence_amidi_t2` * 2)))) AS `nbre_heures_absence` from `assiduite` group by `assiduite`.`date`,`assiduite`.`idEleve`;
-- --------------------------------------------------------
--
-- Structure de la vue `nbre_heures_presence`
--
DROP TABLE IF EXISTS `nbre_heures_presence`;
CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `nbre_heures_presence` AS select `assiduite`.`date` AS `date`,`assiduite`.`idEleve` AS `idEleve`,sum(((((`assiduite`.`presence_mat_t1` * 2) + (`assiduite`.`presence_mat_t2` * 2)) + (`assiduite`.`presence_amidi_t1` * 2)) + (`assiduite`.`presence_amidi_t2` * 2))) AS `nbre_heures_presence` from `assiduite` group by `assiduite`.`date`,`assiduite`.`idEleve`;
-- --------------------------------------------------------
--
-- Structure de la vue `total_heures_absence`
--
DROP TABLE IF EXISTS `total_heures_absence`;
CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `total_heures_absence` AS select `assiduite`.`idEleve` AS `idEleve`,sum((8 - ((((`assiduite`.`presence_mat_t1` * 2) + (`assiduite`.`presence_mat_t2` * 2)) + (`assiduite`.`presence_amidi_t1` * 2)) + (`assiduite`.`presence_amidi_t2` * 2)))) AS `nbre_heures_absence` from `assiduite` group by `assiduite`.`idEleve`;
-- --------------------------------------------------------
--
-- Structure de la vue `total_heures_presence`
--
DROP TABLE IF EXISTS `total_heures_presence`;
CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `total_heures_presence` AS select `assiduite`.`idEleve` AS `idEleve`,sum(((((`assiduite`.`presence_mat_t1` * 2) + (`assiduite`.`presence_mat_t2` * 2)) + (`assiduite`.`presence_amidi_t1` * 2)) + (`assiduite`.`presence_amidi_t2` * 2))) AS `nbre_heures_presence` from `assiduite` group by `assiduite`.`idEleve`;
DROP TABLE IF EXISTS `total_heures_absence`;
CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `total_heures_absence` AS SELECT `assiduite`.`idEleve` AS `idEleve`,sum((8 - ((((`assiduite`.`presence_mat_t1` * 2) + (`assiduite`.`presence_mat_t2` * 2)) + (`assiduite`.`presence_amidi_t1` * 2)) + (`assiduite`.`presence_amidi_t2` * 2)))) AS `nbre_heures_absence` FROM `assiduite` GROUP BY `assiduite`.`idEleve`;
-- --------------------------------------------------------
--
-- Structure de la vue `total_heures_presence`
--
DROP TABLE IF EXISTS `total_heures_presence`;
CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `total_heures_presence` AS SELECT `assiduite`.`idEleve` AS `idEleve`,sum(((((`assiduite`.`presence_mat_t1` * 2) + (`assiduite`.`presence_mat_t2` * 2)) + (`assiduite`.`presence_amidi_t1` * 2)) + (`assiduite`.`presence_amidi_t2` * 2))) AS `nbre_heures_presence` FROM `assiduite` GROUP BY `assiduite`.`idEleve`;
et maintenant que j'ai les commandes pour les nombres d'heure il me reste plus qu'à mettre un bouton qui exécute la commande ??
$sql = "SELECT * FROM eleve";
Et pour les vues de calcul tu peux aussi faire une requête de sélection dessus car une VUE est considérée comme une table, voici comment sélectionner les absences par jour par élève donné :
$sql = "SELECT * FROM `nbre_heures_absence` WHERE date = '" . $date . "' AND idEleve = '". $idEleve. "' ";