search engine in php script

  • sohang
  • Newbie
  • Newbie
  • sohang
  • Posts: 6

Post 3+ Months Ago

I have problem in creating search engine with php

i got error !

please help

Code: [ Select ]
<?php
//This is a working script
//Make sure to go through it and edit database table filelds that you are seraching
//This script assumes you are searching 3 fields
$hostname_logon = "localhost" ;  
$database_logon = "FAQn" ;  
$username_logon = "root" ;  
$password_logon = "" ;  
//open database connection
 $connections = mysql_connect($hostname_logon, $username_logon, $password_logon) or die ( "Unabale to connect to the database" );
 //select database
 mysql_select_db($database_logon) or die ( "Unable to select database!" );
 
//specify how many results to display per page
$limit = 10;
 
// Get the search variable from URL
  $var = @$_GET['q'] ;
//trim whitespace from the stored variable
  $trimmed = trim($var);
//separate key-phrases into keywords
  $trimmed_array = explode(" ",$trimmed);
 
// check for an empty string and display a message.
if ($trimmed == "") {
  $resultmsg =  "<p>Search Error</p><p>Please enter a search...</p>" ;
  }
 
// check for a search parameter
if (!isset($var)){
  $resultmsg =  "<p>Search Error</p><p>We don't seem to have a search parameter! </p>" ;
  }
// Build SQL Query for each keyword entered
foreach ($trimmed_array as $trimm){
     
// EDIT HERE and specify your table and field names for the SQL query
     $query = "SELECT * FROM que WHERE id LIKE \"%$trimm%\" OR cat_name LIKE  \"%$trimm%\" OR que LIKE \" %$trimm%\"  OR datepos LIKE  \"%$trimm%\" ORDER BY field1   DESC" ;
     // Execute the query to  get number of rows that contain search kewords
     $numresults=mysql_query ($query);
     $row_num_links_main =mysql_num_rows ($numresults);
 
     // next determine if 's' has been passed to script, if not use 0.
     // 's' is a variable that gets set as we navigate the search result pages.
     if (empty($s)) {
         $s=0;
     }
 
      // now let's get results.
      $query .= " LIMIT $s,$limit" ;
      $numresults = mysql_query ($query) or die ( "Couldn't execute query" );
      $row= mysql_fetch_array ($numresults);
 
      //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.
      do{
 //EDIT HERE and specify your field name that is primary key
          $adid_array[] = $row[ 'fieldid' ];
      }while( $row= mysql_fetch_array($numresults));
 } //end foreach
 
if($row_num_links_main == 0 && $row_set_num == 0){
   $resultmsg = "<p>Search results for:" . $trimmed  ."</p><p>Sorry, your search returned zero results</p>" ;
}
   //delete duplicate record id's from the array. To do this we will use array_unique function
   $tmparr = array_unique($adid_array);
   $i=0;
   foreach ($tmparr as $v) {
       $newarr[$i] = $v;
       $i++;
   }
 
// now you can display the results returned. But first we will display the search form on the top of the page
?>
 
<form action="search.php" method="get" name="search">
  <div align="center">
      <input name="q" type="text" value=" <?php echo $q; ?> " size="15">
      <input name="search" type="submit" value="Search">
  </div>
</form>
 
<?php
// display what the person searched for.
 if( isset ($resultmsg)){
  echo $resultmsg;
  exit();
 }else{
  echo "Search results for: " . $var;
 }
 
foreach($newarr as $value){
 
// EDIT HERE and specify your table and field names for the SQL query
$query_value = "SELECT * FROM qye WHERE fieldid = '$value'";
 $num_value=mysql_query ($query_value);
 $row_linkcat= mysql_fetch_array ($num_value);
 $row_num_links= mysql_num_rows ($num_value);
 
//now let's make the keywods bold. To do that we will use preg_replace function.
//EDIT parts of the lines below that have fields names like $row_linkcat[ 'field1' ]
//This script assumes you are searching only 3 fields. If you are searching more fileds make sure that add appropriate line.
  $titlehigh = preg_replace ( "'($var)'si" , "<b>\1</b>" , $row_linkcat[ 'field1' ] );
  $linkhigh = preg_replace ( "'($var)'si" , "<b>\1</b>" , $row_linkcat[ 'field2' ] );
  $linkdesc = preg_replace ( "'($var)'si" , "<b>\1</b>" , $row_linkcat[ 'field3' ] );
 
foreach($trimmed_array as $trimm){
    if($trimm != 'b' ){
//IF you added more fields to search make sure to add them below as well.
        $titlehigh = preg_replace( "'($trimm)'si" ,  "<b>\1</b>" , $titlehigh);
        $linkhigh = preg_replace( "'($trimm)'si" , "<b>\1</b>" , $linkhigh);
        $linkdesc = preg_replace( "'($trimm)'si" ,  "<b>\1</b>" , $linkdesc);
     }
//end highlight
 
?>
 <p>
<?php echo $titlehigh; ?><br>
<?php echo $linkhigh; ?><br>
<?php echo $linkhigh; ?>
</p>
 
<?php
}   //end foreach $trimmed_array
   if($row_num_links_main > $limit){
   // next we need to do the links to other search result pages
      if ($s>=1) { // do not display previous link if 's' is '0'
        $prevs=($s-$limit);
         echo "<div align='left'><a href='$PHP_SELF?s=$prevs&q=$var&catid=$catid'>Previous " .$limit. "</a></div>";
      }
     // check to see if last page
     $slimit =$s+$limit;
       if (!($slimit >= $row_num_links_main) && $row_num_links_main!=1) {
     // not last page so display next link
          $n=$s+$limit;
           echo "<div align='right'><a href='$PHP_SELF?s=$n&q=$var&catid=$catid'>Next " .$limit. "</a></div>";
        }
    }
}  //end foreach $newarr
?>
  1. <?php
  2. //This is a working script
  3. //Make sure to go through it and edit database table filelds that you are seraching
  4. //This script assumes you are searching 3 fields
  5. $hostname_logon = "localhost" ;  
  6. $database_logon = "FAQn" ;  
  7. $username_logon = "root" ;  
  8. $password_logon = "" ;  
  9. //open database connection
  10.  $connections = mysql_connect($hostname_logon, $username_logon, $password_logon) or die ( "Unabale to connect to the database" );
  11.  //select database
  12.  mysql_select_db($database_logon) or die ( "Unable to select database!" );
  13.  
  14. //specify how many results to display per page
  15. $limit = 10;
  16.  
  17. // Get the search variable from URL
  18.   $var = @$_GET['q'] ;
  19. //trim whitespace from the stored variable
  20.   $trimmed = trim($var);
  21. //separate key-phrases into keywords
  22.   $trimmed_array = explode(" ",$trimmed);
  23.  
  24. // check for an empty string and display a message.
  25. if ($trimmed == "") {
  26.   $resultmsg =  "<p>Search Error</p><p>Please enter a search...</p>" ;
  27.   }
  28.  
  29. // check for a search parameter
  30. if (!isset($var)){
  31.   $resultmsg =  "<p>Search Error</p><p>We don't seem to have a search parameter! </p>" ;
  32.   }
  33. // Build SQL Query for each keyword entered
  34. foreach ($trimmed_array as $trimm){
  35.      
  36. // EDIT HERE and specify your table and field names for the SQL query
  37.      $query = "SELECT * FROM que WHERE id LIKE \"%$trimm%\" OR cat_name LIKE  \"%$trimm%\" OR que LIKE \" %$trimm%\"  OR datepos LIKE  \"%$trimm%\" ORDER BY field1   DESC" ;
  38.      // Execute the query to  get number of rows that contain search kewords
  39.      $numresults=mysql_query ($query);
  40.      $row_num_links_main =mysql_num_rows ($numresults);
  41.  
  42.      // next determine if 's' has been passed to script, if not use 0.
  43.      // 's' is a variable that gets set as we navigate the search result pages.
  44.      if (empty($s)) {
  45.          $s=0;
  46.      }
  47.  
  48.       // now let's get results.
  49.       $query .= " LIMIT $s,$limit" ;
  50.       $numresults = mysql_query ($query) or die ( "Couldn't execute query" );
  51.       $row= mysql_fetch_array ($numresults);
  52.  
  53.       //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.
  54.       do{
  55.  //EDIT HERE and specify your field name that is primary key
  56.           $adid_array[] = $row[ 'fieldid' ];
  57.       }while( $row= mysql_fetch_array($numresults));
  58.  } //end foreach
  59.  
  60. if($row_num_links_main == 0 && $row_set_num == 0){
  61.    $resultmsg = "<p>Search results for:" . $trimmed  ."</p><p>Sorry, your search returned zero results</p>" ;
  62. }
  63.    //delete duplicate record id's from the array. To do this we will use array_unique function
  64.    $tmparr = array_unique($adid_array);
  65.    $i=0;
  66.    foreach ($tmparr as $v) {
  67.        $newarr[$i] = $v;
  68.        $i++;
  69.    }
  70.  
  71. // now you can display the results returned. But first we will display the search form on the top of the page
  72. ?>
  73.  
  74. <form action="search.php" method="get" name="search">
  75.   <div align="center">
  76.       <input name="q" type="text" value=" <?php echo $q; ?> " size="15">
  77.       <input name="search" type="submit" value="Search">
  78.   </div>
  79. </form>
  80.  
  81. <?php
  82. // display what the person searched for.
  83.  if( isset ($resultmsg)){
  84.   echo $resultmsg;
  85.   exit();
  86.  }else{
  87.   echo "Search results for: " . $var;
  88.  }
  89.  
  90. foreach($newarr as $value){
  91.  
  92. // EDIT HERE and specify your table and field names for the SQL query
  93. $query_value = "SELECT * FROM qye WHERE fieldid = '$value'";
  94.  $num_value=mysql_query ($query_value);
  95.  $row_linkcat= mysql_fetch_array ($num_value);
  96.  $row_num_links= mysql_num_rows ($num_value);
  97.  
  98. //now let's make the keywods bold. To do that we will use preg_replace function.
  99. //EDIT parts of the lines below that have fields names like $row_linkcat[ 'field1' ]
  100. //This script assumes you are searching only 3 fields. If you are searching more fileds make sure that add appropriate line.
  101.   $titlehigh = preg_replace ( "'($var)'si" , "<b>\1</b>" , $row_linkcat[ 'field1' ] );
  102.   $linkhigh = preg_replace ( "'($var)'si" , "<b>\1</b>" , $row_linkcat[ 'field2' ] );
  103.   $linkdesc = preg_replace ( "'($var)'si" , "<b>\1</b>" , $row_linkcat[ 'field3' ] );
  104.  
  105. foreach($trimmed_array as $trimm){
  106.     if($trimm != 'b' ){
  107. //IF you added more fields to search make sure to add them below as well.
  108.         $titlehigh = preg_replace( "'($trimm)'si" ,  "<b>\1</b>" , $titlehigh);
  109.         $linkhigh = preg_replace( "'($trimm)'si" , "<b>\1</b>" , $linkhigh);
  110.         $linkdesc = preg_replace( "'($trimm)'si" ,  "<b>\1</b>" , $linkdesc);
  111.      }
  112. //end highlight
  113.  
  114. ?>
  115.  <p>
  116. <?php echo $titlehigh; ?><br>
  117. <?php echo $linkhigh; ?><br>
  118. <?php echo $linkhigh; ?>
  119. </p>
  120.  
  121. <?php
  122. }   //end foreach $trimmed_array
  123.    if($row_num_links_main > $limit){
  124.    // next we need to do the links to other search result pages
  125.       if ($s>=1) { // do not display previous link if 's' is '0'
  126.         $prevs=($s-$limit);
  127.          echo "<div align='left'><a href='$PHP_SELF?s=$prevs&q=$var&catid=$catid'>Previous " .$limit. "</a></div>";
  128.       }
  129.      // check to see if last page
  130.      $slimit =$s+$limit;
  131.        if (!($slimit >= $row_num_links_main) && $row_num_links_main!=1) {
  132.      // not last page so display next link
  133.           $n=$s+$limit;
  134.            echo "<div align='right'><a href='$PHP_SELF?s=$n&q=$var&catid=$catid'>Next " .$limit. "</a></div>";
  135.         }
  136.     }
  137. }  //end foreach $newarr
  138. ?>




I got this masage error

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in C:\xampp\htdocs\FAQn\extra.php on line 146
Couldn't execute query
  • Anonymous
  • Bot
  • No Avatar
  • Posts: ?
  • Loc: Ozzuland
  • Status: Online

Post 3+ Months Ago

  • UPSGuy
  • Lurker ಠ_ಠ
  • Web Master
  • User avatar
  • Posts: 2733
  • Loc: Nashville, TN

Post 3+ Months Ago

Try putting some || die's in there because you're executing a query somewhere that's failing before you try to retrieve the number of result rows.
  • Bogey
  • Genius
  • Genius
  • Bogey
  • Posts: 8388
  • Loc: USA

Post 3+ Months Ago

UPSGuy wrote:
Try putting some || die's in there because you're executing a query somewhere that's failing before you try to retrieve the number of result rows.

What he is talking about is putting or die(mysql_error()); right after mysql_query($sql). So over all, your mysql_query(); functions would look like...
Code: [ Select ]
$result = mysql_query($sql) or die(mysql_error());

This is a quick way to troubleshoot through the problem.

Post Information

  • Total Posts in this topic: 3 posts
  • Users browsing this forum: No registered users and 97 guests
  • You cannot post new topics in this forum
  • You cannot reply to topics in this forum
  • You cannot edit your posts in this forum
  • You cannot delete your posts in this forum
  • You cannot post attachments in this forum
 
 

© 1998-2014. Ozzu® is a registered trademark of Unmelted, LLC.