Tableau à 3 dimensions

nougitch Messages postés 431 Date d'inscription mercredi 22 octobre 2003 Statut Membre Dernière intervention 17 novembre 2008 - 3 mars 2005 à 13:04
nougitch Messages postés 431 Date d'inscription mercredi 22 octobre 2003 Statut Membre Dernière intervention 17 novembre 2008 - 3 mars 2005 à 16:02
Bonjour,



Le principe est rès simple : des élèves (colonnes), des matières (lignes) et des notes (cellules).

Impossible d'afficher la note de chaque élève dans chaque matière dans un tableau.



Merci à tous ceux qui me viendtont en aide !

################################
# Structure de la table `eleve`
################################
CREATE TABLE eleve (
id_eleve int(8) unsigned NOT NULL auto_increment,
nom_eleve varchar(255) NOT NULL default '',
PRIMARY KEY (id_eleve)
) TYPE=MyISAM;
##############################
# Contenu de la table `eleve`
##############################
INSERT INTO eleve VALUES (1, 'Nicolas');
INSERT INTO eleve VALUES (2, 'Nelly');
INSERT INTO eleve VALUES (3, 'Axel');
INSERT INTO eleve VALUES (4, 'Peggy');


##################################
# Structure de la table `matiere`
##################################
CREATE TABLE matiere (
id_matiere int(8) unsigned NOT NULL auto_increment,
lib_matiere varchar(255) NOT NULL default '',
PRIMARY KEY (id_matiere)
) TYPE=MyISAM;
#################################
# Contenu de la table `matiere`
#################################
INSERT INTO matiere VALUES (1, 'Maths');
INSERT INTO matiere VALUES (2, 'Anglais');
INSERT INTO matiere VALUES (3, 'Sport');

###############################
# Structure de la table `note`
###############################
CREATE TABLE note (
ce_eleve int(8) unsigned NOT NULL default '0',
ce_matiere int(8) unsigned NOT NULL default '0',
valeur_note varchar(255) NOT NULL default '',
PRIMARY KEY (ce_eleve,ce_matiere)
) TYPE=MyISAM;
#############################
# Contenu de la table `note`
#############################
INSERT INTO note VALUES (1, 1, '0');
INSERT INTO note VALUES (1, 2, '1');
INSERT INTO note VALUES (1, 3, '3');
INSERT INTO note VALUES (2, 1, '1');
INSERT INTO note VALUES (2, 2, '3');
INSERT INTO note VALUES (2, 3, '2');
INSERT INTO note VALUES (3, 1, '1');
INSERT INTO note VALUES (3, 2, '1');
INSERT INTO note VALUES (3, 3, '2');
INSERT INTO note VALUES (4, 1, '1');
INSERT INTO note VALUES (4, 2, '2');
INSERT INTO note VALUES (4, 3, '1');

#############################
# Ma page PHP : index.php
#############################
<html><head><title>NOTE</title></head>
<?
$link = mysql_connect('localhost','root','') or die("Impossible de se connecter");
mysql_select_db('note',$link) or die("Impossible de se connecter");
$eleve=mysql_query("SELECT nom_eleve FROM eleve",$link);
echo '&nbsp;, ';
while($table_eleve=mysql_fetch_array($eleve,MYSQL_ASSOC)) {
echo \"$table_eleve[nom_eleve], \";
}
echo '';
$matiere=mysql_query(\"SELECT lib_matiere FROM matiere\",$link);
while($table_matiere=mysql_fetch_array($matiere,MYSQL_ASSOC)) {
echo \"----
$table_matiere[lib_matiere], \";
$note=mysql_query(\"SELECT valeur_note FROM note,eleve,matiere WHERE ce_eleve=id_eleve AND ce_matiere=id_matiere\",$link);
while($table_note=mysql_fetch_array($note,MYSQL_ASSOC)) {
echo \"$table_note[valeur_note], \";
}
echo '';
}
echo '
';
?>
</html>

5 réponses

davwart Messages postés 855 Date d'inscription mardi 19 novembre 2002 Statut Membre Dernière intervention 28 juillet 2009 1
3 mars 2005 à 14:33
salut!

une question si bien posée mérite une réponse.

alors voici la requete pour avoir toute tes entrées :

"select e.nom_eleve , m.lib_matiere , n.valeur_note FROM eleve e,
matiere m, note n WHERE n.ce_eleve=e.id_eleve AND
n.ce_matiere=m.id_matiere"



donc de là on peut faire une fonction qui te ramene les notes:

<?php

function getNotes(){

$notes=array();

$query=mysql_query("select e.nom_eleve as nom ,
m.lib_matiere as matiere , n.valeur_note as note FROM eleve
e,
matiere m, note n WHERE n.ce_eleve=e.id_eleve AND
n.ce_matiere=m.id_matiere
");

while($note=mysql_fetch_query($query)){

$notes[$note["eleve"]][$note["matiere"]]=$note["note"];

}

return $notes;

}

?>



et donc il te suffite dans ton code de faire:


<?php

$notes=getNotes();

foreach($notes as $eleve=>$eleve_notes){

echo " notes pour l'eleves $eleve
":

foreach($eleve_notes as $matiere=>$eleve_note){

echo " matiere : $matiere ---- note reçue : $eleve_note";

}

}

?>



Voila j'ai ecrit ce code à la volée, je l'ai pas debuggué, à toi de le faire. ;)



bon courage !



ps: merci d'avoir pris la peine d'ecrire une question propre !!
-------------------------------------
Les ordinateurs, plus on s'en sert moins, moins ça a de chance de mal marcher. [Les Shadoks]
0
nougitch Messages postés 431 Date d'inscription mercredi 22 octobre 2003 Statut Membre Dernière intervention 17 novembre 2008
3 mars 2005 à 14:59
Merci pour ton aide davwart,



J'ai donc testé ton code, ce qui me donne :



<?php

$link = mysql_connect('localhost','root','');

mysql_select_db('note',$link);

//---------------------------------------------------------------------

function getNotes() {

$notes=array();

$query=mysql_query("select e.nom_eleve as nom ,
m.lib_matiere as matiere , n.valeur_note as note FROM eleve
e, matiere m, note n WHERE n.ce_eleve=e.id_eleve AND
n.ce_matiere=m.id_matiere");

while($note=mysql_fetch_array($query)) {

$notes[$note["eleve"]][$note["matiere"]]=$note["note"];

}

return $notes;

}

//---------------------------------------------------------------------

$notes=getNotes();

foreach($notes as $eleve=>$eleve_notes){

echo " Nom de l'élève : $eleve
";

foreach($eleve_notes as $matiere =>$eleve_note){

echo "$matiere : $eleve_note
";

}

}

?>



Mais je n'ai pas le nom de l'élève qui s'affiche.

Voilà ce que j'ai :



Nom de l'élève :

Maths : 1

Anglais : 2

Sport : 1



Et après, pourrais-je rentrer le tout dans un tableau HTML afin de
rendre les cellules cliquables pour ajouter ou modifier des notes ?



Merci encore !
0
davwart Messages postés 855 Date d'inscription mardi 19 novembre 2002 Statut Membre Dernière intervention 28 juillet 2009 1
3 mars 2005 à 15:10
re!

oui y'a une erreur ds le code :

$notes[$note["eleve"]][$note["matiere"]]=$note["note"];

doit etre :


$notes[$note["nom"]][$note["matiere"]]=$note["note"];



pour ce qui est de faire un tableau apres, oui bien sur y'a moyen ;)


-------------------------------------
Les ordinateurs, plus on s'en sert moins, moins ça a de chance de mal marcher. [Les Shadoks]
0
nougitch Messages postés 431 Date d'inscription mercredi 22 octobre 2003 Statut Membre Dernière intervention 17 novembre 2008
3 mars 2005 à 15:38
Merci man !

C'est génial !



Je vais essayer de mettre tout cela en forme et de le rendre intéractif.



Merci encore !
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
nougitch Messages postés 431 Date d'inscription mercredi 22 octobre 2003 Statut Membre Dernière intervention 17 novembre 2008
3 mars 2005 à 16:02
Hey DAVWART,



En fait, à plat, ça va mais ça fait un peu redondant, non ?

Y a t'il un moyen de le mettre dans un tableau HTML du style

&nbsp;,

nom élève
1, nom élève 2, nom élève
3, nom élève 4,

----

nom matiere 1,

note élève
1, note élève 2, note élève
3, note élève 4,

----

nom matiere 2,

note élève 1, note élève
2, note élève 3, note élève
4,

----

nom matiere 3,

note élève 1, note élève
2, note élève 3, note élève
4,

----

nom matiere 4,

note élève 1, note élève
2, note élève 3, note élève
4
0
Rejoignez-nous