IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
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

PHP & Base de données Discussion :

affichage avec FOREACH


Sujet :

PHP & Base de données

  1. #1
    Membre actif
    Inscrit en
    Mars 2013
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Mars 2013
    Messages : 70
    Par défaut affichage avec FOREACH
    Bonjour,
    j'ai un souci d'affichage avec ce code.je voudrais mettre la signature du directeur en dessous de la page.quand je la mets en bas elle se répète avec toutes les matières.
    comment gérer cela?
    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
    44
    45
    46
    47
    48
    49
    50
     
    <?php
    include("configu.php");
     
    function classement(){
     
    $results = array();
    $sql = 'SELECT DISTINCT listeleve.nomre,listeleve.prenomsre,listeleve.classere,listeleve.matricule,
    listeleve.avatarre,
    frang.matricule,frang.moyenne,
    frang.matiere,frang.rang,frang.professeur from  
    listeleve,frang where 
    frang.matricule = listeleve.matricule AND 
    listeleve.classere = "'.$_GET['classe'].'"  
    order by nomre,prenomsre 
    ';
    $query = mysql_query($sql) or die("error");
    while($row = mysql_fetch_assoc($query)){
        $results[] = $row;
      }
      return $results;
    }  
     
    ?>
      <?php
     
    $nomeleve = "";
        $classements = classement();
    foreach($classements  as $classement){
     
     
    if($nomeleve != $classement["nomre"]){
    $nomeleve = $classement["nomre"];
        echo '
      
      <h3>Nom:'.$nomeleve .'---
    
    
    
       <br> Prénoms:'.$classement['prenomsre'].';
    
    }
      echo'
      <hr/>MATIERE:'.$classement['matiere'].'---MOYENNE:'.$classement['matiere'].'---
      rang:'.$classement['matiere'].'';
    
    <br/> <br/> <br/> Signature  du directeur';
     
     }
    mysql_close();	?>
    merci pour votre assistance

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    c'est simple : il faut la mettre APRES l'accolade fermante ( } ).

  3. #3
    Membre actif
    Inscrit en
    Mars 2013
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Mars 2013
    Messages : 70
    Par défaut
    quand je mets cela après l'accolade.il apparaît une seule fois.or il doit apparaître sur tous les bulletins des élèves.

    si par exemple on choisit la classe terminale, s'il y a 5 élèves dans la classe, la signature doit apparaître 5 fois.
    or dans une classe il peut avoir 15 matières ou plus. or la signature dans mon cas apparaît autant de fois que les matières et non les classes.
    votre solution fait apparaître la signature une seule fois ce qui ne résout pas le problème.
    il y a une condition qu'on doit faire sans doute.j'ai déjà essayer certains qui ne marchent pas.

  4. #4
    Membre Expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 59
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Billets dans le blog
    8
    Par défaut
    EDIT : cette fois ça devrait fonctionner...
    Essaie ceci : c'est la technique dite du flag...
    Par ailleurs, il faut que tu nous dises à quoi ressemble ton $_GET['classe'] pour sécuriser un minimum ton code...
    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
    44
    45
    46
    47
    48
    <?php
    include("configu.php");
    function classement($quelle_classe){
      $results = array();
      $sql = 'SELECT DISTINCT 
      listeleve.nomre,
      listeleve.prenomsre,
      listeleve.classere,
      listeleve.matricule,
      listeleve.avatarre,
      frang.moyenne,
      frang.matiere,
      frang.rang,
      frang.professeur 
      from  listeleve
      inner join frang on frang.matricule = listeleve.matricule
      where listeleve.classere = "'.$quelle_classe.'"  
      order by nomre,prenomsre 
      ';
      $query = mysql_query($sql) or die("error");
      while($row = mysql_fetch_assoc($query)){
        $results[] = $row;
      }
      mysql_close();
      return $results;
    }  
    if(isset($_GET['classe'])){
      $matricule = "";
      $classements = classement($_GET['classe']);
      if(count($classements)>0){
        foreach($classements  as $classement){
          if($matricule != $classement["matricule"]){
            $matricule = $classement["matricule"];//on passe le relais
            echo '<h3>Nom:'.$nomeleve .'---
            <br> Prénoms:'.$classement['prenomsre'];
            $signature_posee=false;
          }
          echo'<br/>MATIERE:'.$classement['matiere'].'---MOYENNE:'.$classement['moyenne'].'---rang:'.$classement['rang'];
          if($matricule != $classement["matricule"] && $signature_posee==false){
            echo '<br/> <br/> <br/> Signature  du directeur';
            $signature_posee=true;
          }
        }
      }
    }
    else{
      echo 'Saisir une classe dans l\'url !';
    }
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  5. #5
    Invité
    Invité(e)
    Par défaut
    OK, vu.

    En fait, c'est un peu plus complexe :
    Code php : 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
    <?php
    $nomeleve = ''; // nom de référence
    $classements = classement();
    foreach($classements  as $classement)
    {
    	if($nomeleve != $classement["nomre"])
    	{
    		if($nomeleve != '') // sauf le 1er élève
    		{
    			echo '<br/><br/><br/>Signature  du directeur'; // signature de la fiche de l'élève précédent
    		}
    		echo '
    		<h3>Nom:'.$nomeleve .'---
    		<br> Prénoms:'.$classement['prenomsre'].'</h3>';
     
    		$nomeleve = $classement["nomre"];
    	}
    	echo'
    	<hr/>MATIERE:'.$classement['matiere'].'---MOYENNE:'.$classement['moyenne'].'---
    	rang:'.$classement['rang'].'';
    }
    	echo '<br/><br/><br/>Signature  du directeur'; // signature de la fiche du dernier élève
    mysql_close();	?>

    N.B. Si 2 élèves ont le même nom, ça se passe comment ?
    (pour info, j'étais dans la même classe que ma sœur jumelle jusqu'en 6ème)



    Il serait plus judicieux de faire le test sur l'id (auto-incrémenté, donc UNIQUE).

    Important : il faut ajouter la récupération de l'id dans la requête.
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $sql = 'SELECT DISTINCT listeleve.id,
     listeleve.nomre,
    ...
    Ce qui donne :
    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
    $id_reference = 0; // id de référence
    $classements = classement();
    foreach($classements  as $classement)
    {
    	if($id_reference != $classement["id"])
    	{
    		if($id_reference != 0)
    		{
    			echo '<br/><br/><br/>Signature  du directeur'; // signature de la fiche précédente
    		}
    		echo '
    		<h3>Nom:'.$classement['nomre'] .'---
    		<br> Prénoms:'.$classement['prenomsre'].'</h3>';
     
    		$id_reference = $classement["id"];
    	}
    	echo'
    	<hr/>MATIERE:'.$classement['matiere'].'---MOYENNE:'.$classement['moyenne'].'---
    	rang:'.$classement['rang'].'';
    }
    	echo '<br/><br/><br/>Signature  du directeur'; // dernière fiche
    mysql_close();	?>
    Dernière modification par Invité ; 07/09/2018 à 15h30.

  6. #6
    Membre actif
    Inscrit en
    Mars 2013
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Mars 2013
    Messages : 70
    Par défaut
    cette formule est la solution à mon problème.merci infiniment pour vos contributions.
    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
    <?php
    $nomeleve = "";
    $classements = classement();
    foreach($classements  as $classement)
    {
    	if($nomeleve != $classement["nomre"])
    	{
    		if($nomeleve != '') // sauf le 1er élève
    		{
    			echo '<br/><br/><br/>Signature  du directeur'; // signature de la fiche de l'élève précédent
    		}
    		$nomeleve = $classement["nomre"];
    		echo '
    		<h3>Nom:'.$nomeleve .'---
    		<br> Prénoms:'.$classement['prenomsre'].';
    		$nomeleve = $classement["nomre"];
    	}
    	echo'
    	<hr/>MATIERE:'.$classement['matiere'].'---MOYENNE:'.$classement['matiere'].'---
    	rang:'.$classement['matiere'].'';
    }
    	echo '<br/><br/><br/>Signature  du directeur'; // signature de la fiche du dernier élève
    mysql_close();	?>

  7. #7
    Invité
    Invité(e)
    Par défaut
    NON, ce n'est pas bon.
    Citation Envoyé par jreaux62 Voir le message
    N.B. Si 2 élèves ont le même nom, ça se passe comment ?
    Si 2 élèves ont le même nom, tu ne créeras qu'une seule fiche.

    Il faut utiliser ma méthode avec l'id auto-incrémenté.



    Voilà une méthode moins "empirique" :

    Code php : 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
    <?php
    $id_reference = 0; // id de référence
    $classements = classement();
    // ---------------------
    // préparation des fiches
    $fiches_eleve = array();
    foreach($classements  as $classement)
    {
    	$fiches_eleve[$classement['id']]['nom-prenom'] = '<h3>Nom:'.$classement['nomre'] .'---<br/>Prénoms:'.$classement['prenomsre'].'</h3>';
    	$fiches_eleve[$classement['id']]['matiere'][] = '<hr/>MATIERE:'.$classement['matiere'].'---MOYENNE:'.$classement['moyenne'].'---rang:'.$classement['rang'].'';
    }
    // ---------------------
    // affichage, pour chaque fiche :
    foreach($fiches_eleve as $id => $fiche_eleve)
    {
    	echo $fiche_eleve['nom-prenom'];
    	foreach( $fiche_eleve['matiere'] as $matiere )
    	{
    		echo $matiere;
    	}
    	echo '<br/><br/><br/>Signature  du directeur'; // dernière fiche
    }
    // ---------------------
    mysql_close();
    ?>

  8. #8
    Membre actif
    Inscrit en
    Mars 2013
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Mars 2013
    Messages : 70
    Par défaut
    ok merci infiniment

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. affichage de sous requette avec foreach et while
    Par keusty78 dans le forum Langage
    Réponses: 11
    Dernier message: 17/10/2009, 12h42
  2. Réponses: 6
    Dernier message: 19/10/2004, 13h46
  3. Resolution d'affichage avec x11
    Par cosmos38240 dans le forum Applications et environnements graphiques
    Réponses: 4
    Dernier message: 06/06/2004, 23h26
  4. Pb affichage avec un PaintBox (pour eviter scintillement)
    Par juan64 dans le forum C++Builder
    Réponses: 7
    Dernier message: 08/04/2004, 09h21
  5. Problème d'affichage avec trace
    Par WriteLN dans le forum Flash
    Réponses: 10
    Dernier message: 22/10/2003, 16h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo