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 :
- # prendre tous les liens
- $query = "SELECT * FROM liens";
- $sth = $dbh->prepare($query);
- $sth->execute;
-
- # enregistrer les url fausses
- my %site_list = {};
- while ($data = $sth->fetchrow_hashref()) {
- $nb_liens++;
- # test url
- $etat = &check_url($data->{'url'});
- if ($etat eq "ok" ){
- $nb_ok++;
- } else {
- my %h = {};
- #on index chaque url par nom
- $h->{$data->{'lien_nom'}} = $data->{'url'};
- #on index par site
- $site_list->{$data->{'site_id'}} = $h;
- $nb_bad_liens++;
- }
- }
- my $list_l;
- for my $id (keys %{$site_list}) {
- # infos site
- $query = "SELECT site_nom FROM sites WHERE site_id = '$id' LIMIT 1";
- $sth = $dbh->prepare($query);
- $sth->execute;
- $data_site = $sth->fetchrow_hashref();
- $site_nom = $data_site->{'site_nom'};
-
- # infos webmestre
- $query = "SELECT * FROM webmestres WHERE site_id = '$id' LIMIT 1";
- $sth = $dbh->prepare($query);
- $sth->execute;
- $data_wbm = $sth->fetchrow_hashref();
- $wbm_nom = $data_wbm->{'wbm_nom'};
- $wbm_prenom = $data_wbm->{'wbm_prenom'};
- $wbm_email = $data_wbm->{'wbm_email'};
-
- # liste des liens
- $list_l = '';
- for my $name (keys %{$site_list->{$id}}){
- $list_l .= "'$name' - " . $site_list->{$id}->{$name} . "\n";
- }
-
- # envoyer l'email
- $msg= <<_EOM_;
- Bonjour $wbm_prenom $wbm_nom,
- Vous êtes webmestre du site "$site_nom" inscrit sur l'annuaire.
- Un ou plusieurs liens enregistrés dans l'annuaire pour votre site semblent inaccessibles :
- $list_l
- ####### 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