Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

entrainement en php

  1. #1
    Membre du Club
    entrainement en php
    Bonjour, je m'explique, Les élèves des trois écoles suivantes : École A, École B, École C, peuvent pratiquer les cinq sports suivants : boxe, judo, football, natation, cyclisme.
    J'aimerais restituer la liste des écoles en affichant pour chacune : le nombre d’élèves, le nombre d’élèves pratiquant au moins un sport, le nombre d’activités sportives pratiquées,
    la liste des activités sportives pratiquées classées par ordre croissant en fonction du nombre d’élèves qui les pratiquent et en précisant ce nombre pour chacune des activités.

    besoin d'aide pour la structure de la bdd. Merci d'avance & bonne journée

  2. #2
    Modérateur

    Commence déjà par modéliser tes 3 entités principales :

    - Ecole
    - Eleve
    - Sport

    Ensuite les relations entre ces entités :

    - 1 Elève appartient à 1 Ecole (un champs id_ecole dans la table eleve suffit)
    - 1 Elève peut pratiquer 0 ou N Sport (il faut donc ici une table en plus pour gérer cette ralation)
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre du Club
    postManager.php

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    class postManager {
     
    	private $_bdd;
     
    	public function __construct($bdd) {
     
    		$this->setDb($bdd);
    	}
     
    	public function setDb(PDO $dbh) {
     
    		$this->__bdd = $dbh;
    	}
     
    	public function getSchoolsStudentNumbers() {
     
    		$query = 'SELECT ecole.id schools_name, students_name, students_first_name, SUM(schools_id)
    		FROM ecole LEFT JOIN eleves ON ecole_id = schools_id';
     
    		$stmnt = $this->__bdd->prepare($query);
     
    		$stmnt->execute();
     
    		while($row = $stmnt->fetch(PDO::FETCH_ASSOC)) {
     
    			$result[] = $row;
    		}
     
    		return $result;
    	}
    }


    contenu.php

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    require('class/postManager.php');
     
    try {
     
    	$bdd = new PDO('mysql:host=localhost;dbname=ecoles', '10111110', '10111110');
    }
     
    catch(exception $e) {
     
    	die('Erreur ' . $e->getMessage());
    }
     
    $bdd = exec("SET CHARACTER SET utf8");
     
    $manager = new postManager($bdd);
    $result = $manager->getSchoolsStudentNumbers();


    Bonsoir, j'ai une erreur ligne 12 ->
    TypeError: Argument 1 passed to postManager::setDb() must be an instance of PDO, string given, called in.
    Besoin d'assistance, Merci bien & bonne soirée.

  4. #4
    Membre actif
    Vous vous êtes trompé à cette ligne : $bdd = exec("SET CHARACTER SET utf8");, après cette instruction, $bdd n'est plus un objet puisque vous lui affectez une autre valeur...

    Ecrivez plutôt $bdd->exec("SET CHARACTER SET utf8");

  5. #5
    Membre du Club
    Merci bien pour l'info Trehinos, j'avais pas vu.

    Maintenant j'ai ce message d'erreur ->
    Notice: Undefined variable: result

  6. #6
    Membre actif
    Toujours un problème de déclaration de variable... $result n'est pas déclarée... donc déclarez la ! Juste avant le while du premier fichier, faites $result = [];.

  7. #7
    Membre du Club
    j'ai fait un var_dump et le tableau est vide.

  8. #8
    Invité
    Invité(e)
    Bonjour,

    Si tu veux de l'aide, montre ton code.
    On ne peut pas le deviner.

  9. #9
    Membre du Club
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    class postManager {
     
    	private $_bdd;
     
    	public function __construct($bdd) {
     
    		$this->setDb($bdd);
    	}
     
    	public function setDb(PDO $dbh) {
     
    		$this->__bdd = $dbh;
    	}
     
    	public function getSchoolsStudentNumbers() {
     
    		$query = 'SELECT ecole.id, schools_name students_name, students_first_name, SUM(schools_id)
    		FROM ecole LEFT JOIN eleves ON ecole.id = eleves.schools_id';
     
    		$stmnt = $this->__bdd->prepare($query);
     
    		$stmnt->execute();
     
    		while($row = $stmnt->fetch(PDO::FETCH_ASSOC)) {
     
    			$results[] = $row;
    		}
     
    		return $results;
    	}
    }


    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    require('class/postManager.php');
     
    try {
     
    	$bdd = new PDO('mysql:host=localhost;dbname=ecoles', '10111110', '10111110');
    }
     
    catch(exception $e) {
     
    	die('Erreur ' . $e->getMessage());
    }
     
    $bdd->exec("SET CHARACTER SET utf8");
     
    $manager = new postManager($bdd);
    $results = $manager->getSchoolsStudentNumbers();
    var_dump($results);
     
    ?>
     
    <h1>Voici le nombre d'élèves appartenent à telle école</h1>
     
    <table>
    	<?php if(!empty($results)) : ?>
    		<?php foreach($results as $result) : ?>
    			<thead>
    				<tr>
    					<th>N° Identification</th>
    					<th>Nom de l'école</th>
    					<th>Nom de l'élève</th>
    					<th>Prénom de l'élève</th>
    				</tr>
    			</thead>
     
    			<tr>
    				<td><?php echo $result['id']; ?></td>
    				<td><?php echo $result['schools_name']; ?></td>
    				<td><?php echo $result['students_name']; ?></td>
    				<td><?php echo $result['students_first_name']; ?></td>
    			</tr>
    		<?php endforeach; ?>
    	<?php endif; ?>
    </table>

    Finalement ça marche sans déclarer $result = []; mais ensuite j'ai fait une jointure et -> C:\wamp64\www\php-expert\06-devoir-1\contenu.php:19:null

  10. #10
    Invité
    Invité(e)
    Bonjour,

    pour info :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    		while($row = $stmnt->fetch(PDO::FETCH_ASSOC)) {
     
    			$result[] = $row;
    		}

    S'écrit plus simplement :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    		$result = $stmnt->fetchAll(PDO::FETCH_ASSOC);

  11. ###raw>post.musername###
    Membre du Club
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    $query = 'SELECT ecole.id, schools_name, SUM(schools_id) AS Nombres d\'élèves
    		FROM ecole LEFT JOIN eleves ON ecole.id = eleves.schools_id GROUP BY ecole.id';

    j'aimerais restituer la liste des écoles en affichant pour chacune : – le nombre d’élèves

    J'ai manifestement un soucis au niveau de la fonction SUM car si je la retire le tableau s'affiche
      0  0

  12. #12
    Membre du Club
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
     
    class postManager {
     
        private $_bdd;
     
        public function __construct($bdd) {
     
            $this->setDb($bdd);
        }
     
        public function setDb(PDO $dbh) {
     
            $this->__bdd = $dbh;
        }
     
        public function getSchoolsStudentsNumbers() {
     
            $query = 'SELECT ecole.id, schools_name, SUM(schools_id)
            FROM ecole LEFT JOIN eleves ON ecole.id = eleves.schools_id GROUP BY ecole.id';
     
            $stmnt = $this->__bdd->prepare($query);
     
            $stmnt->execute();
     
            while($row = $stmnt->fetch(PDO::FETCH_ASSOC)) {
     
                $results[] = $row;
            }
     
            return $results;
        }


    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
     
     
    require('class/postManager.php');
     
    try {
     
        $bdd = new PDO('mysql:host=localhost;dbname=ecoles', '10111110', '10111110');
    }
     
    catch(exception $e) {
     
        die('Erreur ' . $e->getMessage());
    }
     
    $bdd->exec("SET CHARACTER SET utf8");
     
    $manager = new postManager($bdd);
    $results = $manager->getSchoolsStudentsNumbers();
    var_dump($results);
     
    <h1>Voici le nombre d'élèves appartenent à telle école</h1>
     
    <table>
        <?php if(!empty($results)) : ?>
            <?php foreach($results as $result) : ?>
                <thead>
                    <tr>
                        <th>N° Identification</th>
                        <th>Nom de l'école</th>
                        <th>Le nombre d'élèves par école</th>
                    </tr>
                </thead>
     
                <tr>
                    <td><?php echo $result['id']; ?></td>
                    <td><?php echo $result['schools_name']; ?></td>
                    <td><?php echo $result['SUM(schools_id)']; ?></td>
                </tr>
            <?php endforeach; ?>
        <?php endif; ?>
    </table>


    Bonjour, j'aimerais restituer la liste des écoles en affichant pour chacune :
    – le nombre d’élèves, (cela est fait). (1)
    – le nombre d’élèves pratiquant au moins un sport, (2)
    – le nombre d’activités sportives pratiquées, (3)

    ça coince au niveau (2 et 3 )