I dunno if it's an array or a reference ot an array anymore, heh.
Whats happening, is instead of this thing pulling all 3 of my domains from a
database, it's pulling the first domain in the list as many times as I have
domains for. So when I only had 2 domains in the db for myself, it listed
hte first twice. I added a 3rd ot test the theory, and behold, I get hte
first one 3 times.
Here is some massive subroutinage..
sub post_search_form {
my $state = shift;
my %args = $state->{q};
$state->{template} = 'generic.tmpl';
$state->{title} = "User Search";
my $blah = "";
my $where;
my %search;
$search{USER} = $state->{q}{user} if $state->{q}{user};
$search{ISP} = $state->{q}{isp} if $state->{q}{isp};
$search{PWORD} = $state->{q}{pword} if $state->{q}{pword};
if ($state->{q}{name}) {
($search{FIRST}, $search{LAST}) = split("
",$state->{q}{name});
}
$search{H_PHONE} = $search{W_PHONE} = $search{D_PHONE} =
$search{C_PHONE} = $state->{q}{phone} if $state->{q}{phone};
$search{EMAIL1} = $search{EMAIL2} = $search{EMAIL3} =
$search{EMAIL4} = $state->{q}{email} if $state->{q}{email};
$search{STATICIP} = $state->{q}{staticip} if $state->{q}{staticip};
$search{DOMAIN} = $state->{q}{domain} if $state->{q}{domain};
$search{ACCNUM} = $state->{q}{accnum} if $state->{q}{accnum};
foreach (keys %search) {
if ($_ eq "DOMAIN") {
$where .= "domain.$_ LIKE \"\%$search{$_}\%\" AND ";
} elsif ($_ eq m/PHONE/) {
$where =~ s/ AND $/ OR /;
$where .= "users.$_ LIKE \"\%$search{$_}\%\" OR ";
} else {
$where .= "users.$_ LIKE \"\%$search{$_}\%\" AND ";
}
}
$where =~ s/ OR $//;
$where =~ s/ AND $//;
my %user_list = get_users($where);
foreach (keys %user_list) {
my $user = $_;
foreach (@{$user_list{$user}{DOMAIN}}) {
$user_list{$user}{DOMAINS} .=
"$user_list{$user}{DOMAIN}[$_],";
}
chop($user_list{$user}{DOMAINS});
$blah .=
"<tr><td>$_</td><td>$user_list{$_}{ISP}</td><td>$user_list{$_}{PWORD}</td><t
d>$user_list{$_}{FIRST}
$user_list{$_}{LAST}</td><td>$user_list{$_}{H_PHONE},$user_list{$_}{W_PHONE}
,$user_list{$_}{C_PHONE},$user_list{$_}{D_PHONE}</td><td>$user_list{$_}{EMAI
L1},$user_list{$_}{EMAIL2},$user_list{$_}{EMAIL3},$user_list{$_}{EMAIL4}</td
><td>$user_list{$_}{STATICIP}</td><td>$user_list{$_}{DOMAINS}</td><td>$user_
list{$_}{ACCNUM}</td></tr>";
}
$args{body} =<<EOF;
<center>
<table width="100%" border="1">
<tr><td>user</td><td>isp</td><td>password</td><td>name</td><td>phone</td><td
>email</td><td>
static ip</td><td>domain</td><td>service number</td></tr>
$blah
</table>
</center>
EOF
return output_html($state, %args);
}
sub get_users {
my $where = shift;
my %search;
my %user_list;
my $sth =
$Sql->select("ISP,USER,PWORD,FIRST,LAST,H_PHONE,W_PHONE,C_PHONE,D_PHONE,EMAI
L1,EMAIL2,EMAIL3,EMAIL4,STATICIP,ACCNUM","users","$where");
while (my $row = $sth->fetchrow_hashref) {
$user_list{$row->{USER}} = {
ISP => $row->{ISP},
PWORD => $row->{PWORD},
FIRST => $row->{FIRST},
LAST => $row->{LAST},
H_PHONE => $row->{H_PHONE},
W_PHONE => $row->{W_PHONE},
C_PHONE => $row->{C_PHONE},
D_PHONE => $row->{D_PHONE},
EMAIL => $row->{EMAIL},
STATICIP => $row->{STATICIP},
ACCNUM => $row->{ACCNUM},
};
}
foreach my $user (keys %user_list) {
$sth = $Sql->select("DOMAIN","domain","USER='$user'");
while (my $row = $sth->fetchrow_hashref) {
push @{$user_list{$user}{DOMAIN}}, $row->{DOMAIN};
warn "$row->{DOMAIN}";
}
}
return %user_list;
}
That warn statement in sub get_users generates this in my error_log file
www.blah.org at /home/httpd/ttms/perl/SQLCrap.pm line 145.
www.boop.com at /home/httpd/ttms/perl/SQLCrap.pm line 145.
www.fucker.com at /home/httpd/ttms/perl/SQLCrap.pm line 145.
And yet displayed on the webpage is
www.blah.org,www.blah.org,www.blah.org
So uh... what am I doing wrong?
Dennis