By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
431,805 Members | 1,270 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 431,805 IT Pros & Developers. It's quick & easy.

php code for searching phrase that is enclosed within double quote (") characters

bethifUL13
P: 6
php code for searching phrase that is enclosed within double quote (“"”) characters

I have a php code for searching words in mysql database using fulltext, it splits the phrases into words and shows all the possible result containing the words in the phrase.The paging is doing good but my problem is if I enter a phrase enclose in double quote (“"”) characters literally, the result also shows all the possible result containing the words in the phrase and the paging is malfunctioning. When I click the next button, it shows an alert "Search Error. Please enter a search keyword...".
What I want is if I enter a phrase enclose in double quote (“"”) characters, the result should be the exact phrase only and the paging should work too.Help please!.

php CODE: (search.php)
Expand|Select|Wrap|Line Numbers
  1. <?php 
  2.  
  3. $hostname_logon = "localhost" ;
  4. $database_logon = "XXXX" ;
  5. $username_logon = "root" ;
  6. $password_logon = "" ;
  7. //open database connection
  8. $connections = mysql_connect($hostname_logon, $username_logon, $password_logon) or die ( "Unable to connect to the database" );
  9. //select database
  10. mysql_select_db($database_logon) or die ( "Unable to select database!" );
  11.  
  12. //specify how many results to display per page
  13. $limit = 5;
  14.  
  15. //get the search variable from URL
  16. $var = stripslashes($_REQUEST['q']);
  17. //get pagination
  18. $s = mysql_real_escape_string($_REQUEST['s']);
  19.  
  20. //set keyword character limit
  21. if(strlen($var) < 3){
  22.     $resultmsg =  "<p>Search Error</p><p>Keywords with less then three characters are considered invalid...Try again.</p>" ;
  23. }
  24. //trim whitespace from the stored variable
  25. $trimmed = trim($var);
  26. $trimmed1 = trim($var);
  27. //separate key-phrases into keywords
  28. $trimmed_array = explode(" ",$trimmed);
  29. $trimmed_array1 = explode(" ",$trimmed1);
  30.  
  31. // check for an empty string and display a message.
  32. if ($trimmed == "") {
  33.     $resultmsg =  "<p>Search Error</p><p>Please enter a search keyword...</p>" ;
  34. }
  35.  
  36. // check for a search parameter
  37. if (!isset($var)){
  38.     $resultmsg =  "<p>Search Error</p><p>We don't seem to have a search parameter! </p>" ;
  39. }
  40.  
  41. // Build SQL Query for each keyword entered
  42. foreach ($trimmed_array as $trimm){
  43. // EDIT HERE and specify your table and field names for the SQL query
  44. // MySQL "MATCH" is used for full-text searching. Please visit mysql for details.
  45. $query = "SELECT * , MATCH (title, author,yearpub,full_docs) AGAINST ('".$trimm."' IN BOOLEAN MODE) AS score FROM thesis WHERE MATCH (title, author,yearpub,full_docs) AGAINST ('+".$trimm."' IN BOOLEAN MODE) ORDER BY score DESC";
  46.  // Execute the query to  get number of rows that contain search kewords
  47.  $numresults=mysql_query ($query);
  48.  $row_num_links_main =mysql_num_rows ($numresults);
  49.  
  50.  //If MATCH query doesn't return any results due to how it works do a search using LIKE
  51.  if($row_num_links_main < 1){
  52.     $query = "SELECT * FROM thesis WHERE title like '%$trimm%' or author like '%$trimm%' or description like '%$trimm%' or yearpub like '%$trimm%' or adviser like '%$trimm%' or keyword like '%$trimm%' ORDER BY id DESC";
  53.     $numresults=mysql_query ($query);
  54.     $row_num_links_main1 =mysql_num_rows ($numresults);
  55.  }
  56.  
  57.  // next determine if 's' has been passed to script, if not use 0.
  58.  // 's' is a variable that gets set as we navigate the search result pages.
  59.  if (empty($s)) {
  60.      $s=0;
  61.  }
  62.  
  63.   // now let's get results.
  64.   $query .= " LIMIT $s,$limit" ;
  65.   $numresults = mysql_query ($query) or die ( "Couldn't execute query" );
  66.   $row= mysql_fetch_array ($numresults);
  67.  
  68.   //store record id of every item that contains the keyword in the array we need to do this to avoid display of duplicate search result.
  69.   do{
  70.       $adid_array[] = $row[ 'id' ];
  71.   }while( $row= mysql_fetch_array($numresults));
  72. } //end foreach
  73.  
  74. //Display a message if no results found
  75. if($row_num_links_main == 0 && $row_num_links_main1 == 0){
  76.     $resultmsg = "<p>Search results for: ". $trimmed."</p><p>Sorry, your search returned zero results</p>" ;
  77. }
  78.  
  79. //delete duplicate record id's from the array. To do this we will use array_unique function
  80. $tmparr = array_unique($adid_array);
  81. $i=0;
  82. foreach ($tmparr as $v) {
  83.    $newarr[$i] = $v;
  84.    $i++;
  85. }
  86.  
  87. //total result
  88. $row_num_links_main = $row_num_links_main + $row_num_links_main1;
  89.  
  90.  
  91. // display an error or, what the person searched
  92. if( isset ($resultmsg)){
  93.     echo $resultmsg;
  94. }else{
  95. echo "</br>";
  96.     echo "<p align = center><h1>Displaying search results for: <em>" . $var."</em></h1></p>";
  97.     echo "<h4>Total number of result(s): $row_num_links_main</h4>";
  98.  
  99.     foreach($newarr as $value){
  100.  
  101.     // EDIT HERE and specify your table and field unique ID for the SQL query
  102.     $query_value = "SELECT * FROM thesis WHERE id = '".$value."'";
  103.     $num_value=mysql_query ($query_value);
  104.     $row_linkcat= mysql_fetch_array ($num_value);
  105.     $row_num_links= mysql_num_rows ($num_value);
  106.  
  107.     //create summary of the long text. For example if the field2 is your full text grab only first 165 characters of it for the result
  108.     $introcontent = strip_tags($row_linkcat[ 'description']);
  109.     $introcontent = substr($introcontent, 0, 165)."...";
  110.     $introdocs = strip_tags($row_linkcat[ 'full_docs']);
  111.     $introdocs = substr($introdocs, 50, 500)."...";
  112.  
  113.  
  114.     //now let's make the keywods bold. To do that we will use preg_replace function.
  115.     //Replace field
  116.       $title = preg_replace ( "'($var)'si" , "<strong>\\1</strong>" , $row_linkcat[ 'title' ] );
  117.       $desc = preg_replace ( "'($var)'si" , "<strong>\\1</strong>" , $introcontent);
  118.       $link = preg_replace ( "'($var)'si" , "<strong>\\1</strong>" ,  $row_linkcat[ 'author' ]  );
  119.       $docs = preg_replace ( "'($var)'si" , "<strong>\\1</strong>" ,  $introdocs);
  120.  
  121.         foreach($trimmed_array as $trimm){
  122.             if($trimm != 'b' ){
  123.                 $title = preg_replace( "'($trimm)'si" ,  "<strong>\\1</strong>" , $title);
  124.                 $desc = preg_replace( "'($trimm)'si" , "<strong>\\1</strong>" , $desc);
  125.                 $link = preg_replace( "'($trimm)'si" ,  "<strong>\\1</strong>" , $link);
  126.                 $docs = preg_replace( "'($trimm)'si" ,  "<strong>\\1</strong>" , $docs);
  127.              }//end highlight
  128.         }//end foreach $trimmed_array
  129.  
  130.         //format and display search results
  131.  
  132.              echo '<div class="search-result">';
  133.             echo" <h3> <a href='View.php?id=",$row_linkcat[id],"'><u>",$title,"</a></u></h3>
  134.             <ol><strong>AUTHOR:</strong>&nbsp;&nbsp;
  135.  
  136.  ",$link,"</ol><ol><strong>DESCRIPTION:</strong>&nbsp;&nbsp; ",$desc,"</ol>
  137.  <ol><strong>FULL DOCUMENTS:</strong>&nbsp;&nbsp; ",$docs,"</ol>";
  138.  
  139.  
  140.                 echo "<hr/>"; 
  141.                 echo '</div>';
  142.  
  143.     }  //end foreach $newarr
  144.  
  145.     if($row_num_links_main > $limit){
  146.     // next we need to do the links to other search result pages
  147.         if ($s >=1) { // do not display previous link if 's' is '0'
  148.             $prevs=($s-$limit);
  149.           echo '<a href="'.$PHP_SELF.'?s='.$prevs.'&q='.$var.'">&nbsp;&nbsp; Previous &nbsp;&nbsp;</a>';
  150.         }
  151.     // check to see if last page
  152.         $slimit =$s+$limit;
  153.         if (!($slimit >= $row_num_links_main) && $row_num_links_main!=1) {
  154.             // not last page so display next link
  155.             $n=$s+$limit;
  156.            echo '<a href="'.$PHP_SELF.'?s='.$n.'&q='.$var.'">&nbsp;&nbsp; Next &nbsp;&nbsp;</a>';
  157.         }
  158.     }//end if $row_num_links_main > $limit
  159.  
  160.     // now you can display the results returned. But first we will display the search form on the top of the page
  161.  
  162.  
  163. }//end if search result
  164.  
  165.  
  166. ?>
FORM:
Expand|Select|Wrap|Line Numbers
  1. <form action="search.php" method="post">
  2. <input name="q" type="text" id="q" size="60" />
  3. <input name="search2" type="submit" id="search2" value="Search" />        
  4. </form>
Feb 29 '12 #1
Share this Question
Share on Google+
1 Reply


Dormilich
Expert Mod 5K+
P: 8,639
does your compiled query look like described in the manual for that case?

(you can check with echo or var_dump())
Feb 29 '12 #2

Post your reply

Sign in to post your reply or Sign up for a free account.