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 :

Plusieurs résultat sur 1 champ [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Homme Profil pro
    Epinal
    Inscrit en
    Mai 2020
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Haute Saône (Franche Comté)

    Informations professionnelles :
    Activité : Epinal

    Informations forums :
    Inscription : Mai 2020
    Messages : 6
    Par défaut Plusieurs résultat sur 1 champ
    Bonjour,
    Je suis nouveau sur ce forum. Rien qu'en lisant le titre certains vont surement s'arracher les cheveux. Je pense que mon problème est bénin et ça m'énerve de ne pas trouver de solutions.

    Bon je résume la situation, je dois faire un site web qui va être pour un collège, un espèce de pronote, tout cela est fait, j'ai 4 espaces de connexion. Élève, Parent, Enseignant, Administrateur. Je souhaiterais, quand un parent arrive dans son espace, que les prénom de ses enfants s'affichent. Mon problème est le suivant : m'a requête fonctionne, sauf que celle-ci doit me retourner 1 ou plusieurs valeurs. Or je ne récupère que la dernière.

    Voici mon 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
     
    $req2 = ("SELECT IdEleve FROM ParentsEleve WHERE IdParents = \"$ID\""); //ICI LE $ID PREND UNE VALEUR SUR UNE PRECEDENTE REQUETE
    	//printf("req2 = %s<br>", $req2);
    	$resultat2 = mysqli_query($bdd, $req2) or die ("Impossible d'envoyer la requete id eleve");
    	$nb2 = mysqli_num_rows($resultat2);
    	//printf("nb2 = %s<br>", $nb2);
    	for($i = 0; $i < $nb2; $i++)
    	{
    		printf("i = %s<br>", $i);
    		while($tableau2 = mysqli_fetch_array($resultat2))
    		{
    			$IdE[$i] = $tableau2[$i];
    			printf("ide = %s<br>", $IdE[$i]);
    		}
    Oui, j'ai utilisé un "for" mais c'étais juste pour essayer, cela fait la même chose avec et sans.
    Avec les valeur de cette requête, j'en créer une autre (ce pourquoi il n'y a pas l'accolade fermante du "for)

    voici la suite :

    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
     
     
    		$req3 = ("SELECT Prenom, Nom, EleveClasse.IdClasse FROM Eleve, EleveClasse WHERE Eleve.IdEleve = \"$IdE[$i]\"");
    		printf("req3 = %s<br>", $req3);
    		$resultat3 = mysqli_query($bdd, $req3) or die ("Impossible d'envoyer la requete nom prenom idclasse eleve");
    		$nb3 = mysqli_num_rows($resultat3);
    		while($tableau3 = mysqli_fetch_array($resultat3))
    		{
    			$PrenomE[$i] = $tableau3[0];
    			$NomE[$i] = $tableau3[1];
    			$IdCE[$i] = $tableau3[2];
    			printf("nb = %s, Eleve[%s] : <br> - %s %s %s <br>", $nb3, $i, $PrenomE[$i], $Nom[$i], $IdCE[$i]);
    		}
    	}
     
    		$req4 = ("SELECT NomClasse FROM Classe WHERE IdClasse = \"$IdCE[$i]\"");
    		$resultat4 = mysqli_query($bdd, $req4) or die ("Impossible d'envoyer requete classe eleve");
    		$nb4 = mysqli_num_rows($resultat4);
    		for($j = 0; $j < $nb4; $j++)
    		{
    			while($tableau4 = mysqli_fetch_array($resultat4))
    			{
    				$ClasseE[$j] = $tableau4[0];
    			}
    		}	
     
     
    		printf("Bonjour %s %s <br>", $Prenom1, $Nom1);
    		if($nb2 == 1) 
    		{
    			Printf("Parents de l'élève : %s %s en classe de %s <br>", $PrenomE[0], $NomE[0], $ClasseE[0]);
    		}
     
    		if($nb2 > 1)
    		{
    			printf("Parents des élèves : <br>");
    			for($i = 0; $i < $nb3; $i++)
    			{
    				printf("- %s %s %s <br>", $PrenomE[$i], $NomE[$i], $ClasseE[$j]);
    			}
    		}
    Voila, mais rien ne fonctionne comme je le souhaiterais.
    Ma page affiche ceci (pour la partie du code que j'ai montré) :
    Nom : page.png
Affichages : 104
Taille : 60,2 Ko

    J’espère avoir été clair et que ma façon de coder ne va pas trop vous faire souffrir, je ne suis pas un expert (et j'ai appris de cette manière)(Je suis en BTS informatique) et j’espère surtout que vous pourrez m'aider.

    Merci d'avance

    Erwan

  2. #2
    Membre chevronné Avatar de ma5t3r
    Homme Profil pro
    Développeur freelance
    Inscrit en
    Mai 2015
    Messages
    320
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2015
    Messages : 320
    Par défaut
    J'ai l'impression que la structure de ta base est à revoir.
    Je n'aurais pas associé un élève à un parent mais le contraire.

    Tant pis, c'est fait, tu te traîneras ce boulet durant toute la vie de ton application.

    Pour ce qui est de ta boucle, c'est assez simple en utilisant une jointure dans ta requête.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT * FROM ParentsEleve as p INNER JOIN Eleve as e ON p.idEleve = e.idEleve WHERE p.IdParents = :idParent
    Ensuite, tu boucles sur les résultats pour afficher tous les enfants d'un parent.

    Peut-être que j'ai cafouillé sur les noms des colonnes mais l'idée est là

    Avec la structure de tes tables, on pourrait mieux te conseiller

  3. #3
    Membre éclairé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2009
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Septembre 2009
    Messages : 35
    Par défaut
    Bonjour
    Je rejoins l'idée du dernier post car je trouve ta structure très compliquée et je n'ai pas eu envie d'y entrer
    j'ai lu l'objectif "quand un parent arrive dans son espace, que les prénoms de ses enfants s'affichent"
    Donc je suppose qu'il y a 2 tables
    -Parent avec id et infos
    -Eleves avec id et un champ id_parent
    Donc avec le requete "SELECT * FROM ParentsEleve as p INNER JOIN Eleve as e ON p.idEleve = e.idEleve WHERE p.IdParents = :idParent"
    ça devrait donner les enfants (ça doit fonctionner aussi avec LEFT JOIN)

  4. #4
    Membre chevronné Avatar de ma5t3r
    Homme Profil pro
    Développeur freelance
    Inscrit en
    Mai 2015
    Messages
    320
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2015
    Messages : 320
    Par défaut
    (ça doit fonctionner aussi avec LEFT JOIN)
    Oui, c'est même mieux, tu auras les parents, même ceux qui n'ont pas d'enfant.
    Tu peux même utiliser un LEFT OUTER JOIN

  5. #5
    Membre chevronné
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2017
    Messages
    508
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2017
    Messages : 508
    Par défaut
    Salut,
    1) fait nous voir le relation entre la table parent et la table eleve.
    2) tu utilises les anciennes fonctions de php et je ne me sens pas à l'aise avec.
    3) Apprend à utiliser les requêtes prepare.

    Cordialement

  6. #6
    Membre éclairé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2009
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Septembre 2009
    Messages : 35
    Par défaut
    Pour les requetes PDo
    fait comme moi, intégre et utilise une class PDO pour envoyer tes requetes classiques
    Sur le web avec les mots clefs "class pdo" il y plusierus exemples! CRUD est excellente à mon avis

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

Discussions similaires

  1. Recherche de plusieurs résultats sur plusieurs critères
    Par Chen norris dans le forum Langage SQL
    Réponses: 2
    Dernier message: 01/08/2011, 17h18
  2. Réponses: 5
    Dernier message: 24/09/2009, 14h11
  3. Accepeter plusieurs mail sur un champs input
    Par PrinceMaster77 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 16/03/2009, 16h51
  4. Plusieurs validation sur un champs ?
    Par rad_hass dans le forum ASP.NET
    Réponses: 1
    Dernier message: 16/09/2008, 15h13
  5. Plusieurs résultats sur une seule ligne
    Par Morphorpse dans le forum Langage SQL
    Réponses: 4
    Dernier message: 27/08/2007, 19h36

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