Jump to content

Weird Search Behavior


blackdogupya

Recommended Posts

Hi Guys/Gals,

 

I have a search form that people search for keywords.  Basically and one field and one button form.

 

When they search for a particular string for example, "white" it's only bringing up one result, but 23 times.  Here's my code:

 

<?php
require("format.php");
//Get the page number for later
$pagenum = $_GET['pagenum'];
//Here we display stuff if they have submitted the form
if ( $_GET['searching'] == 'yes' )
{ 
//If they stuffed up and didn't search for anything, we show them this 
if ($_GET['find'] == "") 
{ 
//Build the HTML display that will output the page when no search is entered
echo "$noSearch";
} 
//If everything is all good, we connect to the database
mysql_connect("localhost", "******", "******") or die(mysql_error()); 
mysql_select_db("******") or die(mysql_error()); 
//Let's not forget the register globals off crap
$animalID = $_GET['animalID'];
$status = $_GET['status'];
$date = $_GET['date'];
$species = $_GET['species'];
$breed = $_GET['breed'];
$sex = $_GET['sex'];
$primary_colour = $_GET['primary_colour'];
$colour = $_GET['colour'];
$distinctive_traits = $_GET['distinctive_traits'];
$fur_length = $_GET['fur_length'];
$age = $_GET['age'];
$desexed = $_GET['desexed'];
$microchipped = $_GET['microchipped'];
$suburb = $_GET['suburb'];
$pound_area = $_GET['pound_area'];
$contact = $_GET['contact'];
$link = $_GET['link'];
$columns = $_GET['columns'];
$find = $_GET['find'];
$searching = $_GET['searching'];


// We perform a bit of filtering 
$find = strtoupper($find); 
$find = strip_tags($find); 
$find = trim ($find); 

//Check to see if there's a page number, if not, set it to 1
if (!(isset($pagenum))) 
{ 
$pagenum = 1; 
} 
//Count the number of results based on the search term
$numresultsSQL = "SELECT *, MATCH(animalID, status, date, species, breed, sex, primary_colour, colour, distinctive_traits, fur_length, age, desexed, microchipped, suburb, pound_area, contact, img_data, notes) AGAINST ('%$find%' IN BOOLEAN MODE) AS score FROM animal_info WHERE MATCH(animalID, status, date, species, breed, sex, primary_colour, colour, distinctive_traits, fur_length, age, desexed, microchipped, suburb, pound_area, contact) AGAINST('%$find%' IN BOOLEAN MODE)"; 
$numresults = mysql_query($numresultsSQL) or die (mysql_error()."<br><br>Encountered when atemptempting to run the following query:<br>$numresultsSQL");
$rows = mysql_num_rows($numresults);
$idForPicture = "SELECT ID FROM animal_info WHERE animalID='$find'";
$idResults = mysql_query($idForPicture) or die (mysql_error()."Couldn't get an ID from the record");
//How many results should be per page?
$page_rows = 1;
//What is the last page number?
$last = ceil($rows/$page_rows); 
//Make sure the page number isn't a negative number or more than the maximum page required
if ($pagenum < 1) 
{ 
$pagenum = 1; 
} 
elseif ($pagenum > $last) 
{ 
$pagenum = $last; 
} 
//Now we search for our search term, in the field the user specified  so we know how many pages to link to at the bottom
$data = "SELECT *, MATCH(id, animalID, status, date, species, breed, sex, primary_colour, colour, distinctive_traits, fur_length, age, desexed, microchipped, suburb, pound_area, contact, img_data, notes) AGAINST ('%$find%' IN BOOLEAN MODE) AS score FROM animal_info WHERE MATCH(animalID, status, date, species, breed, sex, primary_colour, colour, distinctive_traits, fur_length, age, desexed, microchipped, suburb, pound_area, contact) AGAINST('%$find%' IN BOOLEAN MODE) LIMIT 0,1";
$id = $row['id'];
$img_mime = $row['img_mime'];
$content = $row['img_data'];
$results = mysql_query($data) or die(mysql_error());
//edited here
if (mysql_num_rows($results) < 1) {
echo "$noResults";
}
elseif(mysql_num_rows($results) > 0) {
//And we display the results of the search query as long as there is some
while($row = mysql_fetch_array($results))
{ 
//Build the HTML for the results in the table
echo "$resultsHTMLabove";
echo " --Page $pagenum of $last-- <p>";
echo "<br><BR>";
//Here's the table
echo "<table width=\"100%\" border=\"0\" cellspacing=\"5\" cellpadding=\"2\">";
echo "<tr>";
echo "<th scope=\"row\" align=\"left\">Animal ID</th>";
echo "<td>".$row['animalID']."</td>";
echo "</tr>";
echo "<tr>";
echo "<th scope=\"row\" align=\"left\">Status</th>";
echo "<td>".$row['status']."</td>";
echo "</tr>";
echo "<tr>";
echo "<th scope=\"row\" align=\"left\">Date</th>";
echo "<td>".$row['date']."</td>";
echo "</tr>";
echo "<tr>";
echo "<th scope=\"row\" align=\"left\">Species</th>";
echo "<td>".$row['species']."</td>";
echo "</tr>";
echo "<tr>";
echo "<th scope=\"row\" align=\"left\">Breed</th>";
echo "<td>".$row['breed']."</td>";
echo "</tr>";
echo "<tr>";
echo "<th scope=\"row\" align=\"left\">Sex</th>";
echo "<td>".$row['sex']."</td>";
echo "</tr>";
echo "<tr>";
echo "<th scope=\"row\" align=\"left\">Primary Colour</th>";
echo "<td>".$row['primary_colour']."</td>";
echo "</tr>";
echo "<tr>";
echo "<th scope=\"row\" align=\"left\">Colour</th>";
echo "<td>".$row['colour']."</td>";
echo "</tr>";
echo "<tr>";
echo "<th scope=\"row\" align=\"left\">Distinctive Traits</th>";
echo "<td>".$row['distinctive_traits']."</td>";
echo "</tr>";
echo "<tr>";
echo "<th scope=\"row\" align=\"left\">Fur Length</th>";
echo "<td>".$row['fur_length']."</td>";
echo "</tr>";
echo "<tr>";
echo "<th scope=\"row\" align=\"left\">Age</th>";
echo "<td>".$row['age']."</td>";
echo "</tr>";
echo "<tr>";
echo "<th scope=\"row\" align=\"left\">Desexed?</th>";
echo "<td>".$row['desexed']."</td>";
echo "</tr>";
echo "<tr>";
echo "<th scope=\"row\" align=\"left\">Microchipped?</th>";
echo "<td>".$row['microchipped']."</td>";
echo "</tr>";
echo "<tr>";
echo "<th scope=\"row\" align=\"left\">Suburb</th>";
echo "<td>".$row['suburb']."</td>";
echo "</tr>";
echo "<tr>";
echo "<th scope=\"row\" align=\"left\">Pound Area</th>";
echo "<td>".$row['pound_area']."</td>";
echo "</tr>";
echo "<tr>";
echo "<th scope=\"row\" align=\"left\">Contact</th>";
echo "<td>".$row['contact']."</td>";
echo "</tr>";
echo "<tr>";
echo "<th scope=\"row\" align=\"left\">Link</th>";
echo "<td><a href='".$row['link']."' target=_blank >Link to Facebook</a></td>";
echo "</tr>";
echo "<tr>";
echo "<th scope=\"row\" align=\"left\">Notes</th>";
echo "<td>".$row['notes']."</td>";
echo "</tr>";
echo "<tr>";
echo "<th scope=\"row\" align=\"left\">Photo</th>";
echo "<td>";
echo "<img src=\"getimage.php?id=".$row['ID']."\" width=\"200px\" height=\"150px\" />";
echo "</td>";
echo "</tr>";
echo "</table>";
echo "<BR><BR>";
//Build the navigation
if ($pagenum == 1) 
{
} 
else 
{
echo " <a href='{$_SERVER['PHP_SELF']}?pagenum=1&find=$find&columns=$columns&searching=$searching'> <<-First</a> ";
echo " ";
$previous = $pagenum-1;
echo " <a href='{$_SERVER['PHP_SELF']}?pagenum=$previous&find=$find&columns=$columns&searching=$searching'> <-Previous</a> ";
} 
//This does the same as above, only checking if we are on the last page, and then generating the Next and Last links
if ($pagenum == $last) 
{
} 
else {
$next = $pagenum+1;
echo " <a href='{$_GET['PHP_SELF']}?pagenum=$next&find=$find&columns=$columns&searching=$searching'>Next -></a> ";
echo " ";
echo " <a href='{$_GET['PHP_SELF']}?pagenum=$last&find=$find&columns=$columns&searching=$searching'>Last ->></a> ";
} 
echo "<br><BR>";	
//And we remind them what they searched for 
echo "<b>You searched for:</b> " .$find; 
echo "</div>";
//Build the footer part of the page
echo "$resultsHTMLbelow";
} 
//If there wasn't any results, we say thanks for searching, but we couldn't find anything that was worth showing and ask them to try again
if ($numresults == 0) 
{ 
//Once again, build the HTML output of the page for the "No Search Results" page
echo "$noResultsSearch";
}
}
}
?>

 

Really confusing to say the least.  Could anyone shed some light?  Any help would be appreciated!

 

Cheers,

 

Dave

Link to comment
Share on other sites

Firstly I think it will make it clearer if you tab indent the code so that you can see which code is inside which loop etc

secondly, to debug stuff I always break down my code into easy chunks and get that working first. Then add in the details, tests,  displays etc afterwards. I am a very simple coder haha

 

If you have problems with the results, then display each row with var_dump to see what you are returning in your results. have a counter and display two rows of results to find out why you are getting the same result each time.

Try to ask short, to-the-point questions, and if possible isolate the code which is not working so that we can dive in and quickly see the problem. If we have to look through long code and try to understand your program design, you may not get answered.

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.