[PHP] Remplir une liste déroulante à sa création

Résolu/Fermé
-
 PL29 -
Bonjour,

Je vous explique la situation :

J'ai sur ma page une liste déroulante remplie avec des noms d'utilisateurs via ma bdd Mysql
à côté de cette liste déroulante j'ai une zone de texte qui affiche l'adresse mail de l'utilisateur sélectionnée dans la liste. Jusque là tout va bien

La personne qui remplie le formulaire à la possibilité de sélectionner plusieurs utilisateurs c'est pour cela que j'ai ajouté un bouton "Ajouter un utilisateur" qui lui a pour but de créer une nouvelle liste déroulante à chaque click.

Et cette nouvelle liste déroulante se crée bien mais je ne sais pas du tout comment la remplir, je compte sur vous pour m'aider si vous le pouvez.

Merci pour vos futures réponses. :)

Voici mon code :

<script language="Javascript">

function plus(){
c=document.getElementById('cadre');
c2=c.getElementsByTagName('select');
ch=document.createElement('select');

ch.setAttribute('type','text');
ch.setAttribute('name','choixUsers'+(3+c2.length));
c.appendChild(ch);

document.getElementById('sup').style.display='inline';
}

function recup(){
//-- Recup de l'objet SELECT
var O_Select = document.getElementById('idSelec');
//-- Recup de l'index selectionne
var index = O_Select.selectedIndex;
top.document.location = "testModifForm.php?index="+index;
}
</script>




<html>
<body>
<form name="Form1" method="get">
<select name="la_selection" onclick='recup()' id="idSelec">

<?php
try
{
// On se connecte a MySQL
$bdd = new PDO('mysql:host=localhost;dbname=glpibd', 'root', '');
}
catch(Exception $e)
{
die('Erreur : ' . $e->getMessage());
}
//1ère requête récup des noms des utilisateurs dans l'ordre de leurs ID
$reponse = $bdd->query('SELECT name FROM glpi_users ORDER BY id ASC;');

while($donnees = $reponse->fetch())
{
?>
<!--Rempli la liste déroulante-->
<option><?php echo $donnees['name'];?></option>
<?php
}

$reponse->closeCursor(); // Termine le traitement de la 1ère requete

//2ème requête récup des adresses mails des utilisateurs dans l'ordre des ID utilisateurs
$reponse = $bdd->query("SELECT email FROM glpi_useremails WHERE glpi_useremails.users_id='".(2+($_GET['index']))."' ORDER BY users_id;");
while($donnees = $reponse->fetch())
{
?>
</select>
<input type="text" size="60" readonly value="<?php echo $donnees['email'];?>"></input>
<?php
}
// Termine le traitement de la 2ème requete
$reponse->closeCursor();
?>

<input type="button" size="60" onclick='plus()' value="Ajouter un utilisateur"></input>
<div id="cadre" style="margin-left:0px;width:230px"></div>

</form>
</body>
</html>



9 réponses

Messages postés
838
Date d'inscription
vendredi 2 novembre 2012
Statut
Membre
Dernière intervention
17 décembre 2015
126
Bonjour !
Question : Pourquoi ne pas faire une liste déroulante multiple tout simplement ?
Bonjour ! :)

J'avais pensé à faire une liste déroulante multiple mais elle n'est pas très adaptée dans le sens où comme tu peux le constater dans mon code je récupère l'index de l'objet sélectionné qui me sert dans la seconde requête sql (pour récupérer l'adresse mail)...

C'est pour cela que j'aimerai qu'il y ait autant de liste que de click sur le bouton "Ajouter"
Messages postés
838
Date d'inscription
vendredi 2 novembre 2012
Statut
Membre
Dernière intervention
17 décembre 2015
126
Je ne vois pas ce qui est gênant, tu fais une liste multiple nommé index[]
Tu aurais alors un Tableau en get/ou post que tu pourra traité pour ta seconde requête.
Merci pour tes réponses.


J'ai proposé ta solution, elle n'a pas été retenue...

Il faut une liste déroulante à claque clic

Aurais-tu une autre idée sur le remplissage des listes déroulantes créées ?
Messages postés
18
Date d'inscription
mercredi 11 juin 2014
Statut
Membre
Dernière intervention
17 juin 2014

Si tu peux utiliser jquery, c'est d'une simplicité presque enfantine :)


Ta fonction plus() devient :

var cptSelect=1;
function plus(){
cptSelect++;
c=document.getElementById('cadre');
c2=c.getElementsByTagName('select');
c2.clone().attr('id','nouvelID_'+cptSelect).appendTo(c);
}

J'ai ajouté une variable cptSelect pour créer un ID unique à chaque fois
Merci beaucoup pour ta réponse, je test ça et je te donne des nouvelles ;)
Re,

Mon code à beaucoup évolué depuis !

J'ai trouvé comment créer mes listes déroulantes remplies directement (par contre le remplissage se fait en dur, puisque ça ne marche pas en récupération depuis une base de données...) --> pas très grave !

Un autre problème se pose à moi maintenant : il faut que je récupère le nombre de clics (variable javascript) et envoyer sa valeur dans une autre page php (cible.php).
(Pour être plus précis faire d'un variable java une variable php).

Je sais que ce n'est pas possible sans utiliser GET en la passant par l'URL mais je ne veux pas puisque ça actualise la page et change les valeurs sélectionnées dans mes lites déroulantes.
Je sais également qu'on peut le faire en passant par l'Ajax mais je n'y connais rien donc si vous pouvez m'aider ce serait sympa !

Merci d'avance !

Mon code 'testModifForm1.php' :

[code]
<script language="Javascript">

var nbclics = 1;//la variable de nombre de clics

function plus(){
c=document.getElementById('cadre');
//création liste déroulante

for(var x=0;x<nbclics;x++)
{
//Variables servant à la création du div pour la liste déroulante
var divListe="c"+nbclics;
var newDivListe="ch"+nbclics;
//Variables servant à la création du div pour la Zone de Texte
var divZT="cc"+nbclics;
var newDivZT="chch"+nbclics;

//Création des div
divListe=c.getElementsByTagName('div');
newDivListe=document.createElement('div');

divZT=c.getElementsByTagName('div');
newDivZT=document.createElement('div');


//Attributs du Div, rajout d'un ID
newDivListe.setAttribute('id','listeDeroulante'+nbclics);
newDivListe.setAttribute('style','margin-left:0px;width:100px');

newDivZT.setAttribute('id','zt'+nbclics);
newDivZT.setAttribute('style','margin-left:105px;width:420px');
}

//Création d'un noeud 'enfant' rattaché au Div 'cadre'(parent)
c.appendChild(newDivListe);
c.appendChild(newDivZT);
}

function Ajout(){

//déclaration variable
var nomListe = "liste"+nbclics ;
var nomZT="zoneTexte"+nbclics;


//Récup de l'objet Div

for(var y=0;y<nbclics;y++)
{
var nomListe;
var nomZT;

//Récupération de l'objet par son ID (DIV)
nomListe=document.getElementById('listeDeroulante'+nbclics);
nomZT=document.getElementById('zt'+nbclics);

//Ecriture du code HTML permettant la création de la liste déroulante dans le DIV
nomZT.innerHTML = "<input type=\"text\" size=\"60\" readonly value="+nbclics+"></input>";
//Ecriture du code HTML permettant la création de la liste déroulante dans le DIV
nomListe.innerHTML = "<select name=\"choix"+nbclics+"\" style=\"width:100px\"><option><?php echo "glpi"; ?></option><option><?php echo "post-only"; ?></option><option><?php echo "tech"; ?></option><option><?php echo "normal"; ?></option></select>";
}
}
</script>



<html>
<body>
<form name="frm" method="post" action="cible.php">
<select name="choix" style="width:100">
<?php

try
{
// On se connecte a MySQL
$bdd = new PDO('mysql:host=localhost;dbname=glpibd', 'root', '');
}
catch(Exception $e)
{
die('Erreur : ' . $e->getMessage());
}
//1ère requête récup des noms des utilisateurs dans l'ordre de leurs ID
$reponse = $bdd->query('SELECT name FROM glpi_users ORDER BY id ASC;');

while($donnees = $reponse->fetch())
{
?>
<!--Rempli la liste déroulante-->
<option><?php echo $donnees['name'];?></option>
<?php
}

$reponse->closeCursor(); // Termine le traitement de la 1ère requete
?>
</select>

<input type="text" size="60" readonly ></input>
<!--<input type="button" size="60" onclick="nbclics++;Ajout();AjoutZoneTexte();" value="Ajouter un utilisateur"></input>-->
<img src="/glpi/pics/add_dropdown.png" onclick="nbclics++;plus();Ajout();">
<input type="submit" value="Valider" />
<div id="cadre" style="margin-left:0px;width:1000px">

</div>
</form>
</body>
</html>
/code


mon code 'cible.php' :
[code]
<?php

try
{
// On se connecte a MySQL
$bdd = new PDO('mysql:host=localhost;dbname=glpibd', 'root', '');
}
catch(Exception $e)
{
die('Erreur : ' . $e->getMessage());
}

?>
<form method="post" action="cible.php">
<select name="choix" style="width:100">
<?php
try
{
// On se connecte a MySQL
$bdd = new PDO('mysql:host=localhost;dbname=glpibd', 'root', '');
}
catch(Exception $e)
{
die('Erreur : ' . $e->getMessage());
}
//1ère requête récup le nom de l'utilisateur sélectionné
$reponse = $bdd->query("SELECT name FROM glpi_users WHERE glpi_users.name='".$_POST['choix']."';");

while($donnees = $reponse->fetch())
{
?>
<!--Rempli la liste déroulante-->
<option><?php echo $donnees['name'];?></option>
<?php
}

$reponse->closeCursor(); // Termine le traitement de la 1ère requete
?>
</select>

<?php


//2ème requête récup l'adresse mail de l'utilisateur sélectionné
$reponse = $bdd->query("SELECT email FROM glpi_useremails, glpi_users WHERE glpi_users.id=glpi_useremails.users_id AND glpi_users.name='".$_POST['choix']."';");
while($donnees = $reponse->fetch())
{
?>
<input type="text" size="60" readonly value="<?php echo $donnees['email'];?>"></input>
<?php
}
// Termine le traitement de la 2ème requete
$reponse->closeCursor();
?>
<input type="button" size="60" onclick='Ajout()' value="Ajouter un utilisateur"></input>
<input type="submit" value="Valider" />
</form>
/code
C'est encore moi !

Problème résolu donc pour le remplissage des listes malheureusement c'est pas en lien avec la base de données mais c'est pas grave pour le moment.

J'ai rusé pour récupérer la variable Java dans mon autre page php
et ça marche donc tout roule.