Bonjour à tous, je me suis cassé la tête toute la nuit, et je crois que je ne comprend rien aux array, je n'arrive pas à trouver de solution.. Mon problème est que je voudrais créer une liste déroulante en récupérant toutes les infos en une fois, et non en faisant une boucle while.

en while j'ai fait ça qui fonctionne très bien:

function liste_deroulante(){
$sql5 = 'SELECT cal_name, cal_duration FROM webcal_entry ';
$req5 = dbi_query($sql5);

echo '<select name="patients">';

while ($donnees = mysql_fetch_array($req5)){
echo '<option value="'.$donnees['cal_name'].'">'.$donnees['cal_name'].'</option>';
}
echo '</select>';
}


je l'intègre au script de cette façon:

$eventsStr .= liste_deroulante();


en foreach je sèche, je n'arrive à récupérer que le premier résultat

function liste_deroulante(){
$sql5 = 'SELECT cal_name, cal_duration FROM webcal_entry ';
$req5 = mysql_query($sql5);

$donnees = mysql_fetch_assoc($req5);

foreach($donnees as $element)
{
return '<option value="'.$donnees['cal_name'].'">'.$donnees['cal_name'].'</option>';
}

}


je l'intègre au script de cette façon:

$eventsStr .= '<select name="patients">'.liste_deroulante().'</select>';


quelqu'un aurait-il une solution?
Personnellement, je n'aurai pas mis le foreach dans la fonction.
Je ferai comme ça, pour la fonction :

function liste_deroulante(){
$sql5 = 'SELECT cal_name, cal_duration FROM webcal_entry ';
$req5 = mysql_query($sql5);

$donnees = mysql_fetch_assoc($req5);
return $donnees
}


et comme ça pour l'affichage des données :

echo '<select name="patients">';
foreach($donnees as $element){
echo '<option value="'.$donnees['cal_name'].'">'.$donnees['cal_name'].'</option>';
}
echo '</select>';


au lieu de :

$eventsStr .= '<select name="patients">'.liste_deroulante().'</select>';


Essaye ça, et dis-moi ce que tu en penses ?

PS : je n'ai pas essayé le code que je te montre, mais dans la logique, il est bon.
Modifié par jeff-roland (21 Jul 2013 - 16:18)
malheureusement ça ne fonctionne pas non plus. Et en fait je n'ai pas le choix, je dois passer par l'affichage de la façon suivante:

$eventsStr .= ;


car en fait c'est une fonction qui se construit selon les résultats des différentes requêtes au fur et à mesure de l'exécution du script
Ca ne marche pas car je n'ai pas appelé la fonction lors de l'affichage des données :



$donnees = liste_deroulante();
echo '<select name="patients">';
foreach($donnees as $element){
echo '<option value="'.$donnees['cal_name'].'">'.$donnees['cal_name'].'</option>';
}
echo '</select>';


normalement, ça devrait marcher.