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 :

Problème liste déroulante PDO / PHP [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2013
    Messages : 65
    Points : 54
    Points
    54
    Par défaut Problème liste déroulante PDO / PHP
    Bonjour à tous !!

    Voici ma fonction php qui me permet de remplir une liste déroulante grâce à deux requetes :
    La premiere permet de récupérer les identifiants des formateurs que je passe dans une liste afin de l'utiliser dans ma seconde requete.
    Elle retourne ce que je veux ( j'ai déjà effectué des tests sur phpMyAdmin),
    la deuxieme retourne également ce que je veux sur phpMyAdmin mais dans ma liste déroulante, seule une valeur est affectée et là j'avoue que je sèche totalement à une possible erreur ou incompréhension de ma part, c'est pour cela que je vous demande un petit coup de main pour me dire ce qui cloche dans cette function ou tout simplement chez moi ^^.
    Thanks people !

    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
    <?php
    include_once("connexion.php");
     
     
    $conn = new PDO("mysql:host=$hostdb; dbname=$namedb", $userdb, $passdb, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
    $conn->exec("SET CHARACTER SET utf8");      // Sets encoding UTF-8
     
    $id_sess=$_COOKIE['cookie'];
     
    function remplirListFormateur(){
     
    global $id_sess, $conn;
    	try {
    		// Define and perform the SQL SELECT query
    		$reponse = $conn->query("SELECT sess_formateur, sess_formateur2, sess_formateur3, sess_formateur4, sess_formateur5 FROM sess WHERE sess_id = '".$id_sess."'");
     
    		while ($donnees = $reponse->fetch()){
    			$idFormateurs = $donnees['sess_formateur'].','.$donnees['sess_formateur2'].','.$donnees['sess_formateur3'].','.$donnees['sess_formateur4'];
    		}
    		$reponse->closeCursor();
     
    		$sql="SELECT formateur_id, formateur_nom, formateur_prenom FROM formateur WHERE formateur_id IN ('".$idFormateurs."')";
    		$result = $conn->query($sql);  
    		?>
    		<select name="list_formateur_cours">
    		<option value="0">Sélectionner un formateur</option>
    		<?php
     
    		while ($row = $result->fetch(PDO::FETCH_ASSOC))
    		{ ?>
    		<option value="<?php echo $row['formateur_id']?>"><?php echo $row['formateur_prenom'].' '.$row['formateur_nom']; ?></option>    
     
     
    		<?php}?>
    		</select>
    		<?php
    		$result->closeCursor();
     
    	} catch(PDOException $e) {
    		exit('<b>Catched exception at line '. $e->getLine() .' :</b> '. $e->getMessage());
    	}
     
    }

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Commence par afficher ta requête pour voir ce que tu executes réellement.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2013
    Messages : 65
    Points : 54
    Points
    54
    Par défaut
    J'y travaille, je mets une solution dès que je l'a trouve pour ceux ou celles qui en auraient besoin un jour, ça bloque au niveau de la condition IN ..

  4. #4
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2013
    Messages : 65
    Points : 54
    Points
    54
    Par défaut Solution possible
    En faite, la requete merdoullait car lorsque qu'un formateur n'etant pas present les virgules dans la premiere requete était tout de meme inséré, de ce fait j'ai fait comme ceci :
    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
    function remplirListFormateur(){
    	global $id_sess, $conn;
    		try {
    			// Define and perform the SQL SELECT query
    			$reponse = $conn->query("SELECT sess_formateur, sess_formateur2, sess_formateur3, sess_formateur4, sess_formateur5 FROM sess WHERE sess_id = '".$id_sess."'");
     
    			while ($donnees = $reponse->fetch()){
    				$form1 = $donnees['sess_formateur'];
    				$form2=$donnees['sess_formateur2'];
    				$form3=$donnees['sess_formateur3'];
    				$form4=$donnees['sess_formateur4'];
    				$form5=$donnees['sess_formateur5'];
    			}
    			$list=$form1;
    			if(!empty($form2)){ $list .=", ".$form2."";}
    			if(!empty($form3)){ $list .=", ".$form3."";}
    			if(!empty($form4)){ $list .=", ".$form4."";}
    			if(!empty($form5)){ $list .=", ".$form5."";}
     
    			$reponse->closeCursor();
     
    			$sql="SELECT formateur_id, formateur_nom, formateur_prenom FROM formateur WHERE formateur_id IN (".$list.")";
    			$result = $conn->query($sql);  
    			while ($row = $result->fetch(PDO::FETCH_ASSOC))
    			{ ?>
    				<option value="<?php echo $row['formateur_id']?>"><?php echo $row['formateur_prenom'].' '.$row['formateur_nom']; ?></option>    
    			<?php
    			}
     
    			$result->closeCursor();
     
    		} catch(PDOException $e) {
    			exit('<b>Catched exception at line '. $e->getLine() .' :</b> '. $e->getMessage());
    		}
     
    }

  5. #5
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Salut,

    tu peux grandement simplifier et sécuriser 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
    <?php
     
    function remplirListFormateur()
    {
        global $id_sess, $conn;
        try
        {
            // Define and perform the SQL SELECT query
            $sql = 'SELECT sess_formateur, sess_formateur2, sess_formateur3, sess_formateur4, sess_formateur5 FROM sess WHERE sess_id = '.intval($id_sess);
            $qry = $conn->query($sql);
            // tu ne récupères qu'un seul enregistrement, le while est inutile
            // on supprime les données vides
            $rows = array_filter($qry->fetch());
            $list = implode(', ', $rows);
     
            $sql = "SELECT formateur_id, formateur_nom, formateur_prenom FROM formateur WHERE formateur_id IN ({$list})";
            $qry = $conn->query($sql);
     
            // fonction d'échappement à l'affichage
            $hsc = function($p) { return htmlspecialchars($p, ENT_QUOTES, 'utf-8'); };
     
            while ($row = $qry->fetch(PDO::FETCH_ASSOC))
            {
                echo
    <<<HTML
    <option value="{$hsc($row['formateur_id'])}">{$hsc($row['formateur_prenom'])} {$hsc($row['formateur_nom'])}</option>    
    HTML;
            }
        }
        catch(PDOException $e)
        {
            exit('<b>Catched exception at line '. $e->getLine() .' :</b> '. $e->getMessage());
        }
    }
    Je pense que ta table est très mal conçue : 5 colonnes comme celles-là : sess_formateur, sess_formateur2, sess_formateur3, sess_formateur4, sess_formateur5 ! Ouch et tu vas modifier ta table à chaque fois que tu auras besoin d'un sess_formateurX ?
    C'est ingérable. Tu devrais reprendre ça...

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

Discussions similaires

  1. [MySQL] Remplir une liste déroulante avec php PDO
    Par Anibel dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 09/10/2013, 09h57
  2. [PDO] Liste déroulantes dynamiques php&PDO seulement submit()
    Par sangoke dans le forum PHP & Base de données
    Réponses: 12
    Dernier message: 23/04/2013, 14h05
  3. [MySQL] problème de liste déroulante avec php
    Par lamou23 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 07/06/2010, 21h12
  4. Réponses: 2
    Dernier message: 30/01/2010, 12h16
  5. [AJAX] avec 3 listes déroulantes liées php+xhtml+css+javascript+ajax
    Par Invité dans le forum Général JavaScript
    Réponses: 10
    Dernier message: 27/12/2008, 15h54

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