I've looked at several tutorials. I've rebuilt this numerous times. I've copied scripts. I cannot figure this out.
What I'm trying to do: A user fills a form on one page of the 3 or 4 variables they want to search the database for. On submit, the variables are passed to a php page to do a database query on the "descriptors" table and cross-references the same ID on another table so that they will see some the relevant info from that table as well.
What's happening: The scripting that has gotten me closest has a glitch. A search is done for an item that has 6 records in the database. The code is set to show 2 records per page, and pagination links at the bottom. The page shows correct information and the correct number of pages at the bottom... at first. When one of the page links is clicked for more records, it seems as if the query variables are lost. The page shows every single record in the database at two per page, with all 20 page numbers at the bottom. Not what I want.
I am new to PHP and completely at a loss. I'm sure the problem is the lost POST variable. But can't find a way to solve this. I tried turning the POST info into variables, but then the problem is that I get one record only and no pagination numbers.
Here's a stripped down version of the form from the first page:
<FORM action="results.php" style="border: 1px dotted red; padding: 2px" method="post" name="formsearch">
<input type="text" name="select1" value="" id="select1" /><br>
<input type="text" name="select2" value="" id="select2" /><br>
<input type="text" name="select3" value="" id="select3" /><br>
<input type="text" name="select4" value="" id="select4" /><br>
<input type="hidden" name="submitted" value="TRUE">
<input type="submit" value="Search" name="selected"/>
</form>
here's the code on the second page. I would put just the problem area code if I knew what the problem was:
<?php
require ('database.php');
// How many adjacent pages should be shown on each side?
$adjacents = 3;
/*
First get total number of rows in data table.
If you have a WHERE clause in your query, make sure you mirror it here.
*/
$query = "SELECT COUNT(*) as num
FROM
descriptors
JOIN
plantae ON (descriptors.plant_id = plantae.plant_name)
WHERE
descriptors.leaf_shape LIKE '%$select1%'
AND descriptors.leaf_venation LIKE '%$select3%'
AND descriptors.leaf_margin LIKE '%$select4%'";
$total_pages = mysql_fetch_array(mysql_query($query));
$total_pages = $total_pages[num];
/* Setup vars for query. */
$targetpage = "leafsearch4.php"; //your file name (the name of this file)
$limit = 2; //how many items to show per page
$page = $_GET['page'];
if($page)
$start = ($page - 1) * $limit; //first item to display on this page
else
$start = 0; //if no page var is given, set start to 0
/* Get data. */
$sql = "SELECT
descriptors.*
,plantae.*
FROM
descriptors
INNER JOIN
plantae ON (descriptors.plant_id = plantae.plant_name)
WHERE
descriptors.leaf_shape LIKE '%$select1%'
AND descriptors.leaf_venation LIKE '%$select3%'
AND descriptors.leaf_margin LIKE '%$select4%'
ORDER BY plantae.scientific_name ASC LIMIT $start, $limit";
$result = mysql_query($sql);
/* Setup page vars for display. */
if ($page == 0) $page = 1; //if no page var is given, default to 1.
$prev = $page - 1; //previous page is page - 1
$next = $page + 1; //next page is page + 1
$lastpage = ceil($total_pages/$limit); //lastpage is = total pages / items per page, rounded up.
$lpm1 = $lastpage - 1; //last page minus 1
/*
Now we apply our rules and draw the pagination object.
We're actually saving the code to a variable in case we want to draw it more than once.
*/
$pagination = "";
if($lastpage > 1)
{
$pagination .= "<div class=\"pagination\">";
//previous button
if ($page > 1)
$pagination.= "<a href=\"$targetpage?page=$prev\">« previous</a>";
else
$pagination.= "<span class=\"disabled\">« previous</span>";
//pages
if ($lastpage < 7 + ($adjacents * 2)) //not enough pages to bother breaking it up
{
for ($counter = 1; $counter <= $lastpage; $counter++)
{
if ($counter == $page)
$pagination.= "<span class=\"current\">$counter</span>";
else
$pagination.= "<a href=\"$targetpage?page=$counter\">$counter</a>";
}
}
elseif($lastpage > 5 + ($adjacents * 2)) //enough pages to hide some
{
//close to beginning; only hide later pages row 85 or 86
if($page < 1 + ($adjacents * 2))
{
for ($counter = 1; $counter < 4 + ($adjacents * 2); $counter++)
{
if ($counter == $page)
$pagination.= "<span class=\"current\">$counter</span>";
else
$pagination.= "<a href=\"$targetpage?page=$counter\">$counter</a>";
}
$pagination.= "...";
$pagination.= "<a href=\"$targetpage?page=$lpm1\">$lpm1</a>";
$pagination.= "<a href=\"$targetpage?page=$lastpage\">$lastpage</a>";
}
//in middle; hide some front and some back
elseif($lastpage - ($adjacents * 2) > $page && $page > ($adjacents * 2))
{
$pagination.= "<a href=\"$targetpage?page=1\">1</a>";
$pagination.= "<a href=\"$targetpage?page=2\">2</a>";
$pagination.= "...";
for ($counter = $page - $adjacents; $counter <= $page + $adjacents; $counter++)
{
if ($counter == $page)
$pagination.= "<span class=\"current\">$counter</span>";
else
$pagination.= "<a href=\"$targetpage?page=$counter\">$counter</a>";
}
$pagination.= "...";
$pagination.= "<a href=\"$targetpage?page=$lpm1\">$lpm1</a>";
$pagination.= "<a href=\"$targetpage?page=$lastpage\">$lastpage</a>";
}
//close to end; only hide early pages
else
{
$pagination.= "<a href=\"$targetpage?page=1\">1</a>";
$pagination.= "<a href=\"$targetpage?page=2\">2</a>";
$pagination.= "...";
for ($counter = $lastpage - (2 + ($adjacents * 2)); $counter <= $lastpage; $counter++)
{
if ($counter == $page)
$pagination.= "<span class=\"current\">$counter</span>";
else
$pagination.= "<a href=\"$targetpage?page=$counter\">$counter</a>";
}
}
}
//next button row 132
if ($page < $counter - 1)
$pagination.= "<a href=\"$targetpage?page=$next\">next »</a>";
else
$pagination.= "<span class=\"disabled\">next »</span>";
$pagination.= "</div>\n";
}
?>
<?php
echo '<table align="center" border=1 cellspacing="0" cellpading-"5">
<tr>
<td align="left"><b></b></td>
<td align="left"><b></b></td>
<td align="left"><b>Scientific name</b></td>
<td align="left"><b>Common name</b></td>
<td align="left"><b>Leaf shape</b></td>
</tr>';
while($row = mysql_fetch_array($result))
{
echo '<tr>
<td align="left"> <a href="link.php">View plant</a> </td>
<td align="left"> nothing here </td>
<td align="left">' . $row['scientific_name'] . '</td>
<td align="left">test' . $row['common_name'] . '</td>
<td align="left">' . $row['leaf_shape'] . '</td>
</tr>';
}
echo '</table>';
?>
<?=$pagination?>