[RESOLU] creation option select



  • Bonjour,

    Voilà j'essaie de créer dynamiquement les options d'un select en html, faisant partie d'un formulaire. Pour ce faire j'ai une fonction pour créer les options

    function createSelect ($name, $listeoption, $size=1, $multiple=FALSE) 
    { 	if($multiple) 
    		{ 
    		$name=$name."[]";
    		$m="MULTIPLE";
    		}
    	else $m="";
    
    	$resultat="<select name="$name" size="$size" $m >n"; // n rend la source html plus lisible
    
    	foreach($listeoption as $key=>$value){ 
    	     $resultat=$resultat."<option value="$key">$value</option>n";
    	}
    
    	$resultat=$resultat."&nbsp;</select>";
    
    	return $resultat;
    };
    

    Ensuite j'écris une requête pour avoir les infos venant de ma base de données. Normalement, cela crée un tableau que j'utilise pour la fonction et je devrais avoir tous les enregistrements sélectionnés qui créeront mes options de mon select. Pour cela, voici le code php:

    $query="select concat(etudiant.nom,' ',etudiant.prenom) as nomPrenom from etudiant order by nomPrenom"; //concat permet en Mysql de concatener les champs
    
    	$reponse = mysql_query($query) or die("Erreur SQL : $query<br/>".mysql_error());
    	$etudiant = mysql_fetch_assoc($reponse);
    
    $selectEtudiant= createSelect ("etudiant", $etudiant, 1);
    
    

    Ensuite je place simplement ma variable $selectEtudiant dans mon formulaire.

    Le résultat, c'est que je n'ai qu'une seule option qui est créé alors que la requête dans Mysql renvoit bien plusieurs enregistrements.

    Si vous avez besoin de plus d'explications, n'hésitez pas à demander.

    Merci d'avance pour votre aide.



  • mysql_fetch_assoc ne traite qu'une seule ligne de la reauete.
    Pour parcourir tous les champs, envoit le resultat total de la requete et utilise

    while($tmp=mysql_fetch_assoc($requete))
    


  • Merci pour l'info. J'avais déjà essayé avec le while mais je n'y etais pas arrive.

    Je n'arrive pas à construire le tableau (array) qui devrait me servir dans ma fonction createSelect.

    Auriez-vous des pistes ou la manière de faire?

    Merci d'avance.

    [EDIT]

    $query="select id_etudiant, concat(etudiant.nom,' ',etudiant.prenom) as nomPrenom from etudiant order by nomPrenom"; //concat permet en Mysql de concatener les champs
    
    	$reponse = mysql_query($query) or die("Erreur SQL : $query<br/>".mysql_error());
    	$etudiant = mysql_fetch_assoc($reponse);
    	$i=0;
    	$etudiant1=array();
    
    	while ($etudiant=mysql_fetch_assoc($reponse)){
    	$etudiant1["{$etudiant['id_etudiant']}"]=$etudiant['nomPrenom'];
    	}
    
    /*	while(mysql_num_rows($reponse) >= $i){
    	$etudiant1["{$etudiant['id_etudiant']}"]=$etudiant['nomPrenom'];
    	$i++;
    	}
    */
    	print_r($etudiant1);
    	echo('<br>');
    	print_r(mysql_num_rows($reponse));
    //$etudiant= array ("1"=>"sandrine", "2"=>"valéry", "3"=>"Test");
    
    $selectEtudiant= createSelect ("etudiant", $etudiant1, 1);
    

    Alors ça avance ms j'ai toujours un problème ^^

    Comme vous pouvez le voir dans le code, le premier while me retourne bien un tableau. Le seul problème est que le premier enregistrement du résultat de la requête n'est pas dans le tableau. J'ai par exemple 6 enregistrement (connu grâce à mysql_num_rows($reponse)) et mon tableau ne me retourne que 5 enregistrements.

    Avez vous une idée sur le pourquoi ou sur ce qu'il faut faire pour résoudre le problème?

    Si vous avez le temps, j'ai essayé de faire la même chose mais d'une manière différente. C'est le deuxième while qui lui est en commentaire. Celui la ne me renvoit qu'un seul enregistrement. Et je ne comprend vraiment pas pourquoi. C'est la question subsidiaire ;)

    Merci d'avance pour votre aide

    [/EDIT]



  • Supprime ca (ligne 4):

    $etudiant = mysql_fetch_assoc($reponse); 
    


  • Merci Arcanis pour la solution. Pas encore testé ms dès que j'ai le temps je le fais.

    Mais comme cela, cela me semble logique :)



  • Tester et approuvé ^^

    Un tout grand merci Arcanis :)




Log in to reply