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

Reply via email to