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>

Link to comment
Share on other sites

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.