djmac14 Posted February 18, 2008 Share Posted February 18, 2008 Okay so I've been working on this PHP search engine code for a couple weeks now with the assistance of everyone here and a couple other forums. I've gotten through a million different errors, now it seems something very small is standing between myself and success. Let me explain. I have a mySQL database which consists of: ID: Int11, NOT NULL, Auto Increment, and Primary Key Name: Varchar(255), NULL Message: Varchar(255), NULL Website: Varchar(255), NULL Keywords: Varchar(255), NULL Address: Varchar(255), NULL Phone: Varchar(255), NULL I have a "Search.php" which is just a search form. I also have a "Search_results.php" which in theory is supposed to display the results. If I go to Search.php and type a keyword into the form which I know doesnt exist I get something along the lines of: Sorry, your search returned zero results If I enter something I know exists I get: Search Results for "KEYWORD" Keyword being whatever I entered that I know exists. But nothing displays. I know its finding the information in the mySQL table, or it would give the "returned zero results" line. So this tells me that the snippet of code the "Displays results" is not working correctly. However, to my small uninformed brain I don't see where the problem lies. Here is my complete HTML/PHP code: <html> <head> <title>Search Results</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> </head> <body> <?php //connect to mysql mysql_connect("xxxx","xxxx","xxx"); mysql_select_db("xxxx"); //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 news WHERE keywords LIKE '%$trimm%' OR name like '%$trimm%' OR message like '%$trimm%' ORDER BY keywords DESC" ; // Execute the query to get number of rows that contain search keywords $numresults=mysql_query ($query) or die(mysql_error()); $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 s" ); $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{ $adid_array[] = $row[ 'id' ]; }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="search2.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 news WHERE keywords = '$value'"; $num_value=mysql_query ($query_value) or die(mysql_error()); $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. //Replace field $titlehigh = preg_replace ( "'($var)'si" , "<b> //1</b>" , $row_linkcat[ 'keywords' ] ); $linkhigh = preg_replace ( "'($var)'si" , "<b> //1</b>" , $row_linkcat[ 'name' ] ); $linkdesc = preg_replace ( "'($var)'si" , "<b> //1</b>" , $row_linkcat[ 'message' ] ); foreach($trimmed_array as $trimm){ if($trimm != 'b' ){ $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 ?> </body> </html> Quote Link to comment Share on other sites More sharing options...
redarrow Posted February 18, 2008 Share Posted February 18, 2008 pur or die(mysql_error()) function on the end off all your querys.... echo the querys out..... see the results off the querys if there correct..... Quote Link to comment Share on other sites More sharing options...
djmac14 Posted February 19, 2008 Author Share Posted February 19, 2008 Alright I did that but it didn't give me any errors. How do I Echo specific query? Quote Link to comment Share on other sites More sharing options...
timmy0320 Posted February 19, 2008 Share Posted February 19, 2008 Alright I did that but it didn't give me any errors. How do I Echo specific query? Just echo the result, such as one of your codes says $row = blah blah. echo $row; Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.