Hi there!
I finally managed to do paging BUT it works only when i manually give 'category' a value.
If i use $_POST[category] a warning occurs and no result is posted:
Warning: Invalid argument supplied for foreach() in
C:...\a.php on line 71

Here is my code in the a.php file:
<?php include("header.php"); php?>

<?php
require_once 'Pager.php';
$db = DB::connect('mysql://root:@localhost/db');

$sql = "SELECT title,year
FROM document AS doc
WHERE year between 1995 and 2005
AND category='$_POST[category]'";
// Find our starting Row
$from = $_GET;
if (!is_numeric($from)){
$from = 0; }
// We'll limit the rows to 10 per page
$limit = 2;

// Get the total number of rows and build our pager
$nrows =& $db->getRow('SELECT count(*)
FROM document AS doc
WHERE year between 1995 AND 2005
AND category='$_POST');
$data = DB_Pager::getData($from, $limit, $nrows[0]);

// Grab 2 rows using PEAR:B limitQuery function
$res = $db->limitQuery($sql, $from, $limit);
// Display the rows
print("<p><HR width=100% size=4 noshade><p>");

// Build our pager
echo $data . ' Results found -- ';
echo 'displaying '. $data . ' results per page<br><br>';

// Create a header showing which page we're on
echo '<h4> Page '. $data . ' of ' . $data . '</h4>';

print("<p><TABLE border=1>\n");
print("<TR><TD><center><b>year</b></center></TD>
<TD><b><center>title</center></b>
</TR>");
while ($row = $res->fetchRow()) {
print("<TR ALIGN=LEFT VALIGN=TOP>");
print("<TD>$row[2]</TD>");
print("<TD>$row[1]</TD>");
}
print("</TR></TABLE><p>");

//echo "Jump to page: ";
// Unless we're on the first page, show a link to the previous page
if ($data != $data){
echo '<a href="'. "$PHP_SELF?from=" . $data .'">&lt;&lt; Prev </a>';
}
// Direct link to pages
foreach ($data as $page => $start_row) {
echo "[ <a href='$PHP_SELF?from=$start_row'>$page</a> ] ";
}
// Unless we're on the last page, show a link to the next page
if ($data != $data){
echo '<a href="'. "$PHP_SELF?from=" . $data . '">Next>> </a>';
}
?>
<?php include("footer.php"); php?>
Thanks for your time.
Cali

Recommended Answers

All 4 Replies

Right, in the first few lines, I have a few comments.

Firstly, you cannot do this:

<?php -CODE HERE- php?>
// The above example is WRONG. You can do either of the following:

<?php -CODE HERE- ?>
--or--
<? -CODE HERE- ?>
// for code snippets, or...

<?=$var ?>
// to echo a variable.

Second, the reuire_once function was called incorrectly. Here's how to do it:

<?php
require_once('Pager.php');
//          ^-----------^---Note the parenthesis. =)
?>

Lastly, your POST variable is called wrong. Try this:

$sql = "SELECT title,year
FROM document AS doc
WHERE year between 1995 and 2005
AND category='" . $_POST['category'] . "';";

Hope my tips helped you. =)

Thank you for yuor time!
Well the parethensis is not obligatory, that works ok!
And the php?> also works fine. I'm also used to use ?> and not php?> in general.
Concerning the sql query,it is the first time I see using the ';'of the sql command in the query.That didn't cause any warning or problem. Queries can work without it as well. They do to me in other code. I have tried to write $_POST[] in different ways, none of them worked.
I can't understad if there is something else, and it's not the _POSt[] that I'm testing.

Probably you use $_POST[category] in your first db query rather than $_POST.

You may want to tidy up your code by listing all the variables before query to db and other actions. eg. $category = $_POST; etc for each variable to be used in the script.

Yes you are right, the '' are missing there. It is correct in my code that I'm testing, the problem is with the foreach function as I already said. And I can't find any connection with it.Here is what it posts:
Warning: Invalid argument supplied for foreach() in C:\Program Files\Apache Group\Apache2\htdocs\.....php on line....

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.