Bonjour,
Je dois réaliser le travail suivant concernant des statistiques:
Les élèves des trois écoles suivantes :
– École A ;
– École B ;
– École C.
peuvent pratiquer les cinq sports suivants :
– boxe ;
– judo ;
– football ;
– natation ;
– cyclisme.
Le résultat de la génération aléatoire fait que le nombre d’élèves par école est variable et que le nombre d’élèves pratiquant un sport est variable.
Un élève peut pratiquer aucun sport ou trois sports maximum.
Pour cela je dois créer une base de données ceci est fait:
Base de données stats:
- Tables:
highschool :
| id | school_name |
1 Ecole A
2 Ecole B
3 Ecole C
pupils:
| id | name | school_id |
pupil_sport:
| id | pupil_id | sport_id |
sports:
| id | sport |
1 Boxe
2 Judo
3 Football
4 Natation
5 Cyclisme
Ensuite je dois générer aléatoirement à la demande les contenus de la base de données ;
Le contenu est généré au refresh de la page, ajoutant à chaque fois 1 élève jusque là aucun problème. (il y a une boucle for pour augmenter l'ajout mais pour les tests elle est commentée).
En revanche concernant l'ajout de 0-3 sports par élèves il y a un problème.
0-3 sports sont bien ajoutés mais il n'y a aucune incrémentation dans la tables pupil_sport de pupil_id.
Il reste à 1 j'ai essayé les boucles for, while là ou cela marche en POO cela ne marche pas dans un setter et je ne trouve pas comment faire, ceci n'est peut être qu'un détail mais ce détail m'empêche d'avancer.
Ma question est donc, comment faire en sorte que ces pupil_id soient incrémentés et/ou faire en sorte qu'ils soient reliés aux id enregistrés dans la table pupil ?
Sachant que si on définit pupil AS p et pupil_sport as u on a p.id = u.pupil_id pour les incrémenter (si cela est possible de les relier).
Voici le code correspondant.
Stat.php
index2.php
D'avance merci à ceux qui pourront m'aider.
Modifié par Gan3sh (29 Jun 2019 - 08:20)
Je dois réaliser le travail suivant concernant des statistiques:
Les élèves des trois écoles suivantes :
– École A ;
– École B ;
– École C.
peuvent pratiquer les cinq sports suivants :
– boxe ;
– judo ;
– football ;
– natation ;
– cyclisme.
Le résultat de la génération aléatoire fait que le nombre d’élèves par école est variable et que le nombre d’élèves pratiquant un sport est variable.
Un élève peut pratiquer aucun sport ou trois sports maximum.
Pour cela je dois créer une base de données ceci est fait:
Base de données stats:
- Tables:
highschool :
| id | school_name |
1 Ecole A
2 Ecole B
3 Ecole C
pupils:
| id | name | school_id |
pupil_sport:
| id | pupil_id | sport_id |
sports:
| id | sport |
1 Boxe
2 Judo
3 Football
4 Natation
5 Cyclisme
Ensuite je dois générer aléatoirement à la demande les contenus de la base de données ;
Le contenu est généré au refresh de la page, ajoutant à chaque fois 1 élève jusque là aucun problème. (il y a une boucle for pour augmenter l'ajout mais pour les tests elle est commentée).
En revanche concernant l'ajout de 0-3 sports par élèves il y a un problème.
0-3 sports sont bien ajoutés mais il n'y a aucune incrémentation dans la tables pupil_sport de pupil_id.
Il reste à 1 j'ai essayé les boucles for, while là ou cela marche en POO cela ne marche pas dans un setter et je ne trouve pas comment faire, ceci n'est peut être qu'un détail mais ce détail m'empêche d'avancer.
Ma question est donc, comment faire en sorte que ces pupil_id soient incrémentés et/ou faire en sorte qu'ils soient reliés aux id enregistrés dans la table pupil ?
Sachant que si on définit pupil AS p et pupil_sport as u on a p.id = u.pupil_id pour les incrémenter (si cela est possible de les relier).
Voici le code correspondant.
Stat.php
<?php
///////////////////////////////////////////////////////////////////////////////////////////////
/////////////// ///////////////////////
/////////////// PUPIL ///////////////////////
/////////////// ///////////////////////
////////////////////////////////////////////////////////////////////////////////////////////
class Pupil
{
private $_id;
private $_name;
private $_school_id;
public function __construct(array $pupilData)
{
$this->setId($pupilData['id']);
$this->setName($pupilData['name']);
$this->setSchool_id($pupilData['school_id']);
}
///////////////////////////////////////////////////////////////////////////////////
/////////////// setters ////////////////
/////////////////////////////////////////////////////////////////////////////////
public function setId($id)
{
if ((is_int($id)) AND ($id > 0))
{
$this->_id = $id;
}
}
public function setName($name)
{
if (is_string($name))
{
$names = array('Steeve', 'Bryan','Marco', 'Vito', 'Jenny', 'Jessica', 'Clay', 'Jackson', 'Tyreese', 'Andréa', 'Johanna', 'Aïda', 'Maëva','Alex', 'Barry' , 'Chris', 'Thomas', 'Sébastien', 'Christian', 'Ronnie', 'Mario','Bruce' , 'Cassie', 'Maria', 'Carla', 'Cristiano', 'Vitali', 'Luigi', 'Sergeï', 'Alexander', 'Tom', 'Franck', 'Oleg', 'Milan', 'Alessandro', 'Seth', 'Todd', 'Lisa', 'Léon', 'Raven', 'Joshua', 'Amber', 'Douglas', 'Mia', 'Sherry', 'Pamela', 'Donny', 'John', 'Camilla', 'Cole', 'Holly', 'Maggie', 'Tara', 'Harper', 'Rosa', 'Wayland', 'Sophia' , 'Garret', 'Ezechiel', 'Glenn', 'Konrad', 'Sandy', 'Paolo','Jade' , 'Naya', 'Kitana', 'Sub-Zéro', 'Kano', 'Kenny', 'Kyle', 'Marian', 'Bryan', 'Drew', 'Zvonimir', 'Pedro', 'Carolina', 'Ivanova', 'Jim', 'Violet', 'Abraham', 'Yumiko', 'Aaron', 'Connor', 'Tessa', 'Rosita' , 'Kelly', 'Mac', 'Lucas', 'Evgeni', 'Madison', 'Paula', 'Shane' , 'Wyatt', 'Diego', 'Ernesto', 'Manny', 'Vincenzo', 'Rihame', 'Gabriel', 'Ajax', 'Zeus');
//genérateur de noms aléatoires
$rand_pupil = array_rand($names, 2);
$name = $names[$rand_pupil[0]];
$this->_name = $name;
}
}
public function setSchool_id($school_id)
{
if ((is_int($school_id)) AND ($school_id > 0) AND ($school_id < 4))
{
//générateur de school_id aléatoires
$school_id = rand(1,3);
$this->_school_id = $school_id;
}
}
///////////////////////////////////////////////////////////////////////////////////
/////////////// getters ////////////////
//////////////////////////////////////////////////////////////////////////////////
public function getId()
{
return $this->_id;
}
public function getName()
{
return $this->_name;
}
public function getSchool_id()
{
return $this->_school_id;
}
}
////////////////////////////////////////////////////////////////////////////////////////
/////////////// pupil manager ////////////////
//////////////////////////////////////////////////////////////////////////////////////
class pupilManager
{
private $_db;
public function __construct($db)
{
$this->setDb($db);
}
public function setDb(PDO $dbh)
{
$this->_db = $dbh;
}
//insertion des élèves dans la base de données
public function addPupil(Pupil $pupil)
{
$sql = 'INSERT INTO pupils (name, school_id) VALUES (:name, :school_id)';
$stmnt = $this->_db->prepare($sql);
$stmnt->bindParam(':name', htmlspecialchars($pupil->getName()));
$stmnt->bindParam(':school_id', $pupil->getSchool_id());
$stmnt->execute();
//gestion des erreurs
$errors = $stmnt->errorInfo();
if ($errors[0] != '00000')
{
echo 'Erreur SQL ' . $errors[2];
}
else
{
'L\'élève '.$pupil->getName().' de l\'école '.$pupil->getSchool_id().' a été généré aléatoirement et enregistré en base données.' .'<br>';
}
}
///////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////// //////////
/////////////// 1) Nombre d'élèves de chaque école //////////
////////////// ////////// //////////////////////////////////////////////////////////////////////////////////////////////////////
public function getPupilBySchool()
{
try
{
$bdh = new PDO('mysql:host=localhost;dbname=stats', 'root', '');
}
catch(Exception $e)
{
echo 'Message erreur SQL : ' .$e->getMessage(). '<br>';
exit;
}
$sql = 'SELECT school_name, COUNT(p.id) AS total FROM pupils AS p INNER JOIN highschool AS h WHERE p.school_id = h.id GROUP BY school_id';
$stmnt = $bdh->prepare($sql);
$stmnt->execute();
//gestion des erreurs
$errors = $stmnt->errorInfo();
if ($errors[0] != '00000')
{
echo 'Erreur SQL ' . $errors[2];
}
else
{
while($row = $stmnt->fetch())
{
$pupil_data['school_name'] = $row['school_name'];
$pupil_data['total'] = $row['total'];
echo $pupil_data['school_name'] = $row['school_name'] . ' : ' . $pupil_data['total'] = $row['total'] . ' élèves' . '<br>';
}
}
}
}
//////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////// ///////////////////////
/////////////// SPORT ///////////////////////
/////////////// ///////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////
class Sport
{
private $_id;
private $_pupil_id;
private $_sport_id;
public function __construct(array $sportData)
{
$this->setId($sportData['id']);
$this->setPupil_id($sportData['pupil_id']);
$this->setSport_id($sportData['sport_id']);
}
///////////////////////////////////////////////////////////////////////////////////
/////////////// setters ////////////////
/////////////////////////////////////////////////////////////////////////////////
public function setId($id)
{
if ((is_int($id)) AND ($id > 0))
{
$this->_id = $id;
}
}
public function setPupil_id($pupil_id)
{
if ((is_int($pupil_id)) AND ($pupil_id > 0))
{
$this->_pupil_id = $pupil_id;
}
}
public function setSport_id($sport_id)
{
if ((is_int($sport_id)) AND ($sport_id < 6))
{
$sport_id = rand(0,5);
$this->_sport_id = $sport_id;
}
}
///////////////////////////////////////////////////////////////////////////////////
/////////////// getters ////////////////
//////////////////////////////////////////////////////////////////////////////////
public function getId()
{
return $this->_id;
}
public function getPupil_id()
{
return $this->_pupil_id;
}
public function getSport_id()
{
return $this->_sport_id;
}
}
////////////////////////////////////////////////////////////////////////////////////////
/////////////// sport manager ////////////////
//////////////////////////////////////////////////////////////////////////////////////
class sportManager
{
private $_db;
public function __construct($db)
{
$this->setDb($db);
}
public function setDb(PDO $dbh)
{
$this->_db = $dbh;
}
public function addSport(Sport $sport)
{
$sql = 'INSERT INTO pupil_sport (pupil_id, sport_id) VALUES (:pupil_id, :sport_id)';
$stmnt = $this->_db->prepare($sql);
$stmnt->bindParam(':pupil_id', $sport->getPupil_id());
$stmnt->bindParam(':sport_id', $sport->getSport_id());
$stmnt->execute();
//gestion des erreurs
$errors = $stmnt->errorInfo();
if ($errors[0] != '00000')
{
echo 'Erreur SQL ' . $errors[2];
}
else
{
echo 'Le sport '.$sport->getSport_id().' a été généré aléatoirement pour l\'élève dont l\'id est '.$sport->getPupil_id().' et enregistré en base données.' .'<br>';
}
}
}
?>
index2.php
<?php
require('class/Stat.php');
/*for ($i=0; $i < 50; $i++)
{*/
//creation d'un objet pupil
$pupil_data = array('id' => 1, 'name' => 'Kenny', 'school_id' => 1);
$pupil = new Pupil($pupil_data);
//affectation dans la variable $db de la connexion PDO
$db = new PDO('mysql:host=localhost;dbname=stats', 'root', '');
//instanciation de la classe pupilManager, nous créons un objet breve en argument
//la connexion PDO est passée en paramètre au constructeur.
$manager = new pupilManager($db);
//appel de la méthode addPupil, nous passons un objet pupil en argument.
$manager->addPupil($pupil);
//}
for ($i=0; $i < 3; $i++)
{
//Itération *3 pour que chaque élèves puisse faire de 0-3 sports
//creation d'un objet sport
$sport_data = array('id' => 1,'pupil_id' => 1, 'sport_id' => 1);
$sport = new Sport($sport_data);
//affectation de la variable $db de la connexion PDO
$db = new PDO('mysql:host=localhost;dbname=stats', 'root', '');
//instanciation de la classe breveManager, nous créons un objet breve en argument
//la connexion PDO est passée en paramètre au constructeur.
$manager = new sportManager($db);
//appel de la méthode addSport, nous passons un objet pupil en argument.
$manager->addSport($sport);
}
?>
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<h1>Statistiques</h1>
<h2>Liste des écoles</h2>
<?php $manager = new pupilManager($db); ?>
<?php $manager->getPupilBySchool(); ?>
<h2>Elèves pratiquant au moins un sport</h2>
<h2>Nombre d'activités sportives pratiquées:</h2>
<h2>Liste des activités sportives pratiquées classées par ordre croissant en fonction du nombre d’élèves:</h2>
</body>
</html>
D'avance merci à ceux qui pourront m'aider.
Modifié par Gan3sh (29 Jun 2019 - 08:20)