[perl] table hash multidimensionnel

table hash multidimensionnel [perl] - Perl - Programmation

Marsh Posté le 23-04-2007 à 23:28:55    

bonjour tous,
j'ai un gros soucis de hash multidimensionnel.
je récupère une liste de liens dans une base mysql, je teste leur existence et je mets les faux dans un tableau, par site (puisque 1 site peut avoir plusieurs liens dans la BD).
ensuite j'envoie un mail à chaque site avec la liste de SES liens faux.
mon problème : ça liste TOUS les liens de TOUS les sites à chaque fois.
 
le code :  

Code :
  1. # prendre tous les liens
  2. $query = "SELECT * FROM liens";
  3. $sth = $dbh->prepare($query);
  4. $sth->execute;
  5.  
  6. # enregistrer les url fausses
  7. my %site_list = {};
  8. while ($data = $sth->fetchrow_hashref()) {
  9.     $nb_liens++;
  10.     # test url
  11.     $etat = &check_url($data->{'url'});
  12.     if ($etat eq "ok" ){
  13.         $nb_ok++;
  14.     } else {
  15.         my %h = {};
  16.         #on index chaque url par nom
  17.         $h->{$data->{'lien_nom'}} = $data->{'url'};
  18.         #on index par site
  19.         $site_list->{$data->{'site_id'}} = $h;   
  20.         $nb_bad_liens++;
  21.     }
  22. }
  23. my $list_l;
  24. for my $id (keys %{$site_list}) {
  25.     # infos site
  26.     $query = "SELECT site_nom FROM sites WHERE site_id = '$id' LIMIT 1";
  27.     $sth = $dbh->prepare($query);
  28.     $sth->execute;
  29.     $data_site = $sth->fetchrow_hashref();
  30.     $site_nom = $data_site->{'site_nom'};
  31.    
  32.     # infos webmestre
  33.     $query = "SELECT * FROM webmestres WHERE site_id = '$id' LIMIT 1";
  34.     $sth = $dbh->prepare($query);
  35.     $sth->execute;
  36.     $data_wbm = $sth->fetchrow_hashref();
  37.     $wbm_nom =     $data_wbm->{'wbm_nom'};
  38.     $wbm_prenom = $data_wbm->{'wbm_prenom'};
  39.     $wbm_email = $data_wbm->{'wbm_email'};
  40.    
  41.     # liste des liens
  42.     $list_l = '';
  43.     for my $name (keys %{$site_list->{$id}}){
  44.         $list_l .= "'$name' - " . $site_list->{$id}->{$name} . "\n";   
  45.     }
  46.  
  47.     # envoyer l'email
  48.     $msg= <<_EOM_;
  49. Bonjour $wbm_prenom $wbm_nom,
  50. Vous êtes webmestre du site "$site_nom" inscrit sur l'annuaire.
  51. Un ou plusieurs liens enregistrés dans l'annuaire pour votre site semblent inaccessibles :
  52. $list_l 
  53. ####### etc... (et envoi)


je pense que ça débloque au niveau de
for my $name (keys %{$site_list->{$id}})
mais je comprends pas comment lister que les enregistrements de chaque id à la fois.
 
merci d'avance

Reply

Marsh Posté le 23-04-2007 à 23:28:55   

Reply

Marsh Posté le 23-04-2007 à 23:50:05    

Bonsoir,
 
Tu as déja testé avec un site en particulier avant de faire des tableaux ? ca fonctionne ?

Reply

Marsh Posté le 28-04-2007 à 13:14:05    

C'est OK
je suis + PHPiste que Perliste alors j'ai du mal avec les hash et autres tablos, références aux tableaux et tout.
Mais en fait, transformer

Code :
  1. my %h = {};
  2.                 $h->{$data->{'lien_nom'}} = $data->{'url'};
  3.                $site_list->{$data->{'site_id'}} = $h;


en
 

Code :
  1. $site_list->{$data->{'site_id'}}{$data->{'lien_nom'}} = $data->{'url'};


 
et ça marche !
problème réglé (en tout cas celui-ci ;))

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed