Code : Tout sélectionner
array(2) {
[0] => array(2) {
["reseau"] => array(2) {
["id"] => int(1)
["nom"] => string(4) "Test"
}
["ips"] => array(10) {
[0] => string(10) "172.30.0.1"
[1] => string(10) "172.30.0.2"
[2] => string(10) "172.30.0.3"
[3] => string(10) "172.30.0.4"
[4] => string(10) "172.30.0.5"
[5] => string(10) "172.30.0.6"
[6] => string(10) "172.30.0.7"
[7] => string(10) "172.30.0.8"
[8] => string(10) "172.30.0.9"
[9] => string(11) "172.30.0.10"
}
}
[1] => array(2) {
["reseau"] => array(2) {
["id"] => int(2)
["nom"] => string(5) "Test2"
}
["ips"] => array(10) {
[0] => string(11) "172.30.0.11"
[1] => string(11) "172.30.0.12"
[2] => string(11) "172.30.0.13"
[3] => string(11) "172.30.0.14"
[4] => string(11) "172.30.0.15"
[5] => string(11) "172.30.0.16"
[6] => string(11) "172.30.0.17"
[7] => string(11) "172.30.0.18"
[8] => string(11) "172.30.0.19"
[9] => string(11) "172.30.0.20"
}
}
}

$query_reseau = $bdd->query("SELECT adresse_ip AS idd, RESEAUX.id_reseau AS idr, RESEAUX.nom_reseau AS inr FROM IP, RESEAUX WHERE IP.id_reseau = RESEAUX.id_reseau AND adresse_ip NOT IN (SELECT adresse_ip FROM IP_MAT) ORDER BY RESEAUX.nom_reseau, INET_ATON(adresse_ip)");
/* Création du tableau PHP des valeurs récupérées */
$reseaux = array();
/* Pour ne pas écraser mes tableaux, je crée un témoin */
$temoin_r = null;
while(false !== ($ligne = $query_reseau->fetch()))
{
/* Je vérifie si je suis toujours dans le même réseau, sinon je crée les tableaux nécessaires */
if ($temoin_r != $ligne['idr'])
{
$temoin_r = $ligne['idr'];
$nom_reseau = $ligne['inr'];
$reseaux[$temoin_r] = array(
'id' => $temoin_r,
'reseau' => $nom_reseau
);
}
/* J'ajoute l'adresse IP */
$reseaux[$temoin_r][] = $ligne['idd'];
}
/* Affichage de débogage à supprimer quand le résultat sera satisfaisant */
echo("<pre>\n");
var_dump($reseaux);
echo("</pre>\n");
ça donne :Code : Tout sélectionner
array(24) {
[30]=>
array(256) {
["id"]=>
string(2) "30"
["reseau"]=>
string(6) "BLABLA"
[0]=>
string(12) "192.168.56.1"
[1]=>
string(12) "192.168.56.2"
[...]$reseaux = array();$reseaux[] = array(
'reseau' => array(),
'ips' => array()
);
$reseaux[] = array(
'reseau' => array(
'id' => $ligne['idr'],
'nom' => $ligne['inr']
),
'ips' => array()
);
$numTableau = count($reseaux) -1;/* Création du tableau PHP des valeurs récupérées */
$reseaux = array();
/* Pour ne pas écraser mes tableaux, je crée un témoin */
$temoin_r = null;
while(false !== ($ligne = $query_reseau->fetch()))
{
/* Je vérifie si je suis toujours dans le même réseau, sinon je crée les tableaux nécessaires */
if($temoin_r != $ligne['idr'])
{
$start++;
$temoin_r = $ligne['idr'];
$reseaux[] = array(
'reseau' => array(
'id' => $ligne['idr'],
'nom' => $ligne['inr']
),
'ips' => array()
);
$numTableau = count($reseaux) -1;
}
}$reseaux[$numTableau]['ips'][] = $ligne['idd'];
Note bien les index utilisés.<select name="edit_reseau" style="text-align:center;" id="reseau" onchange="changeIP(tab,this.value);">
<option value="vide">- - - Sélectionnez le réseau - - -</option>
<?php
/* Construction de la première liste : on se sert du tableau PHP */
foreach ($reseaux as $nr => $value) {
?>
<option style="text-align:center;" value="<?php echo($nr); ?>"><?php echo $value['reseau']['nom']; ?></option>
<?php
}
?>
</select>
Du coup, ça m'affiche bien le nom des réseaux /* On sérialise le tableau obtenu pour traitement par JavaScript */
$chaine = htmlspecialchars(serialize($reseaux), ENT_QUOTES);
?>
<script type="text/javascript">
/* <![CDATA[ */
<!--
/*
* Ici, on transmets la chaîne sérialisée à JavaScript pour la transformer en tableau indexé JavaScript
*/
var tableau = new PhpArray2Js('<?php echo $chaine; ?>');
var tab = tableau.retour();
// -->
/* ]]> */
Je pense que ça vient de cette partie, PhpArray2JS n'est pas fait pour le tableau qu'on a créé ? Car le blocIP n'apparaît même plus après la sélection du réseau :<span style="text-align:center;" id="blocIP"></span><input type="hidden" name="recup_ip" id="recup_ip"/></td></tr>Code : Tout sélectionner
string(355) "[{"reseau":{"id":1,"nom":"Test"},"ips":["172.30.0.1","172.30.0.2","172.30.0.3","172.30.0.4","172.30.0.5","172.30.0.6","172.30.0.7","172.30.0.8","172.30.0.9","172.30.0.10"]},{"reseau":{"id":2,"nom":"Test2"},"ips":["172.30.0.11","172.30.0.12","172.30.0.13","172.30.0.14","172.30.0.15","172.30.0.16","172.30.0.17","172.30.0.18","172.30.0.19","172.30.0.20"]}]"var tab = <?php echo json_encode($chaine); ?>;
Et tu n'as plus besoin de l'étape intermédiaire avec la variable tableau.foreach ($reseaux as $key => $value) {
?>
<option style="text-align:center;" value="<?php echo $value['reseau']['id']; ?>"><?php echo $value['reseau']['nom']; ?></option>
<?php
}
On est d'accord, elle est bonne ? le fichier changeIP.js reçoit bien l'id de mon réseau ? Là, rien ne se passe, je n'ai même pas un message d'erreur pour m'aiguiller... Y'a pas moyen d'activer un message d'erreur pour JS ??Code : Tout sélectionner
TypeError: tab[idr][1] is undefined
[Stopper sur une erreur]
var nbd = tab[ idr ][1].length;Code : Tout sélectionner
tab[idr][1] is undefined