gestion absences/presences en php

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

09 mai 2011, 10:19

finalement pour l'archivage je vais rajouter juste un champ "année" (ou année scolaire) dans "eleve" (ou une table je sais pas ce qui est le mieux ) que l'on modifiera de 1ére à 2éme année ou bien "ancien élèves" comme ça le directeur change si l'éléve passe en 2nde année ou bien si il redouble. Donc il faudrait que j'archive les élèves qui seront dans la catégorie "ancien élèves" sans supprimer pour autant les donnée d'assiduite mais le hic c'est que je voudrais savoir si l'élève a fait son bts en 2 ou 3 ans et sur quelle année pour que quand je cherche dans les archive çela me facilite la tâche.
Est-ce possible?
Tu pourrais ajouter une colonne dans la table "eleve" nommée "nbre_redoublement" où tu mettrais le nombre de redoublement d'un élève comme ça tu saurais en combien d'années un élève a suivi son BTS (2 ans pour le BTS normal + le nombre de redoublement). Tu pourrais aussi ajouter une seconde colonne que tu pourrais nommer "resultat" et qui aurait comme valeurs : "réussite" si l'élève a obtenu son BTS ou "échec" pour l'échec de l'élève (la valeur par défaut reste vide ou "en cours de formation").
Tu pourrais même ajouter une colonne "date_fin_formation" pour enregistrer la date de fin de formation par élève.
De plus j'aimerais ajouter dans ma "consultation d'assiduité" un bouton qui me diras les jours d'absences d'un élèves et ses heures d'absences pour ces jours là, y a t'il une requête SQL qui pourrait faire ça ?
Je te rappelle qu'on a déjà fait cette requête qu'on a créée sous forme de VUE nommée `nbre_heures_absence`:
CREATE 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`;
Donc, pour afficher le nombres d'heures d'absence par jour pour un élève il suffit de faire un SELECT sur cette vue avec un WHERE qui extrait simplement les enregistrement concernant un élève donné. Comme ça par exemple:
// idEleve sélectionné dans le formulaire
$idEleve = isset($_GET['idEleve']) && !empty($_GET['idEleve']) ? $_GET['idEleve'] : null;

// requête SQL: Nombre d'heures d'absence par jour pour l'élève $idEleve
$sql = "SELECT * FROM  `nbre_heures_absence` WHERE  idEleve = '". $idEleve . "' ORDER BY date";
et autre petit souci :
j'ai ajouter des pages pour ajouter et supprimer les profs, l'ajout marche parfaitement mais pas la suppression pourtant j'ai repris comme pour l'élève :
T'as oublié de mettre la variable $nom entre guillemets dans la requête DELETE car le nom est une chaine de caractères,
Correction:
$sql = 'DELETE FROM prof WHERE nom="' . $nom '" '.
Pour ce qui est de la modification d'un élève, il faut exécuter une requête UPDATE. Voici l'algorithme de la modif comme celui de la suppression:
1. Avoir afficher les données d'un élève en exécutant une requête: SELECT * FROM eleve WHERE idEleve = $idEleve
2. Quand l'utilisateur aurait modifié certaines zones de données (excepté l'idEleve qui sera affiché en lecture seule) il demandera l'enregistrement des modifications en appuyant sur un bouton spécifique.
3. Quand l'action déclenchée est : L'enregistrement des modifications, le programme PHP exécutera la requête:
UPDATE eleve SET nom="$nom", prenom="$prenom" WHERE idEleve=$idEleve
Tu complèteras cette requête en ajoutant tous les champs que tu souhaite modifier. Le champ idEleve est la clé primaire, il est donc interdit de la modifier, elle sera affichée sur le formulaire dans une zone input cachée (hidden) nommée idEleve ou dans un input de type text avec l'attribut: disabled ou readonly. C'est normal sinon on ne pourra pas faire l'Update qui dépond du WHERE idEleve=$idEleve.
Toutes les variables : $idEleve, $nom, $nom, ... proviennent donc du formulaire de modification.

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


ps: Affrontez moi dans l'arène

Eléphant du PHP | 150 Messages

09 mai 2011, 20:27

Re: gestion absences/presences en php

Messagede sadeq le 09 Mai 2011, 10:19

cobra2930 a écrit:finalement pour l'archivage je vais rajouter juste un champ "année" (ou année scolaire) dans "eleve" (ou une table je sais pas ce qui est le mieux ) que l'on modifiera de 1ére à 2éme année ou bien "ancien élèves" comme ça le directeur change si l'éléve passe en 2nde année ou bien si il redouble. Donc il faudrait que j'archive les élèves qui seront dans la catégorie "ancien élèves" sans supprimer pour autant les donnée d'assiduite mais le hic c'est que je voudrais savoir si l'élève a fait son bts en 2 ou 3 ans et sur quelle année pour que quand je cherche dans les archive çela me facilite la tâche.
Est-ce possible?


Tu pourrais ajouter une colonne dans la table "eleve" nommée "nbre_redoublement" où tu mettrais le nombre de redoublement d'un élève comme ça tu saurais en combien d'années un élève a suivi son BTS (2 ans pour le BTS normal + le nombre de redoublement). Tu pourrais aussi ajouter une seconde colonne que tu pourrais nommer "resultat" et qui aurait comme valeurs : "réussite" si l'élève a obtenu son BTS ou "échec" pour l'échec de l'élève (la valeur par défaut reste vide ou "en cours de formation").
Tu pourrais même ajouter une colonne "date_fin_formation" pour enregistrer la date de fin de formation par élève.

cobra2930 a écrit:De plus j'aimerais ajouter dans ma "consultation d'assiduité" un bouton qui me diras les jours d'absences d'un élèves et ses heures d'absences pour ces jours là, y a t'il une requête SQL qui pourrait faire ça ?


Je te rappelle qu'on a déjà fait cette requête qu'on a créée sous forme de VUE nommée `nbre_heures_absence`:
Syntaxe: [ Télécharger ] [ Masquer ]
Code sql
CREATE 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`;

Donc, pour afficher le nombres d'heures d'absence par jour pour un élève il suffit de faire un SELECT sur cette vue avec un WHERE qui extrait simplement les enregistrement concernant un élève donné. Comme ça par exemple:
Syntaxe: [ Télécharger ] [ Masquer ]
Code php
// idEleve sélectionné dans le formulaire
$idEleve = isset($_GET['idEleve']) && !empty($_GET['idEleve']) ? $_GET['idEleve'] : null;

// requête SQL: Nombre d'heures d'absence par jour pour l'élève $idEleve
$sql = "SELECT * FROM `nbre_heures_absence` WHERE idEleve = '". $idEleve . "' ORDER BY date";
ce n'est pas ça du tout que je veux : en faite je voudrais que cela affiche les jours d'absences :
exemple : l'élève "test" a été absent le : 01 mai 2011 pendant 8h.
Tu veux mourir? OK!! Mais pas dans ma voiture, alors attache ta ceinture !! :pouce:
Tony :boire9:

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

09 mai 2011, 21:19

ce n'est pas ça du tout que je veux : en faite je voudrais que cela affiche les jours d'absences :
exemple : l'élève "test" a été absent le : 01 mai 2011 pendant 8h.
Tu dois être fatigué, car la requête que je t'ai rappelée et qu'on a déjà faite donne exactement ce que tu dis vouloir afficher. Je te la rappelle :
<?php
// connexion à la base de données
mysql_select_db("bd_eleves", @mysql_connect("localhost","root","")) or die(mysql_error());

// idEleve sélectionné dans le formulaire
$idEleve = isset($_GET['idEleve']) && !empty($_GET['idEleve']) ? $_GET['idEleve'] : null;

// requête SQL: Nombre d'heures d'absence par jour pour l'élève $idEleve
$sql = "SELECT idEleve, date,  nbre_heures_absence FROM  `nbre_heures_absence` WHERE  idEleve = '". $idEleve . "' ORDER BY date";
$result = mysql_query($sql);
while ($result && $row = mysql_fetch_array($result))
{
   // afficher les heures d'absence de l'élève idEleve par jour
    echo "<p>l'élève " . $row['idEleve']. " a été absent le : " . date('d M Y', strtotime($row['date'])). "  pendant " . $row['nbre_heures_absence']. " h</p>";
}
?>
Pour tester taper l'url locale suivante : http://localhost/gestionEleves/test.php?idEleve=3
Pour cet élève voici le résultat dans ma base :
l'élève 3 a été absent le : 18 Apr 2011 pendant 8 h
l'élève 3 a été absent le : 20 Apr 2011 pendant 8 h
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Eléphant du PHP | 150 Messages

09 mai 2011, 22:34

excuse mai je ne voyais pas du tout comment faire.et la ça marche mais cela s'affiche en haut du site à cause de l'echo et je n'arrive pas a y transformer avec "$message=" comme les précédent :
if (isset($_GET['action_nb_absence_jour']) && !empty($idEleve) && !empty($date))
{
	// requête SQL: Nombre d'heures d'absence par jour pour l'élève $idEleve
	$sql = "SELECT idEleve, date,  nbre_heures_absence FROM  `nbre_heures_absence` WHERE  idEleve = '". $idEleve . "' ORDER BY date";
	$result = mysql_query($sql);
	while ($result && $row = mysql_fetch_array($result))
	{
	   // afficher les heures d'absence de l'élève idEleve par jour
	 //  $message = 
		echo "<p>l'élève " . $row['idEleve']. " a été absent le : " . date('d M Y', strtotime($row['date'])). "  pendant " . $row['nbre_heures_absence']. " h</p>";
	// fin php
	}
}
et j'aimerais changer le premier idEleve pour que sa affiche "l'élève $row['nom'] mais sa ne fonctionne pas même en mettant $nom en variable çela ne fonctionne pas.
Tu veux mourir? OK!! Mais pas dans ma voiture, alors attache ta ceinture !! :pouce:
Tony :boire9:

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

09 mai 2011, 23:06

Tu mets $message= à la place de echo.

Et pour le nom de l'élève il se trouve dans la table eleve tu dois joindre donc la table eleve dans la requête SELECT la relation est le champ idEleve. Comme ça:
if (isset($_GET['action_nb_absence_jour']) && !empty($idEleve) && !empty($date))
{
        // requête SQL: Nombre d'heures d'absence par jour pour l'élève $idEleve
        $sql = "SELECT t1.* , t2.*  FROM  `nbre_heures_absence` t1  join `eleve` t2 ON t1.idEleve=t2.idEleve WHERE  t1.idEleve = '". $idEleve . "' ORDER BY t1.date";
        $result = mysql_query($sql);
        while ($result && $row = mysql_fetch_array($result))
        {
           // afficher les heures d'absence de l'élève par jour
         $message = "<p>l'élève " . $row['nom']. " a été absent le : " . date('d M Y', strtotime($row['date'])). "  pendant " . $row['nbre_heures_absence']. " h</p>";
        // fin php
        }
}
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Eléphant du PHP | 150 Messages

09 mai 2011, 23:14

pour la fonction "supprimer" ce que tu m'as donner :
$sql = 'DELETE FROM matiere WHERE nom="' . $nom '" '.
me met une erreur (même en rajoutant ";" a la fin) :
( ! ) Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING in C:\wamp\www\projet\site classe\supprimer_matiere.php on line 25

tendis que celle la :
$sql = 'DELETE FROM prof WHERE nom=' . $nom;
Erreur SQL !DELETE FROM prof WHERE nom=angor
Unknown column 'angor' in 'where clause'
Tu veux mourir? OK!! Mais pas dans ma voiture, alors attache ta ceinture !! :pouce:
Tony :boire9:

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

09 mai 2011, 23:57

T'es pas réveillé aujourd'hui. Il manque un point de concaténation après $nom :lol:

Correction:
$sql = 'DELETE FROM matiere WHERE nom="' . $nom . '" ';
Allez il te reste 3 minutes pour aller au dodo :mrgreen:
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Eléphant du PHP | 150 Messages

10 mai 2011, 08:27

Tu mets $message= à la place de echo.

Et pour le nom de l'élève il se trouve dans la table eleve tu dois joindre donc la table eleve dans la requête SELECT la relation est le champ idEleve. Comme ça:
if (isset($_GET['action_nb_absence_jour']) && !empty($idEleve) && !empty($date))
{
        // requête SQL: Nombre d'heures d'absence par jour pour l'élève $idEleve
        $sql = "SELECT t1.* , t2.*  FROM  `nbre_heures_absence` t1  join `eleve` t2 ON t1.idEleve=t2.idEleve WHERE  t1.idEleve = '". $idEleve . "' ORDER BY t1.date";
        $result = mysql_query($sql);
        while ($result && $row = mysql_fetch_array($result))
        {
           // afficher les heures d'absence de l'élève par jour
         $message = "<p>l'élève " . $row['nom']. " a été absent le : " . date('d M Y', strtotime($row['date'])). "  pendant " . $row['nbre_heures_absence']. " h</p>";
        // fin php
        }
}
en utilisant ce code on ne voit que ça dernière absence tendis qu'avec "echo" je les voit toutes.et Pourquoi suis-je obliger de sélectionner une date pour voir toutes ses absences alors qu'il utilise pas du tout la date que je sélectionne?


edit : voici ce que l'on voit :
l'élève FREMANTEAU a été absent le : 04 Oct 2010 pendant 8 h

l'élève FREMANTEAU a été absent le : 05 Oct 2010 pendant 0 h

l'élève FREMANTEAU a été absent le : 11 Oct 2010 pendant 0 h

l'élève FREMANTEAU a été absent le : 12 Oct 2010 pendant 0 h

l'élève FREMANTEAU a été absent le : 18 Oct 2010 pendant 2 h

l'élève FREMANTEAU a été absent le : 19 Oct 2010 pendant 0 h

l'élève FREMANTEAU a été absent le : 25 Oct 2010 pendant 8 h

l'élève FREMANTEAU a été absent le : 26 Oct 2010 pendant 8 h

l'élève FREMANTEAU a été absent le : 02 Nov 2010 pendant 0 h

l'élève FREMANTEAU a été absent le : 08 Nov 2010 pendant 0 h

l'élève FREMANTEAU a été absent le : 09 Nov 2010 pendant 0 h

l'élève FREMANTEAU a été absent le : 15 Nov 2010 pendant 0 h

l'élève FREMANTEAU a été absent le : 16 Nov 2010 pendant 0 h

l'élève FREMANTEAU a été absent le : 22 Nov 2010 pendant 8 h

l'élève FREMANTEAU a été absent le : 23 Nov 2010 pendant 0 h

l'élève FREMANTEAU a été absent le : 29 Nov 2010 pendant 8 h

l'élève FREMANTEAU a été absent le : 30 Nov 2010 pendant 8 h
donc il y a un petit problème c'est qu'il affiche les jour de présences.
Modifié en dernier par cobra2930 le 10 mai 2011, 09:52, modifié 1 fois.
Tu veux mourir? OK!! Mais pas dans ma voiture, alors attache ta ceinture !! :pouce:
Tony :boire9:

Eléphant du PHP | 150 Messages

10 mai 2011, 08:37

Pour ce qui est de la modification d'un élève, il faut exécuter une requête UPDATE. Voici l'algorithme de la modif comme celui de la suppression:
1. Avoir afficher les données d'un élève en exécutant une requête: SELECT * FROM eleve WHERE idEleve = $idEleve
2. Quand l'utilisateur aurait modifié certaines zones de données (excepté l'idEleve qui sera affiché en lecture seule) il demandera l'enregistrement des modifications en appuyant sur un bouton spécifique.
3. Quand l'action déclenchée est : L'enregistrement des modifications, le programme PHP exécutera la requête:
UPDATE eleve SET nom="$nom", prenom="$prenom" WHERE idEleve=$idEleve
Tu complèteras cette requête en ajoutant tous les champs que tu souhaite modifier. Le champ idEleve est la clé primaire, il est donc interdit de la modifier, elle sera affichée sur le formulaire dans une zone input cachée (hidden) nommée idEleve ou dans un input de type text avec l'attribut: disabled ou readonly. C'est normal sinon on ne pourra pas faire l'Update qui dépend du WHERE idEleve=$idEleve.
Toutes les variables : $idEleve, $nom, $nom, ... proviennent donc du formulaire de modification.

Voilà.
pour ce qui est de la modification j'aimerais qu'on sélectionne l'élève comme tu as dis, que l'on clique sur valider et que tout les champs apparaissent et pré remplis pour les champs qui sont déjà rempli comme le nom, le prénom etc, après que l'on modifie ce que l'on veut et que l'on clique sur modifier qui va lancer la requête SQL "UPDATE ..."
Tu veux mourir? OK!! Mais pas dans ma voiture, alors attache ta ceinture !! :pouce:
Tony :boire9:

Eléphant du PHP | 150 Messages

10 mai 2011, 09:19

j'ai bien rajouter mon champ "annee" dans "eleve" :
$annee = isset($_GET['annee']) && !empty($_GET['annee'])? $_GET['annee'] : null;

// crée la liste des Annees
$listeAnnees = "";
$sql = "SELECT DISTINCT annee FROM eleve ORDER BY annee;";
$result = mysql_query($sql) or die(mysql_error());
while($result && $row=mysql_fetch_array($result))
{
        $selected = $row['annee']==$annee? " selected " : "";
        $listeAnnees .= "<option value=\"".$row['annee']."\" ".$selected." >".$row['annee']."</option>";
}

sauf que maintenant j'aimerais que la classe s'affiche par rapport à l'année choisit.
Je pense qu'il faut ajouter un INNER JOIN mais aucune idée de comment relié les deux.



J'aimerais rajouter motif dans mon tableau d'absence, donc je pense qu'il faut que je le rajoute aussi dans la table "assiduite" mais comment faire pour rajouter ce champ au php?et avec une liste déroulante avec comme choix :
- personnel
- medical
- professionnel
- autres
Tu veux mourir? OK!! Mais pas dans ma voiture, alors attache ta ceinture !! :pouce:
Tony :boire9:

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

10 mai 2011, 19:14

en utilisant ce code on ne voit que ça dernière absence tendis qu'avec "echo" je les voit toutes.et Pourquoi suis-je obliger de sélectionner une date pour voir toutes ses absences alors qu'il utilise pas du tout la date que je sélectionne?
donc il y a un petit problème c'est qu'il affiche les jour de présences.
1. Pour afficher tous les messages il faut les concaténer et donc tu ajoute un point entre $message et le signe égal (.=)
2. Pour prendre en considération la date sélectionnée ($date) dans la requête il faut ajouter une condition sur la date dans la clause WHERE
3. Pour éviter d'afficher les dates de présence (celles où le nombre d'absences = à 0) il faut ajouter cette condition aussi dans le WHERE

Voici le corrigé:
if (isset($_GET['action_nb_absence_jour']) && !empty($idEleve) && !empty($date))
{
        // requête SQL: Nombre d'heures d'absence par jour pour l'élève $idEleve pour la date sélectionnée
        $sql = "SELECT t1.* , t2.*  FROM  `nbre_heures_absence` t1  join `eleve` t2 ON t1.idEleve=t2.idEleve 
                   WHERE  t1.idEleve = '". $idEleve . "'  AND  t1.date='" .$date. "'  AND t1.nbre_heures_absence >0 ";
        $result = mysql_query($sql);
        while ($result && $row = mysql_fetch_array($result))
        {
           // afficher les heures d'absence de l'élève par jour
         $message .= "<p>l'élève " . $row['nom']. " a été absent le : " . date('d M Y', strtotime($row['date'])). "  pendant " . $row['nbre_heures_absence']. " h</p>";
        // fin php
        }
}
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

10 mai 2011, 19:32

pour ce qui est de la modification j'aimerais qu'on sélectionne l'élève comme tu as dis, que l'on clique sur valider et que tout les champs apparaissent et pré remplis pour les champs qui sont déjà rempli comme le nom, le prénom etc, après que l'on modifie ce que l'on veut et que l'on clique sur modifier qui va lancer la requête SQL "UPDATE ..."
j'ai bien rajouter mon champ "annee" dans "eleve" :

sauf que maintenant j'aimerais que la classe s'affiche par rapport à l'année choisit.
Je pense qu'il faut ajouter un INNER JOIN mais aucune idée de comment relié les deux.



J'aimerais rajouter motif dans mon tableau d'absence, donc je pense qu'il faut que je le rajoute aussi dans la table "assiduite" mais comment faire pour rajouter ce champ au php?et avec une liste déroulante avec comme choix :
- personnel
- medical
- professionnel
- autres
Pour ces sujets je te laisse le soin de prendre le temps et le recul nécessaire pour les réaliser d'abord par rapport au programmes qu'on a réalisé précédemment car ça se ressemble. Puis je verrai après ce que tu as fait et on en discutera en conséquence.

Essaye de réaliser partie par partie car je vois que tu as tendance à vouloir réaliser plusieurs programmes en parallèle. Cette démarche ne te permettra pas de bien avancer dans ton apprentissage. chi va piano, va sano e va lontano.

Le but étant que tu comprennes les solutions qu'on a mis en place ensemble et que ça te permette d'apprendre plus au niveau SQL et PHP. Pour l'instant je sais que tu as encore des lacunes au niveau SQL, il faut donc réviser ce qu'on a fait dans les premiers programmes et surtout celui de l'assiduité.

En attendant que ça avance de ta part, je reste à l'écoute.
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Eléphant du PHP | 150 Messages

12 mai 2011, 08:29

en utilisant ce code on ne voit que ça dernière absence tendis qu'avec "echo" je les voit toutes.et Pourquoi suis-je obliger de sélectionner une date pour voir toutes ses absences alors qu'il utilise pas du tout la date que je sélectionne?
donc il y a un petit problème c'est qu'il affiche les jour de présences.
1. Pour afficher tous les messages il faut les concaténer et donc tu ajoute un point entre $message et le signe égal (.=)
2. Pour prendre en considération la date sélectionnée ($date) dans la requête il faut ajouter une condition sur la date dans la clause WHERE
3. Pour éviter d'afficher les dates de présence (celles où le nombre d'absences = à 0) il faut ajouter cette condition aussi dans le WHERE

Voici le corrigé:
if (isset($_GET['action_nb_absence_jour']) && !empty($idEleve) && !empty($date))
{
        // requête SQL: Nombre d'heures d'absence par jour pour l'élève $idEleve pour la date sélectionnée
        $sql = "SELECT t1.* , t2.*  FROM  `nbre_heures_absence` t1  join `eleve` t2 ON t1.idEleve=t2.idEleve 
                   WHERE  t1.idEleve = '". $idEleve . "'  AND  t1.date='" .$date. "'  AND t1.nbre_heures_absence >0 ";
        $result = mysql_query($sql);
        while ($result && $row = mysql_fetch_array($result))
        {
           // afficher les heures d'absence de l'élève par jour
         $message .= "<p>l'élève " . $row['nom']. " a été absent le : " . date('d M Y', strtotime($row['date'])). "  pendant " . $row['nbre_heures_absence']. " h</p>";
        // fin php
        }
}
cette correction ne marche pas du tout.elle ne m'affiche plus rien.
Tu veux mourir? OK!! Mais pas dans ma voiture, alors attache ta ceinture !! :pouce:
Tony :boire9:

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

13 mai 2011, 09:34

Désolé, ce programme écrit comme ça fonctionne chez moi et affiche effectivement le nombre d'absences pour un élève dans une date. Il m'affiche par exemple ça:
l'élève JAMAISLA a été absent le : 18 Apr 2011 pendant 8 h
quand je choisi la date : 2011/04/18 et l'élève n°3 qui est "JAMAISLA".

Un conseil: si un bout de programme ne fonctionne pas pour toi, il faut le déboguer, et pour cela il faut le tester à part dans un programme test.php et ajouter des echo des variables utilisées pour savoir l'état des valeurs à l'exécution et surtout la valeur de la requête SQL qu'on peut copier/coller sous PHPMyAdmin pour savoir si la requête fonctionne.

Voici un exemple modèle de test unitaire d'une partie du programme: test.php
<?php
// données d'entrée
//---- DEBUG ---
echo "<pre>"; print_r($_GET); echo "<pre>";
//----------------
$date =isset($_GET['date'])?$_GET['date']:null;
$idEleve = isset($_GET['idEleve'])?$_GET['idEleve']:null;
$message = "";

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


//--------------------- TEST DU PROGRAMME -------------
if (isset($_GET['action_nb_absence_jour']) && !empty($idEleve) && !empty($date))
{
        // requête SQL: Nombre d'heures d'absence par jour pour l'élève $idEleve pour la date sélectionnée
        $sql = "SELECT t1.* , t2.*  FROM  `nbre_heures_absence` t1  join `eleve` t2 ON t1.idEleve=t2.idEleve
                   WHERE  t1.idEleve = '". $idEleve . "'  AND  t1.date='" .$date. "'  AND t1.nbre_heures_absence >0 ";
//---- DEBUG ----
echo $sql;
//----------------
        $result = mysql_query($sql) or die(mysql_error());
        while ($result && $row = mysql_fetch_array($result))
        {
//---- DEBUG ---
echo "<pre>"; print_r($row); echo "<pre>";
//----------------
           // afficher les heures d'absence de l'élève par jour
         $message .= "<p>l'élève " . $row['nom']. " a été absent le : " . date('d M Y', strtotime($row['date'])). "  pendant " . $row['nbre_heures_absence']. " h</p>";
//---- DEBUG ----
echo $message;
//----------------
        }
}
//------------------------------------------
echo $message;
?>
Pour tester ce bout de code, il faut taper l'URL :

Code : Tout sélectionner

http://localhost/gestionEleves/test.php?action_nb_absence_jour=1&idEleve=3&date=2011/04/18
Les blocs de débogage sont précédés par le commentaire //---- DEBUG --- et permettent d'inspecter l'état des variables à l'exécution en les affichant sur le navigateur.

A+
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Eléphant du PHP | 150 Messages

13 mai 2011, 10:40

Désolé, ce programme écrit comme ça fonctionne chez moi et affiche effectivement le nombre d'absences pour un élève dans une date. Il m'affiche par exemple ça:
l'élève JAMAISLA a été absent le : 18 Apr 2011 pendant 8 h
quand je choisi la date : 2011/04/18 et l'élève n°3 qui est "JAMAISLA".

Un conseil: si un bout de programme ne fonctionne pas pour toi, il faut le déboguer, et pour cela il faut le tester à part dans un programme test.php et ajouter des echo des variables utilisées pour savoir l'état des valeurs à l'exécution et surtout la valeur de la requête SQL qu'on peut copier/coller sous PHPMyAdmin pour savoir si la requête fonctionne.

Voici un exemple modèle de test unitaire d'une partie du programme: test.php
<?php
// données d'entrée
//---- DEBUG ---
echo "<pre>"; print_r($_GET); echo "<pre>";
//----------------
$date =isset($_GET['date'])?$_GET['date']:null;
$idEleve = isset($_GET['idEleve'])?$_GET['idEleve']:null;
$message = "";

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


//--------------------- TEST DU PROGRAMME -------------
if (isset($_GET['action_nb_absence_jour']) && !empty($idEleve) && !empty($date))
{
        // requête SQL: Nombre d'heures d'absence par jour pour l'élève $idEleve pour la date sélectionnée
        $sql = "SELECT t1.* , t2.*  FROM  `nbre_heures_absence` t1  join `eleve` t2 ON t1.idEleve=t2.idEleve
                   WHERE  t1.idEleve = '". $idEleve . "'  AND  t1.date='" .$date. "'  AND t1.nbre_heures_absence >0 ";
//---- DEBUG ----
echo $sql;
//----------------
        $result = mysql_query($sql) or die(mysql_error());
        while ($result && $row = mysql_fetch_array($result))
        {
//---- DEBUG ---
echo "<pre>"; print_r($row); echo "<pre>";
//----------------
           // afficher les heures d'absence de l'élève par jour
         $message .= "<p>l'élève " . $row['nom']. " a été absent le : " . date('d M Y', strtotime($row['date'])). "  pendant " . $row['nbre_heures_absence']. " h</p>";
//---- DEBUG ----
echo $message;
//----------------
        }
}
//------------------------------------------
echo $message;
?>
Pour tester ce bout de code, il faut taper l'URL :

Code : Tout sélectionner

http://localhost/gestionEleves/test.php?action_nb_absence_jour=1&idEleve=3&date=2011/04/18
Les blocs de débogage sont précédés par le commentaire //---- DEBUG --- et permettent d'inspecter l'état des variables à l'exécution en les affichant sur le navigateur.

A+
alors j'ai essayer comme tu as dis de mettre la requête dans PHPMyAdmin et elle fonctionne correctement.

sinon j'ai testé ton "test.php" et je ne comprend pas trop comment debeuguer!
mais j'ai mis les debeug dans mon programme et cela m'affiche ça :

Code : Tout sélectionner

SELECT t1.* , t2.* FROM `nbre_heures_absence` t1 join `eleve` t2 ON t1.idEleve=t2.idEleve WHERE t1.idEleve = '2' AND t1.date='10-04-2010' AND t1.nbre_heures_absence >0

en cliquant sur le bouton "jours d'absences"

ta requête sql précédente marchait avec l'echo mais affichait aussi si il avait été absent pendant, j'ai bien vu que tu a rajouter "AND t1.nbre_heures_absence >0 "
mais je ne vois pas pourquoi ta nouvelle requête ne veux pas fonctionner chez moi...

ancienne requête :
$sql = "SELECT idEleve, date, nbre_heures_absence FROM `nbre_heures_absence` WHERE idEleve = '". $idEleve . "' ORDER BY date";
d'ailleur je réitére ma question : Est il possible de ne pas sélectionner la date pour avoir les jours d'absences?
Tu veux mourir? OK!! Mais pas dans ma voiture, alors attache ta ceinture !! :pouce:
Tony :boire9: