CGI questions are often better addressed to [EMAIL PROTECTED]
>
> Hi everybody,
>
> I'm stuck trying to output multiple search results.
>
> I wrote this code but, and it outputs correctly the number of pages,
but it
> shows only the results for the first page no mater what link do I click.
>
> You can find the script in "action" at
> www.wiq.ro/cgi-bin/rointera/results.cgi
>
> Please look at the code and tell me where I'm wrong.
>
>
>
> _______________________________________________
>
> #!/usr/bin/perl
>
First place you are wrong is right here, you need,
use strict;
use warnings;
>
>
> use CGI qw( :standard );
>
> use CGI::Carp qw( fatalsToBrowser );
>
> my $q = new CGI;
>
> print $q->header;
>
> use DBI;
>
> my $user = "root";
>
> my $pass = "";
>
> my $source = "DBI:mysql:chestie";
>
> my $dbh=DBI->connect($source, $user, $pass, {RaiseError => 1});
>
>
>
> my $sql = qq{SELECT parola FROM parole};
>
This can be improved using a LIMIT clause so that you only select the
rows needed, this will improve performance on large result sets. This
early in the script you only need a total count of the rows possible,
use a COUNT(*) to select that specifically, it will be much more
efficient than getting all of the rows from the DB.
> my $sth = $dbh->prepare($sql);
>
> $sth->execute;
>
>
>
> while (my @row = $sth->fetchrow_array()){
>
I suspect (hope) you are going to do more with the result set than just
push to another array, if that is the case then switch to a
fetchrow_hashref so you can access into the fields by name, otherwise
you might want to use one of the 'selectall_' methods.
> push (@results, $row[0]);
>
> }
>
>
>
> $sth->finish;
>
> $result_count = @results;
>
> $pagesize = 5;
>
> $reqpage = 1;
I suspect this is your error, $reqpage is *always* 1, which means....
>
>
>
> if ($result_count != 0) {
>
> $pagecount = int($result_count / $pagesize);
>
> if (($pagecount * $pagesize) != $result_count) {
>
> $pagecount++;
>
> }
>
> }
>
>
>
>
>
> $firstresult = (($reqpage - 1) * $pagesize) + 1;
$firstresult will *always* be 1, because $reqpage (which is 1) -1 is
always 0, times *anything* is 0, +1 is always 1.
>
> $lastresult = $firstresult + $pagesize - 1;
>
Since $firstresult is 1, the above construct is negative, which seems a
little odd...
> if ($lastresult > $result_count) {
>
If lastresult is negative, it will never be larger than result count.
> $lastresult = $result_count;
>
> }
>
<snip rest of code>
Fix the above issues and see if that will get you going. This is one of
the more difficult things to do in CGI it seems. I also posted a rather
lengthy explanation of how to do this back in November that you can find
here:
http://groups.google.com/groups?q=result+pages+group:perl.beginners.cgi&hl=en&lr=&ie=UTF-8&group=perl.beginners.cgi&selm=3FC7B85D.6050508%40danconia.org&rnum=3
HTH,
http://danconia.org
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>