troubleshooting Question

PHP to search a MySQL database and return paged results

Avatar of shinnmill
shinnmill asked on
PHPWordPressMySQL Server
5 Comments3 Solutions1505 ViewsLast Modified:
hi,

in wordpress, i'm trying to use a php form to access a mysql database and return paged results based on search results. it's working fine except for paged results - prev and next.

seems that the $PHP_SELF variable is returning index.php

form and paged results work outside of wordpress, but not in wordpress.

here's code i'm using:

<?php
/**
 * Template Name: Search Nutrition Page
 *
 * @package Mysitemyway
 * @subpackage Template
 */
global $mysite;
get_header(); ?>

<?php if( isset( $mysite->is_blog ) ) : ?>
	
	<?php get_template_part( 'loop', 'index' ); ?>
	
<?php else : ?>
	
	<?php if ( have_posts() ) while ( have_posts() ) : the_post(); ?>

		<div id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
	
			<?php mysite_before_entry(); ?>
			
			<div class="entry">
				<?php the_content(); ?>
				
				<div class="clearboth"></div>
				
<form name="form" method=post">
  <input type="text" name="q" />
  <input type="submit" name="Submit" value="Search" />
</form>

<?php

  // Get the search variable from URL

  $var = @$_GET['q'] ;
  $trimmed = trim($var); //trim whitespace from the stored variable

// rows to return
$limit=10; 

// check for an empty string and display a message.
if ($trimmed == "")
  {
  echo "<p>Please enter a search...</p>";
  exit;
  }

// check for a search parameter
if (!isset($var))
  {
  echo "<p>We dont seem to have a search parameter!</p>";
  exit;
  }

//connect to your database ** EDIT REQUIRED HERE **
mysql_connect("localhost","bunbelle_nutadm","FoodFacts"); //(host, username, password)

//specify database ** EDIT REQUIRED HERE **
mysql_select_db("bunbelle_nutrition") or die("Unable to select database"); //select which database we're using

// Build SQL Query  
$query = "select `Shrt_Desc`, `Protein_(g)` from `Abbrev` where `Shrt_Desc` like \"%$trimmed%\"  
  order by `Shrt_Desc`"; // EDIT HERE and specify your table and field names for the SQL query

 $numresults=mysql_query($query);
 $numrows=mysql_num_rows($numresults);

// If we have no results, offer a google search as an alternative

if ($numrows == 0)
  {
  echo "<h4>Results</h4>";
  echo "<p>Sorry, your search: &quot;" . $trimmed . "&quot; returned zero results</p>";

// google
 echo "<p><a href=\"http://www.google.com/search?q=" 
  . $trimmed . "\" target=\"_blank\" title=\"Look up 
  " . $trimmed . " on Google\">Click here</a> to try the 
  search on google</p>";
  }

// next determine if s has been passed to script, if not use 0
  if (empty($s)) {
  $s=0;
  }

// get results
  $query .= " limit $s,$limit";
  $result = mysql_query($query) or die("Couldn't execute query");

// display what the person searched for
echo "<p>You searched for: &quot;" . $var . "&quot;</p>";

// begin to show results set
echo "Results<br/>";
$count = 1 + $s ;

// now you can display the results returned
  while ($row= mysql_fetch_array($result)) {
  $title = $row["Shrt_Desc"] . $row['Protein_(g)'] ;

  echo "$count.)&nbsp;$title<br />" ;
  $count++ ;
  }

$currPage = (($s/$limit) + 1);

//break before paging
  echo "<br />";

  // next we need to do the links to other results
  if ($s>=1) { // bypass PREV link if s is 0
  $prevs=($s-$limit);
  print "&nbsp;<a href=\"$PHP_SELF?s=$prevs&q=$var\">&lt;&lt; 
  Prev 10</a>&nbsp&nbsp;";
  }

// calculate number of pages needing links
  $pages=intval($numrows/$limit);

// $pages now contains int of pages needed unless there is a remainder from division

  if ($numrows%$limit) {
  // has remainder so add one page
  $pages++;
  }

// check to see if last page
  if (!((($s+$limit)/$limit)==$pages) && $pages!=1) {

  // not last page so give NEXT link
  $news=$s+$limit;

  echo "&nbsp;<a href=\"$PHP_SELF?s=$news&q=$var\">
  Next 10 &gt;&gt;</a>";
  
  }

$a = $s + ($limit) ;
  if ($a > $numrows) { $a = $numrows ; }
  $b = $s + 1 ;
  echo "<p>Showing results $b to $a of $numrows</p>";
  
?>

				
				</div><!-- .entry -->
							
			<?php mysite_after_entry(); ?>

		</div><!-- #post-## -->
		
		<?php if( !mysite_get_setting( 'disable_page_comments' ) ) comments_template( '', true ); ?>
		
	<?php endwhile; ?>
	
<?php endif; ?>

	<?php mysite_after_page_content(); ?>
	
		<div class="clearboth"></div>
	</div><!-- #main_inner -->
</div><!-- #main -->

<?php get_footer(); ?>
ASKER CERTIFIED SOLUTION
Join our community to see this answer!
Unlock 3 Answers and 5 Comments.
Start Free Trial
Learn from the best

Network and collaborate with thousands of CTOs, CISOs, and IT Pros rooting for you and your success.

Andrew Hancock - VMware vExpert
See if this solution works for you by signing up for a 7 day free trial.
Unlock 3 Answers and 5 Comments.
Try for 7 days

”The time we save is the biggest benefit of E-E to our team. What could take multiple guys 2 hours or more each to find is accessed in around 15 minutes on Experts Exchange.

-Mike Kapnisakis, Warner Bros