Hey hows it going? Okay so I am EXTREMELY new to PHP, as in, this my first venture into it haha. I have a lot of experience with HTML and CSS, so codings not new to me, just PHP. I have a pretty basic code I got from a “tutorial” site, that I am trying to alter to fit what I am trying to do. I’ll give you as much detail as possible because I know thats very important in getting the help I need.
First off, I am building a search engine. But to search only fields I have input myself.
So I have page 1 which is “search.php”. This is just a simple search form. It “GETS”, and displays the results on “search_result.php”.
I also have a mySQL table setup called “news”. 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 want it to use Name, Message, and Keywords as the keywords. However, in the Search_result.php, I want “Keywords” omitted from the display, just used as a reference.
Now I’ve run into a couple problems. I had 1 very simple PHP code that was letting me display the results on “search_results.php”, but it wasnt actually searching. It would just display everything that I had input into my tables. So I went to a much more complex code (I know, the simple code wont work, so lets try an advanced one right?) I found on a tutorial site, and tried to edit to fit my criteria.
But I end up with the error:
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /home/content/d/j/m/djmac14/html/mcpin/search_result2.php on line 37 Couldn't execute query
Where line 37 is:
$row_num_links_main =mysql_num_rows ($numresults);
Here is the 2nd set of code I tried. Please if anyone can offer any help. I’m using this basically as my “introduction” to PHP, and damn its complex!
<?php //connect to mysqlmysql_connect(“server”,“dbname”,“dbpass”);
mysql_select_db(“dbname”);//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 = “Search Error
Please enter a search…
” ;
}
// check for a search parameter
if (!isset($var)){
$resultmsg = “Search Error
We don’t seem to have a search parameter!
" ;
}
// 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 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{ $adid_array[] = $row[ 'id' ]; }while( $row= mysql_fetch_array($numresults));
} //end foreach
if($row_num_links_main == 0 && $row_set_num == 0){
$resultmsg ="Search results for: ". $trimmed.“
Sorry, your search returned zero results
” ;
}
//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
?><?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); $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" , " //1" , $row_linkcat[ 'keywords' ] ); $linkhigh = preg_replace ( "'($var)'si" , " //1" , $row_linkcat[ 'name' ] ); $linkdesc = preg_replace ( "'($var)'si" , " //1" , $row_linkcat[ 'message' ] ); foreach($trimmed_array as $trimm){ if($trimm != 'b' ){ $titlehigh = preg_replace( "'($trimm)'si" , " //1" , $titlehigh); $linkhigh = preg_replace( "'($trimm)'si" , " //1" , $linkhigh); $linkdesc = preg_replace( "'($trimm)'si" , " //1" , $linkdesc); } //end highlight ?><?php echo $titlehigh; ?>
<?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 ""; } // 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 ""; } } } //end foreach $newarr ?>
<?php echo $linkhigh; ?>
<?php echo $linkhigh; ?>
And yes, I obviouslt omitted my mySQL information for security purposes. I’m connecting fine so thats not the problem, however I’m not sure about my table settings on the database.