I tried many ways, but failed - so I thought using a sub could be a
workaround.
See codes below.


package Store::DisplayTable;
use strict;
use DBI;

use vars qw(@ISA @EXPORT);
require Exporter;
@ISA = qw(Exporter);
@EXPORT = qw(displayTable);

use lib qw(./Store);
use Store::Layout;
use Store::Config qw($images $currency);
use Store::DBConnect;

use vars qw($images $currency $counter);



##################################################
# Subroutine to display queries in tabular form.
# This function expects 3 arguments: query string,
# number of rows and a list of table headings.
##################################################

sub displayTable {

        print "Content-type: text/html\n\n";
        my ($query, $tableHead, $session_id) = @_;
        my @table_head = @$tableHead;
        top();    

        print qq(<table border="1" width="95%"
align="center"><tr><td>&nbsp;</td></tr>
        <tr><td>);

        my $rows = $counter; # Warning of uninitialized value.
        if ($rows == 0){
                print qq(<p><h3>Your search yield no result:</h3><br
/>&nbsp;</p>);
                print qq(</td></tr><tr><td>&nbsp;</td></tr></table>);
        } elsif ($rows == 1){
                print qq(<p><h3>Your search yield 1 result:</h3><br
/></p>);
                print qq(</td></tr><tr><td>&nbsp;</td></tr></table>);

        }else {
                print qq(<p><h3>Your search yield $rows
results:</h3><br>&nbsp;</p>);
                print qq(</td></tr><tr><td>&nbsp;</td></tr></table>);

        }





        # Fist of all - print a start table TAG.
        
        print qq(<table border="1" width="95%" cellspacing="2"
cellpadding="2" align="center">);
        print qq(<tr bgcolor="#5692cb">);

        # Print the table headings.

        print qq(<th>&nbsp;</th>);
    
        foreach my $heading (@table_head) {
                print qq(<th>$heading</th>);        

        }
    
        print qq(<th>&nbsp;</th></tr>);


        # Connect to database and execute query.

        my $dbh = dbConnect();

        my $sth = $dbh->prepare($query) || die "Can't
prepare:$query\n$DBI::errstr";
        $sth->execute();
    

        # Get the results as array.
    
        my $x = 0;    
        while (my @result = $sth->fetchrow_array()){
                $x++;
        
                # Index each row: set row colour based on their position
(odd or even numbers).
        
                if (($x % 2) == 0){
                        print qq(<tr bgcolor= "#e8e8e8">);
                }else { 
                        print qq(<tr bgcolor="#d0d0d0">); 
                }   
        
                print qq(<td width="7%">);

                if ($result[0] ne "&nbsp;"){
                        print qq(<a
href="../jupiterShop/item_details.pl?item=$result[1]">
                        <img src="$images/$result[0]" width="70"
height="64" alt="Click on image to see product detail." /></a></td>);
            
                }else { print qq(&nbsp;</td>); }

                print qq(
                <td><a
href="../jupiterShop/item_details.pl?item=$result[1]">$result[2]</a><br>
                <font size="-1">$result[3]</font></td>
                <td width="15%" align="center">$result[4]$currency</td>
                <td width="15%" align="center" valign="middle"><form
action="../jupiterShop/inCart.pl" 
                method="post">
                <input type="hidden" name="prodnr" value="$result[1]">
                <input type="text" name="quantity" value="1"  size="2"
maxlength="3" />&nbsp;
                <input type="image" src="$images/cart.gif" width="42"
height="29" alt="Place item in 
                shopping cart"/></form>
                <input type="hidden" name="session" value="$session_id">

                </td></tr>
                ); 
                
 
        }   

        # Pass the value $x to the sub to make it available above
without the pragma "use vars".
        $counter = $x;

        
        print qq(</table>);
        print qq(<table border="1" width="95%" align="center"><tr><td
height="10">&nbsp;</td></tr><tr><td>);


        print qq(page number: </td></tr><tr><td
height="10">&nbsp;</td></tr></table>);

        footer();
    
        $sth->finish();
        $dbh->disconnect();
}

sub counter{
   # my $counter = shift;
    return(my $counter) = shift;

}


1;

















||> -----Original Message-----
||> From: Charles K. Clarkson [mailto:[EMAIL PROTECTED]
||> Sent: Saturday, April 17, 2004 2:35 AM
||> To: 'B. Fongo'; [EMAIL PROTECTED]
||> Subject: RE: How do I make a variable globally accessible without
vars
||> 
||> B. Fongo <[EMAIL PROTECTED]> wrote:
||> :
||> : I get the usual warning "Use of uninitialized ." while trying
||> : to test a variable ($counter) which is initialized later in
||> : my script.
||> 
||>     Well that would make sense. The if statement below assumes
||> a value is in $counter. In perl undefined and 0 are both false.
||> 
||> : Using the pragma use vars ($counter) makes it sticky.
||> 
||>     1. Don't use this unless you are trying to create a global.
||>     2. Don't use globals.
||> 
||> 
||> : To avoid, I tried to work around it by passing it to a sub.
||> :
||> : my $counter = counter();
||> :
||> : if ($counter == 0){
||> 
||>     I don't know what you intend to accomplish with the
||> subroutine. Why not tell us what you want to do and we'll
||> help you get there.
||> 
||> 
||> 
||> HTH,
||> 
||> Charles K. Clarkson
||> --
||> Mobile Homes Specialist
||> 254 968-8328




-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>


Reply via email to