Jump to content

creating a session for and proper pagination of full text search results


mrelliott

Recommended Posts

I'm new at PHP and MySQL. I've used the tutorial on this site to set up a search engine for a database of songs for the band Queen. It does find results but I've run into some problems. I'm having difficulty figuring out how to set up a session that will store the search results collected, they disappear after I click on page 2. And I had read somewhere else on this forum that the results should be stored in a session, but I can't find that topic anymore. Also I want to set up the pages so that the search results determine how many pages are needed. What I have set up in the count function section of the code counts all the records in my song table and I want it to count the full text index if that's possible.

Here's my code.

 

<?php

session_start();

?>

<html><!-- #BeginTemplate "/Templates/queenlayout.dwt" -->

<head>

<!-- #BeginEditable "doctitle" -->

<title>Queen Album & Song Database -- Search Results</title>

<!-- #EndEditable -->

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">

</head>

 

<body bgcolor="#000066" text="#CCCCCC" link="#CCCCCC" vlink="#CCCCCC" alink="#CCCCCC">

<div align="center">

  <table width="98%" border="0" height="116">

    <tr>

      <td height="36">

        <div align="center"></div>

        <div align="center"></div>

        <div align="center"><!-- #BeginEditable "header" -->

          <?php

include ('./includes/queenheader.html');

?>

          <!-- #EndEditable --></div>

        <div align="center"></div>

      </td>

    </tr>

    <tr>

      <td height="483">

        <div align="center"></div>

        <div align="center"></div>

        <div align="center"><!-- #BeginEditable "results" -->

          <?php

// Full-Text Search Example

// Conect to the database.

require_once ('./includes/mysql_connect.php'); //connect to database

 

//Records to display per page.

$display = 10;

 

//Check if the number of required pages has been determined.

if (isset($_GET['np'])) {  //Already been determined.

$num_pages = $_GET['np']; 

} else { //Need to determine.

 

// Count the number of records

    $query = "SELECT COUNT(*) FROM master_list ORDER BY song_id"; 

    $result = @mysql_query ($query);

    $row = mysql_fetch_array ($result, MYSQL_NUM);

    $num_records = $row[0];

 

//calculate number of pages.

if ($num_records > $display) { 

$num_pages = ceil ($num_records/$display); 

} else {

$num_pages = 1;

}

 

} //end of np if.

 

//where to start returning results.

if (isset($_GET['s'])) { 

$start = $_GET['s'];

} else {

$start = 0;

}

 

// Create the search function:

 

function searchForm()

{

  // Re-usable form

 

  // variable setup for the form.

  $searchwords = (isset($_GET['words']) ? htmlspecialchars(stripslashes($_REQUEST['words'])) : '');

  $normal = (($_GET['mode'] == 'normal') ? ' selected="selected"' : '' );

  $boolean = (($_GET['mode'] == 'boolean') ? ' selected="selected"' : '' );

 

  echo '<form method="get" action="'.$_SERVER['PHP_SELF'].'">';

  echo '<input type="hidden" name="cmd" value="search" />';

  echo '<font size="-3">Search for: <input type="text" name="words" value="'.$searchwords.'" /></font> ';

  echo '<font size="-3">Mode: </font>';

  echo '<select name="mode">';

  echo '<option value="normal"'.$normal.'>Normal</option>';

  echo '<option value="boolean"'.$boolean.'>Boolean</option>';

  echo '</select> ';

  echo '<input type="submit" value="Search" />';

  echo '</form>';

}

 

 

// Create the navigation switch

$cmd = (isset($_GET['cmd']) ? $_GET['cmd'] : '');

 

switch($cmd)

{

  default:

    //echo '<h1><font size="-3">Search Database!</font></h1>';

    searchForm(); 

  break;

  case "search":

    searchForm();

    //echo '<h3><font size="-3">Search Results:</font></h3><br />';

   

    $searchstring = mysql_escape_string($_GET['words']);

    switch($_GET['mode'])

    {

      case "normal":

        $sql = "SELECT song_id, title, album, writer, 

              MATCH(title, album, writer) 

              AGAINST ('$searchstring') AS score FROM master_list 

              WHERE MATCH(title, album, writer) 

              AGAINST ('$searchstring') ORDER BY score DESC LIMIT $start, $display";

      break;

     

      case "boolean":

        $sql = "SELECT song_id, title, album, writer, 

              MATCH(title, album, writer) 

              AGAINST ('$searchstring' IN BOOLEAN MODE) AS score FROM master_list 

              WHERE MATCH(title, album, writer) 

              AGAINST ('$searchstring' IN BOOLEAN MODE) ORDER BY score DESC LIMIT $start, $display";

      break;

    } 

   

    // echo $sql;

   

    $result = mysql_query($sql) or die (mysql_error());

   

    while($row = mysql_fetch_object($result))

    {

      echo '<font size="-3"><strong>Title: '.stripslashes(htmlspecialchars($row->title)).'</strong><br /></font>';

      echo '<font size="-3">Score:'. number_format($row->score, 1).' Album: '.stripslashes(htmlspecialchars($row->album)).'<br /></font>';

      echo '<font size="-3"><p>Writer: '.stripslashes(htmlspecialchars($row->writer)).'</p></font>';

      echo '<hr size="-3" />';

    }

  break;

}

//mysql_free_result ($result); // Free up the resources.

mysql_close(); //Close connection.

 

// Make the links to other pages, if necessary.

if ($num_pages > 1) {

 

    echo '<br /><p>';

    // Determine what page the script is on.

    $current_page = ($start/$display) + 1;

 

    // If it's not the first page, make a Previous button.

    if ($current_page != 1) {

      echo '<a href="searchresults.php?s=' . ($start - $display) . '&np=' . $num_pages .'">Previous</a> '; 

    }

 

    // Make all the numbered pages.

for ($i = 1; $i <= $num_pages; $i++) {

if ($i != $current_page) {

echo '<a href="searchresults.php?s='.(($display * ($i - 1))).'&np='.$num_pages .'">'.$i.'</a> '; 

} else {

echo $i.' ';

}

}

 

    // If it's not the last page, make a Next button.

    if ($current_page != $num_pages) {

      echo '<a href="searchresults.php?s=' . ($start + $display) . '&np=' . $num_pages .'">Next</a> '; 

    }

 

    echo '</p>';

 

}

// End of links section.

?>

          <!-- #EndEditable --></div>

      </td>

    </tr>

    <tr>

      <td height="27">

        <div align="center"><!-- #BeginEditable "footer" -->

          <?php

include ('./includes/queenfooter.html');

?>

          <!-- #EndEditable --></div>

      </td>

    </tr>

  </table>

</div>

</body>

<!-- #EndTemplate --></html>

Archived

This topic is now archived and is closed to further replies.

×
×
  • 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.