Jump to content

Recommended Posts

Hi

 

I have problem with results pagination. When search is applied browser is showing me first 10 results, and links to other pages, but there is a problem with these links (passing variables i think). When i press on one of the links browser is showing me info that search input must be longer then 2 char. (so it clear that search input has not been passed thru the link.)

 

Here is the code:

 


else if(isset($_POST['submit'])||isset($_POST['search'])||isset($_GET['search'])) // when search button is pressed 
{ 

$PHP_SELF = $_SERVER['HTTP_REFERER']; 
        $search=$_POST["search"]; 
        
        $minchar = 2; 
        if (strlen($search) < $minchar) 
        { 
                echo    "<span class='info1'>Search must be longer than 2 characters.</span> 

        } 

        else 
                {        
                if(!isset($_GET['page'])){ 
        $page = 1; 
                } else { 
        $page = $_GET['page']; 
                } 
                $max_results = 10; 
                $from = (($page * $max_results) - $max_results); 
        
                $result = mysql_query("SELECT * FROM movies WHERE name LIKE '%$search%' 
            OR cast LIKE '%$search%' OR director LIKE '%$search%'  OR year LIKE '%$search%' OR production LIKE '%$search%' OR genere LIKE '%$search%' OR language LIKE '%$search%' ORDER BY name LIMIT $from, $max_results"); 
        
            $numrows=mysql_num_rows($result); 
            if ($numrows == 0) 
            { 
                        echo "<p>Sorry, your search returned 0 results</p> 
             } 
            else 
            { 
                while($row=mysql_fetch_array($result)) 
                {        
                include "display_rec.php"; 
                } 

$total_results = mysql_result(mysql_query("SELECT COUNT(*) as Num FROM movies WHERE name LIKE '%$search%' OR cast LIKE '%$search%' OR director LIKE '%$search%'  OR year LIKE '%$search%' OR production LIKE '%$search%' OR genere LIKE '%$search%' OR language LIKE '%$search%' ORDER BY name"),0); 

// Figure out the total number of pages. 
$total_pages = ceil($total_results / $max_results); 


// Build Page Number Hyperlinks 

// Build Previous Link 
if($page > 1){ 
    $prev = ($page - 1); 
    echo " 
        <td class='nav'><a href=\"".$_SERVER['PHP_SELF']."?search=$search&page=$prev\">Previous</a></td> 
        <td width='2'></td> 
"; 
} 

for($i = 1; $i <= $total_pages; $i++){ 
    if(($page) == $i){ 
        echo "<td class='nav'>$i</td> 
                <td width='2'></td>"; 
        } else {                        
            echo "<td class='nav'><a href=\"".$_SERVER['PHP_SELF']."?search=$search&page=$i\">$i</a></td> 
                        <td width='2'></td>"; 
    } 
} 

// Build Next Link 
if($page < $total_pages){ 
    $next = ($page + 1);                
    echo "<td class='nav'><a href=\"".$_SERVER['PHP_SELF']."?search=$search&page=$next\">Next</a><td>"; 
} 
                } 
} 

} 

 

go to http://www.webdev.nita-on-line.com/new/movies.php

 

to see this script in action - (search words that will give you more than 10 results - james, red - for example)

 

I need some help with this one ....

 

Thank you in advance.

 

Nita

Link to comment
https://forums.phpfreaks.com/topic/54955-solved-search-results-pagination-problem/
Share on other sites

you problems stems from the fact that $search is only set by $_POST['search'], when you click a pagination link it changes to a $_GET['search'] variable. I have altered your code slightly for you to incorporate this change from POST to GET

<?php

else if(isset($_POST['submit'])||isset($_POST['search'])||isset($_GET['search'])) // when search button is pressed 
{ 

$PHP_SELF = $_SERVER['HTTP_REFERER'];

//this is the changed bit here

if (isset $_GET['search']) //if this is set then a pagination link has been clicked
{
	$search = $_GET['search']; //use this as the search string
} 
else
{
	$search=$_POST["search"]; //otherwise use this 
}
        
        
        $minchar = 2; 
        if (strlen($search) < $minchar) 
        { 
                echo    "<span class='info1'>Search must be longer than 2 characters.</span> 

        } 

        else 
                {        
                if(!isset($_GET['page'])){ 
        $page = 1; 
                } else { 
        $page = $_GET['page']; 
                } 
                $max_results = 10; 
                $from = (($page * $max_results) - $max_results); 
        
                $result = mysql_query("SELECT * FROM movies WHERE name LIKE '%$search%' 
            OR cast LIKE '%$search%' OR director LIKE '%$search%'  OR year LIKE '%$search%' OR production LIKE '%$search%' OR genere LIKE '%$search%' OR language LIKE '%$search%' ORDER BY name LIMIT $from, $max_results"); 
        
            $numrows=mysql_num_rows($result); 
            if ($numrows == 0) 
            { 
                        echo "<p>Sorry, your search returned 0 results</p> 
             } 
            else 
            { 
                while($row=mysql_fetch_array($result)) 
                {        
                include "display_rec.php"; 
                } 

$total_results = mysql_result(mysql_query("SELECT COUNT(*) as Num FROM movies WHERE name LIKE '%$search%' OR cast LIKE '%$search%' OR director LIKE '%$search%'  OR year LIKE '%$search%' OR production LIKE '%$search%' OR genere LIKE '%$search%' OR language LIKE '%$search%' ORDER BY name"),0); 

// Figure out the total number of pages. 
$total_pages = ceil($total_results / $max_results); 


// Build Page Number Hyperlinks 

// Build Previous Link 
if($page > 1){ 
    $prev = ($page - 1); 
    echo " 
        <td class='nav'><a href=\"".$_SERVER['PHP_SELF']."?search=$search&page=$prev\">Previous</a></td> 
        <td width='2'></td> 
"; 
} 

for($i = 1; $i <= $total_pages; $i++){ 
    if(($page) == $i){ 
        echo "<td class='nav'>$i</td> 
                <td width='2'></td>"; 
        } else {                        
            echo "<td class='nav'><a href=\"".$_SERVER['PHP_SELF']."?search=$search&page=$i\">$i</a></td> 
                        <td width='2'></td>"; 
    } 
} 

// Build Next Link 
if($page < $total_pages){ 
    $next = ($page + 1);                
    echo "<td class='nav'><a href=\"".$_SERVER['PHP_SELF']."?search=$search&page=$next\">Next</a><td>"; 
} 
                } 
} 

} 
?>

 

Thank you paul2463

 

I applied your change and is working, but another issue came up.

While browsing search results (on pages wher number more then 1) i cant do another search (browser is displaying records from previous search). Have no clue why, seems like variable search is not getting new value.

 

go to http://webdev.nita-on-line.com/new/movies.php?search=james&page=2

to check it out ...

 

 

Need some help

 

Nita

 

 

 

The new problem now stems from what I did for you, because when you start a new search the $_GET variable is strill set so the new $_POST variable never gets set try changing the if part around such as

if (isset $_POST['search']) //if this is set then a new search has been initated
{
	$search = $_POST['search']; //use this as the search string
} 
else
{
	$search=$_GET["search"]; //otherwise continue with this 
}

Thanks again...

 

i spot the bug, it was in search form, i had to change value of action

from $php_self to movies.php and is all good now.

 

Just another think regarding result paging.

What i would like to do is that when results are on 1 page, browser will not display number of the page.

As is doing now.

 

I have following code for paging results.

 

// Build Page Number Hyperlinks
echo "
<table width='0' border='0' cellspacing='0' cellpadding='3' align='center'>
   <tr>";

// Build Previous Link

if($page > 1){
    $prev = ($page - 1);
    echo "	<td class='nav'><a href=\"".$_SERVER['PHP_SELF']."?search=$search&page=$prev\">Previous</a></td><td width='2'></td> ";
}

for($i = 1; $i <= $total_pages; $i++)
{
    if(($page) == $i){
        echo "<td class='nav'>$i</td><td width='2'></td>";
} 

else {			
            echo "<td class='nav'><a href=\"".$_SERVER['PHP_SELF']."?search=$search&page=$i\">$i</a></td><td width='2'></td>";
    }
}

// Build Next Link
if($page < $total_pages){
    $next = ($page + 1);		
    echo "<td class='nav'><a href=\"".$_SERVER['PHP_SELF']."?search=$search&page=$next\">Next</a><td>";
}
echo "</tr>
</table>";

 

Any advice...

Thank you in advance

 

Nita

 

This thread is more than a year old. Please don't revive it unless you have something important to add.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.