Optimisation liste déroulante liée

[Compte supprime]
Invité n'ayant pas de compte PHPfrance

25 mars 2013, 10:27

Bonjour,

Après la résolution du post précédent, je reviens pour effectuer une optimisation du code ! :mrgreen:
PS: Cyrano, j'espère que ton week-end framework n'a pas été trop éprouvant !

Alors, le script du post : php-avance/affichage-listes-deroulantes ... 67533.html fonctionne sans souci, aucun problème pour l'ajout d'une nouvelle IP !

Par contre, pour la modification d'une IP existante, il faut sur un page, affiché l'actuelle et afficher en-dessous le système de liste déroulante liée.. Ce qui est quand même dommage !

J'ai donc adapté le code pour que la liste déroulante sélectionne automatiquement l'entrée dans la liste déroulante sur la page de modification.

1ère idée :
<select name="edit_reseau" style="text-align:center;" id="reseau" onchange="changeIP(tab,this.value);">
                                        <option value="<?php echo $recup_numr; ?>"><?php echo $recup_nomr; ?></option>
                                        <?php                                        
                                        /* Construction de la première liste : on se sert du tableau PHP */
                                        foreach ($reseaux as $key => $value) {                                            
                                            ?>                                        
                                            <option style="text-align:center;" value="<?php echo $value['reseau']['id']; ?>"><?php echo $value['reseau']['nom']; ?></option>
                                            <?php                                            
                                        }
                                        ?>
                                    </select>
<tr><td class="td_modif_mini">Adresse IP</td><td>
                                    <span style="text-align:center;" id="blocIP"></span><input type="hidden" name="recup_ip" id="recup_ip"/></td></tr>
                           
Cette solution fonctionne, seul souci, le réseau apparaît 2 fois dans la liste, c'est pas la mort, mais c'est pas niquel... Ensuite, vu que le réseau est sélectionné à l'ouverture de la page, le "onchange" n'active pas le code JS, logique... Est-ce qu'il est possible de faire apparaître le champ AdresseIP au chargement de la même manière ? Je pourrais mettre un IF, si la variable GET pour l'adresseIP existe alors l'afficher... Mais dans ce cas, je ne pourrais pas re-modifier l'IP. Je dois passer cette variable au niveau du code JS, c'est le plus simple non ?

2ème idée, plus propre pour que le réseau sélectionné n’apparaissent pas 2 fois dans la liste :
<select name="edit_reseau" style="text-align:center;" id="reseau" onload="changeIP(tab,this.value);">
                                        <?php                                        
                                        /* Construction de la première liste : on se sert du tableau PHP */
                                        foreach ($reseaux as $key => $value) {
                                            echo "\t" . '<option value="' . $value['reseau']['id'] . '"';
                                            if ($value['reseau']['id'] == $recup_numr) {
                                                echo 'selected="selected"';
                                            }
                                            echo '>' . $value['reseau']['nom'] . '</option>' . "\n";                                                                                     
                                        }
                                        ?>
                                    </select>
                                </td></tr>
                            <tr><td class="td_modif_mini">Adresse IP</td><td>
                                    <span style="text-align:center;" id="blocIP"></span><input type="hidden" name="recup_ip" id="recup_ip"/></td></tr>
                           >
Malheureusement, ça fait déconner le script JS, il ne se passe plus rien même si on modifie le réseau après coup. FireBug ne log rien du tout... #-o

[Compte supprime]
Invité n'ayant pas de compte PHPfrance

25 mars 2013, 12:58

Trop de tests... Tue le test ! :tir2:

La 2ème solution fonctionne aussi ! C'est juste que j'ai changé "onchange" par "onload" pour faire un test...

Du coup, la 1ère partie est bonne, il faut juste que l'adresse IP actuelle soit sélectionné à l'ouverture de la page ! Je continue à chercher !!

[Compte supprime]
Invité n'ayant pas de compte PHPfrance

25 mars 2013, 13:31

J'ai trouvé une solution, je ne sais pas si elle est "propre", j'ai ajouté dans le body :
<body onload="IP('<?php echo $recup_ip ?>');">
Puis dans le fichier JS :

[javascript]function IP(ip)
{
var form_d = '<select name="ip" id="ip" style="text-align:center;" onchange="maj(this.value);">\n';
form_d += '<option value="'+ ip +'">'+ ip +'</option>\n';
form_d += '</select>\n';
document.getElementById("blocIP").innerHTML = form_d;
}[/javascript]

ça fonctionne ! Mais est-ce que c'est pas trop moche ?