Soucis d'affichage tableau multidimensionnel

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Soucis d'affichage tableau multidimensionnel

Re: Soucis d'affichage tableau multidimensionnel

par olivierg » 22 juil. 2011, 15:55

nm, j'ai trouvé mon problème

Re: Soucis d'affichage tableau multidimensionnel

par olivierg » 22 juil. 2011, 15:42

mmh par contre ça ne fonctionne qu'avec le premier enregistrement de ma table de baies (inv_baie)

echo $tableau['A']['39']; // fonctionne
echo $tableau['CF']['31']; // ne fonctionne pas (undefined index CF)

que fais-je de mal dans ma requete ?
ma requette while exécute apparemment bien le premier élément, mais ne rempli pas le tableau avec les autres baies

Re: Soucis d'affichage tableau multidimensionnel

par olivierg » 22 juil. 2011, 15:39

quel con je crois que j'ai résolu mon soucis tout seul rien qu'en retirant le check sur le UxxUxx, il y a kkch qui n'allait pas avec ma condition if/elseif.

désolé xd

Re: Soucis d'affichage tableau multidimensionnel

par olivierg » 22 juil. 2011, 15:30

tiens déjà je n'ai plus la même erreur si je rajoute ça :
  // on recupere le nom et ID du rack
  $rack_name = $rack['baie_name'];
  $rack_id   = $rack['baie_id'];
  $tableau[$rack_name][] = array();                  // ligne rajoutée
  // on entre les serveurs de ce rack dans le tableau
j'ai la même erreur d'index mais uniquement sur la valeur :
PHP Notice: Undefined index: 37 in /app/ubskonsole/scripts/checkfreeslots.php on line 61
PHP Notice: Undefined index: 37 in /app/ubskonsole/scripts/checkfreeslots.php on line 61
PHP Notice: Undefined index: 37 in /app/ubskonsole/scripts/checkfreeslots.php on line 61
j'imagine que c'est parceque ma variable tableau est dans toutes ces boucles, du coup quand j'essaye de l'afficher "hors" de ces boucles, je peux pas la voir ?

Soucis d'affichage tableau multidimensionnel

par olivierg » 22 juil. 2011, 15:21

Hello

je suis en train de scripter un petit truc, mais je dois avoir un soucis quelque part et à force d'avoir les yeux dessus, je ne trouve pas ou es mon erreur. peut-être la verrez-vous plus vite (soucis dans la déclaration d'un des tableaux je pense.. ou autre.. j'ai du mal avec les tableaux, et c la première fois que j'essaye le multidimensionnel.. )

concrètemement, j'ai une table (inv_baie) contenant des noms de baie/racks (A, B, C, CF, DF, 7, 8 ..) numériques ou texte.
voici un extrait de cette table :

Code : Tout sélectionner

[889][root@JSS_GB][scripts]> query_db "SELECT baie_name, baie_id FROM inv_baie" baie_name baie_id A 1 B 2 CF 3 D 4 E 5 FF 6 G 7 I 8 H 9 2F 58 3F 59 4 60 5 61 6 62 7 63 1F 64 8 65 J 66 CB 67 FB 68 1B 69 2B 70 3B 71 K 72 [890][root@JSS_GB][scripts]>
ainsi qu'une table contenant des serveurs (inv_serveurs), et chaque serveur a une relation sur cette table (inv_serveurs.baie_id), donc chaque serveur a un emplacement dans une "baie".
j'ai un champ dans ma table inv_serveurs qui s'appelle baie_loc, qui est au format UXXUXX (par exemple U05U08).
(juste pour l'info, ca me permet de faire plusieurs choses sur certaines pages de mon intranet, notamment dessiner automatiquement des schémas de racks 42U, avoir l'emplacement exact de chaque serveur dans le rack etc).

aujourd'hui, je souhaite faire un petit script qui me donnera les U de libres dans chaque rack, j'ai déjà fait quasiment tout mon code (rapidement et salement), mais il y a un truc qui déconne, avant d'écrire la fin du code, j'essaye déjà juste d'afficher une valeur du tableau que j'ai fait, mais j'ai un bel " Undefined index:" qui s'affiche.

théoriquement, mon :
echo $tableau['A']['37'];
devrait m'afficher "filled" (pour dire que le U 37 dans le rack A est rempli). et ça ne fonctionne pas.
j'ai essayé de mettre un "echo $tableau[$rack_name]['37'];" dans la boucle principale prenant les baies(que j'appelle aussi rack) en compte, mais ça ne fonctionne pas.

il semble que le premier tableau $tableau[$baie_name] ne fonctionne pas.

help !

voici le code :
#!/usr/local/php/bin/php
<?php

include ("../config/mysqlconn.php");

// declaration du tableau (associatif) multidimensionnel pour chaque baie
$tableau[][] = array();

// variable pour U libres totaux (tous racks confondus)
$total_free_u = '0';

// pour chaque rack
$query_racks = 'SELECT baie_name, baie_id FROM inv_baie';
$req_query_racks = mysql_query($query_racks);
while ($rack = mysql_fetch_assoc($req_query_racks))
{
  // on recupere le nom et ID du rack
  $rack_name = $rack['baie_name'];
  $rack_id   = $rack['baie_id'];
  // on entre les serveurs de ce rack dans le tableau
  $query_srv = 'SELECT inv_baie.baie_name, inv_serveurs.baie_loc FROM inv_serveurs, inv_baie WHERE inv_serveurs.baie_id = inv_baie.baie_id AND inv_baie.baie_id = "'.$rack_id.'"';
  $req_query_srv = mysql_query($query_srv);
  while ($data = mysql_fetch_assoc($req_query_srv))
  {
    // on recupere le champ UxxUxx de l'equipement
    $champ_u = $data['baie_loc'];
    // si le champ UxxUxx n'est pas au bon format, on passe a l'enregistrement suivant
    if(!preg_match_all('/^[U-Uu-u][0-9][0-9][U-Uu-u][0-9][0-9]$/', $champ_u,$out)) {
        continue;
    } elseif ($champ_u = "NO") {
        continue;
    } else {
    // si le champ est bon, on le split
    $u_start = substr($champ_u, 1, 2);          // on récupère le U de départ
    $u_end   = substr($champ_u, 4, 5);          // on récupère le U d'arrivée
    // on vire le 0 en debut de U
    if (preg_match('/^0/', $u_start))
    {
      $u_start = str_replace("0","",$u_start);
    }
    // puis on met les U du champ UxxUxx dans le tableau
    for ($u=u_start; $u<=$u_end; $u++)
    {
      $tableau[$rack_name][$u] = "filled";
    }
    }
  }
  // fin ajout serveurs
}


echo $tableau['A']['37'];         // ici ça ne fonctionne pas (j'ai testé plusieurs choses, de mettre aussi dans la boucle au dessus etc.)

?>
et l'erreur :
PHP Notice: Undefined index: A in /app/ubskonsole/scripts/checkfreeslots.php on line 62