Thanks..

I managed to figure it out but yor mail was very instructional.

What I did was as follows
..some code...

$rows = $sth->fetchall_arrayref({});

my @AoH = @$rows;
for my $p (0..$#AoH) {

                        for my $bulle ( keys %{ $AoH[$p] } ) {

if (($AoH[$p]{$bulle}) =~ m/^[\d]+-[\d]+$/) {


my @fields = split /-/, ($AoH[$p]{$bulle}); my $nr1 = "-"; my $nr2 = "-"; $rows->[$p]->{Mobil} = $nr1.$fields[0].$fields[1]. $nr2; }
       }
}


Its probably not elegant but it gives me a chance to change the value of row "Mobil" before feeding it to the template. In this particular example it doesn do anything useful I was simply doing it to learn.

Your input was greatly appreciated and if you see me missing something obvious the give me a "holler". And thanks for the dumper idea..did really know about that.

Thomas


12 aug 2005 kl. 16.06 skrev Ragan, Steve:


To understand how to de-ref you must understand what it is you're trying to de-ref.

Lets assume you have a simple SQL query like this that returns first and last names from a table -

    my $sql = qq[
    SELECT first, last
      FROM persons
    ];

First you prepare and execute -

my $sth = $dbh->prepare($sql) || die("Unable to prepare statement");

    $sth->execute() || die("Database execute Error: $DBI::errstr");

then fetch the results. If you use the regular fetchall_arrayref(), you're getting an arrarref of arrayref structure. That is a reference to array of rows that itself is a reference to array of columns.
To help visualize the structure you can use the Data::Dumper module

    use Data::Dumper;

    my $ra_results = $sth->fetchall_arrayref();

    my $d = Data::Dumper->new([$ra_results], [qw(ra_results )] );


print '<pre>' . $d->Dump . '</pre>'; # if you in HTML, otherwise just print $d->Dump


The structure would appear something like this -

$ra_results = [
                [
                  'Duane',
                  'Allman'
                ],
                [
                  'Stevie Ray',
                  'Vaughn'
                ]
              ];


You could access specific rows and columns directly -

  First row -

    my $first_name = $ra_results->[0][0];
    my $last_name  = $ra_results->[0][1];

or loop through all rows accessing each column -

    for my $ra_row (@{$ra_results}) {
        my $first_name = $ra_row->[0];
          my $last_name  = $ra_row->[1];
          ...( more code here ) ...
    }




If you fetch using $sth->fetchall_arrayref({}), you're getting an arrarref of hashref structure. That is a reference to array of rows that itself is a reference to a hash of column name/column values.
If you use Data::Dumper again you'll see the structure looks like this

$ra_results = [
                {
                  'last' => 'Allman',
                  'first' => 'Duane'
                },
                {
                  'last' => 'Vaughn',
                  'first' => 'Stevie Ray'
                },
              ];


You would loop through that structure like this -

    my $ra_results = $sth->fetchall_arrayref({});

    for my $ra_row (@{$ra_results}) {
        for my $key (keys %{$ra_row}) {
            my $value = $ra_row->{$key};
           ...( more code here ) ...
        }
    }


If you're using TMPL_LOOP's you probably don't need to be munging around with that data structure anyway since you need to assign an arraryref of hasref to the param -

   $template->param(EMPLOYEE_INFO => $ra_results );


Check out the perl doc perldsc (Data Structures Cookbook) for a discussion on data structures and derefernencing.

Good luck
Steve
(Programmer, not soda jerk :)


Steve Ragan
Sr. Internet Developer
Harris Connect
2500 Westchester Ave.
Purchase, NY 10577
T 914.641.3948
F 914.641.3584
[EMAIL PROTECTED]
www.harrisconnect.com



-----Original Message-----
From: [EMAIL PROTECTED]
[mailto:[EMAIL PROTECTED] Behalf Of
Thomas Nyman
Sent: Friday, August 12, 2005 5:11 AM
To: html-template-users@lists.sourceforge.net
Subject: [htmltmpl] dereferencing issues


Hi

I've tried studying perldoc pages, the htmps template pages and most
things relating to dbi etc.

Despite this I have been unable to understand how to dereference
fetchall_arrayref({})

I can dereference fetchall_arrayref()  but not  fetchall_arrayref
( {} ), i.e the arrayref of hash refs.

I would like to query the database using fetchall_arrayref({}), the
dereference that and perhaps make changes to some values, put it back
into  an arrayref({}) and then dump it to html template.

SO far I'm stumped with the first part..i simply cant dereference the
*fg!?*-thing  <grinning> .. anyway, please is there some who can help
iterate through arrayref({}) (both key and value).

AN example

I query the database for "Name", "Adress", "Phone", "Fax", "Email"

the $rows = $sth->fetchall_arrayref({});

now i would like to dump my rows into an array and check for certain
values etc, for instance lets say the phonenumber is represented as
512445566 in the database, but i want it to display as 512-445566 in
the html-template..therefore i would need to access the "Phone"
query, check its format, possibly change it, insert the new value in
my arrayref of hashrefs.

(on my knees and waiting)

Thomas



-------------------------------------------------------
SF.Net email is Sponsored by the Better Software Conference & EXPO
September 19-22, 2005 * San Francisco, CA * Development Lifecycle Practices Agile & Plan-Driven Development * Managing Projects & Teams * Testing & QA Security * Process Improvement & Measurement * http://www.sqe.com/ bsce5sf
_______________________________________________
Html-template-users mailing list
Html-template-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/html-template-users

********************************************************************** ********************************************************************** **** This message (including any attachments) contains confidential information intended for a specific individual and purpose, and is protected by law. If you are not the intended recipient, please delete this message. Any disclosure, copying, or distribution of this message, or the taking of any action based on it, is strictly prohibited.

NOTE: Effective immediately, our name has changed from Bernard C. Harris Publishing Company to Harris Connect. As a result, our e- mail domain name is changing from [EMAIL PROTECTED] to [EMAIL PROTECTED] Please make the appropriate adjustments to any personal address book entries or contact information.




-------------------------------------------------------
SF.Net email is Sponsored by the Better Software Conference & EXPO
September 19-22, 2005 * San Francisco, CA * Development Lifecycle Practices
Agile & Plan-Driven Development * Managing Projects & Teams * Testing & QA
Security * Process Improvement & Measurement * http://www.sqe.com/bsce5sf
_______________________________________________
Html-template-users mailing list
Html-template-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/html-template-users

Reply via email to