Après avoir épluché les différents forum dont celui ci, je ne trouve pas la solution a mon dilemme.
Voila, j'ai un formulaire avec 2 select multiple et je fais passer les infos d'une case à l'autre à l'aide de 2 boutons (ajouter/retirer)
Le soucis c'est que comme c'est fait, je n'arrive pas à transmettre le contenu d'un des select (attention pas les données sélectionné, mais l'ensemble du contenu, value + text) à la page php via "_POST"
J'ai trouvé des solutions sur les forums en utilisant [] dans le nom du select
<SELECT name="serveursjoint[]" size="10" multiple>
Le soucis, c'est que si je fais ça pour transmettre le contenu du select, je bousille mon programme en javascript qui permet de passer les données d'une liste à l'autre.
Je suis preneur donc de solutions.
Mes 2 fonctions javascript :
function ajoute_serveur()
{
// déclaration des tableaux
var selectedList = [];
// initialisation des variables
selectnum = 0; // contient le nombre de serveur à ajouter
nbserveurs = document.formappli.serveurs.options.length; // contient le nombre de serveurs non affectés
nbserveursjoint = document.formappli.serveursjoint.options.length; // contient le nombre de serveurs affectés
// on boucle pour récuperer la liste des serveurs à ajouter à l'application
for (i=0; i < document.formappli.serveurs.options.length; i++)
{
if ( document.formappli.serveurs.options[i].selected )
{
// on affecte l'objet selectionné au tableau
selectedList.push(document.formappli.serveurs.options[i]);
// on incrémente la valeur
selectnum++;
}
}
for (i=0; i < document.formappli.serveurs.options.length; i++)
{
if ( document.formappli.serveurs.options[i].selected )
{
// on supprime la valeur pour la déplacer dans l'autre case
document.formappli.serveurs.removeChild(document.formappli.serveurs.options[i]);
i--;
}
}
//une boucle pour parcourir l'ensemble des objets selectionnés (value = id_serveur) (text = nom_serveur)
for (i=0; i < selectnum ; i++)
{
longueur = parseInt(nbserveursjoint) + parseInt(i); // on incrémente la valeur max du select
//alert("liste " + selectedList[i].value + " " + selectedList[i].text + "inserer en " + longueur + "position");
// on rajoute les valeurs selectionné dans le select "serveursjoint"
document.formappli.serveursjoint.options[longueur] = new Option(selectedList[i].text, selectedList[i].value, false, false);
}
}
function retire_serveur()
{
// déclaration des tableaux
var selectedList = [];
// initialisation des variables
selectnum = 0; // contient le nombre de serveur à ajouter
nbserveurs = document.formappli.serveurs.options.length; // contient le nombre de serveurs non affectés
nbserveursjoint = document.formappli.serveursjoint.options.length; // contient le nombre de serveurs affectés
// on boucle pour récuperer la liste des serveurs à ajouter à l'application
for (i=0; i < document.formappli.serveursjoint.options.length; i++)
{
if ( document.formappli.serveursjoint.options[i].selected )
{
// on affecte l'objet selectionné au tableau
selectedList.push(document.formappli.serveursjoint.options[i]);
// on incrémente la valeur
selectnum++;
}
}
for (i=0; i < document.formappli.serveursjoint.options.length; i++)
{
if ( document.formappli.serveursjoint.options[i].selected )
{
// on supprime la valeur pour la déplacer dans l'autre case
document.formappli.serveursjoint.removeChild(document.formappli.serveursjoint.options[i]);
i--;
}
}
// une boucle pour parcourir l'ensemble des objets selectionnés (value = id_serveur) (text = nom_serveur)
for (i=0; i < selectnum ; i++)
{
longueur = parseInt(nbserveurs) + parseInt(i); // on incrémente la valeur max du select
// alert("liste " + selectedList[i].value + " " + selectedList[i].text + "inserer en " + longueur + "position");
// on rajoute les valeurs selectionné dans le select "serveurs"
document.formappli.serveurs.options[longueur] = new Option(selectedList[i].text, selectedList[i].value, false, false);
}
Je me doute que je pourrais améliorer le code, ça viendra plus tard Voici maintenant mon formulaire
<FORM name="formappli" method="POST" action="modif_appli.php">
<?php echo '<input type="hidden" name="id_appli" value="'.$ligne['id_APPLI'].'" >'?>
<B>Code Application</B>
<?php echo '<input type="text" name="code_appli" value="'.$ligne['CODE_APPLI'].'" >'?>
<BR>
<B>Application</B>
<?php echo '<input type="text" name="nom_application" value="'.$appli.'" >'?>
<BR>
<B>Serveurs associés</B>
<BR>
<SELECT name="serveursjoint" size="10" multiple>
<?php
while ($ligne2 = $resultat2->fetch_assoc())
{
echo '<OPTION value="'.$ligne2['id_SERVEUR'].'">'.$ligne2['NOM_SERVEUR'].'</OPTION>';
}
?>
</SELECT>
<input type="button" value="<<<<<" onclick="ajoute_serveur();"><input type="button" value=">>>>>" onclick="retire_serveur();">
<SELECT name="serveurs" size="10" multiple>
<?php
while ($ligneserveurs = $resultatserveurs->fetch_assoc())
{
echo '<OPTION value="'.$ligneserveurs['id_SERVEUR'].'">'.$ligneserveurs['NOM_SERVEUR'].'</OPTION>';
}
?>
</SELECT>
<BR>
<?php echo '<textarea rows="20" cols="50" name="commentaire">'.$ligne['COMMENTAIRE'].'</textarea>'?>
<BR>
<input type="submit" value="Mettre à jour"><input type="reset" value="Annuler">
</FORM>
Dans la page modif_appli.php
Je voudrais récupérer dans une variable l'équivalent de
$serveursjoint = $_POST['serveursjoint'];
Merci d'avance