gestion des notes des élèves au lycée

sidibe
Invité n'ayant pas de compte PHPfrance

21 nov. 2013, 17:18

Je suis entrain de développer un site web portant sur la gestion des élèves, des matières, des notes et classe d'un lycée. Mon environnement de travail c'est php et mysql.
J'ai un problème au niveau de la gestion des notes et ma table note est constituée par les éléments suivants:
Matricule
Code_matiere
Date_note
Note
Type_note
la clé primaire de cette table est:Matricule, Code_matiere, Date_note.
Selon les règles de gestions de ce lycée chaque mois un élève est noté deux fois dans une matière c'est à dire note écrite et note orale.
voici mon code. ça ne marche pas du tout, veuilez m'aidez.
<html>
<head>
<title> CALCUL DE LA MOYNNE TRIMESTRIELLE DES ELEVES AU LYCEE</title>
</head>
<body bgcolor="chocolate">

<?php
$mat=$_POST['mat'];
$cod=$_POST['cod'];
$a=$_POST['a'];
$m=$_POST['m'];
$j=$_POST['j'];
$not=$_POST['not'];

echo"<center><font size='3'>";
//connexion au serveur
$maconnexion = mysql_connect("localhost","root","");
if($maconnexion == FALSE)
{
die ("la connexion a échoué");
}
else
{
echo("connexion reussie au serveur");
}
echo"<br><br>";

$sql=" SELECT Mari,NOM,PRENOM,Codmate,Libellemat,Note
FROM eleve,matiere,note
WHERE eleve.MATRICULE=note.Matri
AND matiere.Codmat=note.Codmate

$moyen_physiq_trimes = ($note1 + $note2 + $note3 + $note4 + $note5 + $note6)/6;
$moyen_chimi_trimes = ($note1 + $note2 + $note3 + $note4 + $note5 + $note6)/6;
$moyen_biologi_trimes = ($note1 + $note2 + $note3 + $note4 + $note5 + $note6)/6;
$moyen_françai_trimes = ($note1 + $note2 + $note3 + $note4 + $note5 + $note6)/6;
$moyen_philosophi_trimes = ($note1 + $note2 + $note3 + $note4 + $note5 + $note6)/6;
$moyen_economi_trimes = ($note1 + $note2 + $note3 + $note4 + $note5 + $note6)/6;
$moyen_anglais_trimes = ($note1 + $note2 + $note3 + $note4 + $note5 + $note6)/6;
$moyen_geographi_trimes = ($note1 + $note2 + $note3 + $note4 + $note5 + $note6)/6;
$moyen_histoire_trimes = ($note1 + $note2 + $note3 + $note4 + $note5 + $note6)/6;
$moyen_mathematiq_trimes = ($note1 + $note2 + $note3 + $note4 + $note5 + $note6)/6;
$moyen_general_trimestriel = ($moyen_physiq_trimes*3 + $moyen_chimi_trimes*2 + $moyen_biologi_trimes*1 + $moyen_françai_trimes*2 + $moyen_philosophi_trimes*1
+ $moyen_economi_trimes*1 + $moyen_anglais_trimes*2 + $moyen_geographi_trimes*1 + $moyen_histoire_trimes*1 +$moyen_mathematiq_trimes*4 )/15;
";
$r= "$sql ORDER BY Matri";
$resultat =mysql_query($r);
echo'<table border=1>';
echo '<tr bgcolor="#D1D7DC"><td>';
echo Matri; echo '<td><td>';nom ; echo '<td><td>'; echo prenom ;echo '<td><td>';
echo code_matiere;echo '<td><td>';echo libelle_matiere; echo '<td><td>';echo note; echo '<td><td>'; echo '<td><td>';echo moyenne;
while ($test= mysql_fetch_row($resultat)){
list($Matri,$nom,$prenom,$cod,$lib,$not)=$test;


echo '<tr bgcolor="#DDEEFF"><td>';
echo $mat; echo '<td><td>';echo $nom ; echo '<td><td>'; echo $prenom; echo'<td><td>';
echo $cod; echo '<td><td>';echo $lib; echo '<td ><td bgcolor="EEBABF">';echo $not; echo '<td><td>';
echo '</td></tr>';

mysql_query($r);

}
mysql_close();

?>

</table>

</body>
</html

Eléphant du PHP | 79 Messages

21 nov. 2013, 18:21

Bonjour,

Je pense que ton problème ne viens pas du code mais de la manipulation et conception de tes tables sql.

Je te conseil avant de coder de faire une schéma lisible des liens entre tes différentes tables, l'exploitation de mysql workbench t'aidera.

Pour info, tu peux effectuer des calculs complexes par l'intermédiaire de requêtes sql, va sur le site officiel de mysql et cherche un section calcul.

Schéma de la base de données :

Image

A l'école, les élèves suivent des cours ordonnés par matière, chaque matière est répertorié par sont libelle et un coefficient. Une matière est enseigné par un professeur représenté par sont nom et prénom. Un professeur a sous tutelle une classe, c'est le professeur principal. Cette classe est représenté par un niveau (6ème, 5ème, etc) et classifiée par année. Ces classes sont constituées d'élèves qui eux sont représentés par un nom et un prénom. Dans le bute d'évaluer les élèves, les professeurs de chaque matière réalise une notation. Il en existe 2 type, l'oral (type = 0) et l'écrit (type = 1). C'est note sont enregistré à une date donnée pour pouvoir les classifier dans un trimestre qui commence et fini à des dates précises.

Sélectionner la moyenne de chaque matière pour l’élevé id 1 :

SELECT matiere.libelle AS matiere,AVG(evaluation.note) AS moyenne, matiere.coeff AS coefficient
FROM evaluation,matiere WHERE evaluation.eleve_id = 1
AND evaluation.matiere_id = matiere.id 
AND evaluation.date BETWEEN 2013-01-01 AND 2013-06-01
GROUP BY evaluation.matiere_id
résultat obtenu :

Image

Ciao

Eléphant du PHP | 79 Messages

21 nov. 2013, 19:48

Je te donne le bout de code php qui pourrait peut être te convenir et qui marche avec ce que j'ai écrit au dessus :

<?php

$dsn = "mysql:dbname=mydb;host=127.0.0.1;port=3306;" ;
$database = new PDO( $dsn, 'root', null );

function get_eleve( PDO $database, $id )
{
    $sql = "SELECT 
                eleve.nom AS nom, 
                eleve.prenom AS prenom,
                classe.niveau AS niveau
            FROM eleve, classe
            WHERE eleve.id = ?" ;
    
    $req = $database-> prepare( $sql );
    $req-> execute( array( $id ) );
    
    return $req-> fetch( PDO::FETCH_ASSOC );
}

function moyenne_matiere( PDO $database, $eleve_id, $date_debut, $date_fin )
{
    $sql = "SELECT
                matiere.libelle AS matiere,
                AVG(evaluation.note) AS moyenne, 
                matiere.coeff AS coefficient
            FROM evaluation,matiere 
            WHERE evaluation.eleve_id = ?
            AND evaluation.matiere_id = matiere.id 
            AND evaluation.date BETWEEN ? AND ?
            GROUP BY evaluation.matiere_id" ;
    
    $req = $database-> prepare( $sql );
    $req-> execute( array( $eleve_id,  $date_debut, $date_fin ) );
    
    return $req-> fetchAll( PDO::FETCH_ASSOC );
}

function moyenne_totale( array $resultat_moyenne_matiere )
{
    $matiere_note = array();
    $sum_coeff = 0 ;
    
    foreach( $resultat_moyenne_matiere as $matiere )
    {
        $matiere_note[] = $matiere['moyenne'] * $matiere['coefficient'];
        $sum_coeff = $sum_coeff + $matiere['coefficient'];
    }
    
    $result = array_sum( $matiere_note ) / $sum_coeff ;
    
    return round( $result, 2, PHP_ROUND_HALF_UP );
}

$eleve = get_eleve( $database, 1 );
$moyenne_matiere = moyenne_matiere($database, 1, '2013-01-01', '2013-06-01' );
$moyenne_total = moyenne_totale( $moyenne_matiere );

?>

<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Eleve id 1</title>
    </head>
    <body>
        
        <div id="eleve">
            <table>
                <tr>
                    <td>Nom</td>
                    <td><?php echo $eleve['nom'] ?></td>
                </tr>                <tr>
                    <td>Prénom</td>
                    <td><?php echo $eleve['prenom'] ?></td>
                </tr>                <tr>
                    <td>Classe</td>
                    <td><?php echo $eleve['niveau'] ?> ème</td>
                </tr>
            </table>
        </div>
        
        <div id="matiere">
            <table>
                <thead>
                    <tr>
                        <th>Matière</th>
                        <th>Moyenne</th>
                        <th>Coefficient</th>
                    </tr>
                </thead>
                <tbody>
                    <?php foreach( $moyenne_matiere as $item ): ?>
                    <tr>
                        <td><?php echo $item['matiere'] ?></td>
                        <td><?php echo $item['moyenne'] ?></td>
                        <td><?php echo $item['coefficient'] ?></td>
                    </tr>
                    <?php endforeach ?>
                </tbody>
            </table>
        </div>
        
        <div id="total">
            <span>L'élève a eu un moyenne totale de <?php echo $moyenne_total ?></span>
        </div>
        
    </body>
</html>
Merci de mettre se topic en résolut si tu n'es pas d'autres questions.

ciao