Using PHP to search a MySQL database and return paged results
Got a MySQL database with content within it? Want to be able to search it?
Read on...
Pre-requisites: PHP, MySQL and a Web Server capable
of parsing PHP pages, like Apache or IIS. This search script does
not spider all your pages by crawling the links, so the content you
want to be searchable must be within the database.
Knowledge of PHP and MySQL is also necessary because this script is just the
bones of a working solution. Numerous edits must take place upon this script
before it is a usable solution.
Lets get started. If you would rather not copy the code into a text editor,
download the files here!
Just after the <body> tag of your page, place the following HTML. This
is for the form which will contain the textfield to enter our search string
in.
<form name="form" action="search.php" method="get">
<input type="text" name="q" />
<input type="submit" name="Submit" value="Search" />
</form>
Now, enter the following PHP. Follow the PHP comments for what the script
is doing, if you get stuck, tell us in the forums!
<?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","username","password"); //(host, username, password)
//specify database ** EDIT REQUIRED HERE **
mysql_select_db("database") or die("Unable to select database"); //select which database we're using
// Build SQL Query
$query = "select * from the_table where 1st_field like \"%$trimmed%\"
order by 1st_field"; // 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: "" . $trimmed . "" 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: "" . $var . ""</p>";
// begin to show results set
echo "Results";
$count = 1 + $s ;
// now you can display the results returned
while ($row= mysql_fetch_array($result)) {
$title = $row["1st_field"];
echo "$count.) $title" ;
$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 " <a href=\"$PHP_SELF?s=$prevs&q=$var\"><<
Prev 10</a>  ";
}
// 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 " <a href=\"$PHP_SELF?s=$news&q=$var\">Next 10 >></a>";
}
$a = $s + ($limit) ;
if ($a > $numrows) { $a = $numrows ; }
$b = $s + 1 ;
echo "<p>Showing results $b to $a of $numrows</p>";
?>
Three major areas are covered in this script, the first is selecting data from
the database which matches your entered keyword, the second is displaying the
results on the web page and the last is generating the paging, which displays
results in chunks of 10 with next/previous links where they are necessary.
Important: This script requires numerous edits
before it can be adapted for use. The SQL query in this example is only selecting
1 field from a hypothetical database which doesn't pre-exist, nor is included
in the downloadable files. Further down the script, the value of that field
is being displayed on the page. The major amendments that need to be performed
are 1.) The SQL statement, and 2.) The PHP which displays the results.
If you encounter problems adapting this script, click here
to get help.
Go to: Home | Download
script files | Discuss in forums | PHP
links | Top