Jump to content

Recommended Posts

As per the code below I am trying to create a search page which enable people to search different databases in a simple method.  However, the code searches each other.

 

So if I put "What is your name?" into "Questions" it shows:

 

Questions: "What is your name?"

Answer:  "Sorry, but we can not find an entry to match your query"

 

But I am not searching the Answer database so it should just remain blank and should show:

 

Questions: "What is your name?"

Answer:  (Blank)

 

Does anyone know why it is doing this?

<h2>Questions</h2> 
<form name="search" method="post" action="<?=$PHP_SELF?>">
Seach for: <input type="text" name="find" /> in 
<Select NAME="field">
<Option VALUE="category">Category</option>
<Option VALUE="question">Question</option>
<Option VALUE="notes">Notes</option>
</Select>
<input type="hidden" name="searching" value="yes" />
<input type="submit" name="search" value="Search" />
</form>


<? 
//This is only displayed if they have submitted the form 
if ($searching =="yes") 
{ 
echo "<h2>Results</h2><p>"; 

//If they did not enter a search term we give them an error 
if ($find == "") 
{ 
echo "<p>You forgot to enter a search term"; 
exit; 
} 


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

//Now we search for our search term, in the field the user specified 
$data = mysql_query("SELECT * FROM questions WHERE upper($field) LIKE'%$find%'"); 

//And we display the results 
while($result = mysql_fetch_array( $data )) 
{ 
echo $result['category']; 
echo " <br>" ; 
echo $result['question']; 
echo "<br>"; 
echo $result['notes']; 
echo "<br>"; 
echo "<br>"; 
} 

//This counts the number or results - and if there wasn't any it gives them a little message explaining that 
$anymatches=mysql_num_rows($data); 
if ($anymatches == 0) 
{ 
echo "Sorry, but we can not find an entry to match your query<br><br>"; 
} 

//And we remind them what they searched for 
echo "<b>Searched For:</b> " .$find; 
} 

// close connection 
mysql_close();
?> 








<h2>Answers</h2> 
<form name="search" method="post" action="<?=$PHP_SELF?>">
Seach for: <input type="text" name="find" /> in 
<Select NAME="field">
<Option VALUE="answer">Answer</option>
</Select>
<input type="hidden" name="searching" value="yes" />
<input type="submit" name="search" value="Search" />
</form>


<? 
//This is only displayed if they have submitted the form 
if ($searching =="yes") 
{ 
echo "<h2>Results</h2><p>"; 

//If they did not enter a search term we give them an error 
if ($find == "") 
{ 
echo "<p>You forgot to enter a search term"; 
exit; 
} 

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

//Now we search for our search term, in the field the user specified 
$data = mysql_query("SELECT * FROM answers WHERE upper($field) LIKE'%$find%' LIMIT 0,10 "); 

//And we display the results 
while($result = mysql_fetch_array( $data )) 
{ 
echo $result['answer']; 
echo " <br>"; 
} 

//This counts the number or results - and if there wasn't any it gives them a little message explaining that 
$anymatches=mysql_num_rows($data); 
if ($anymatches == 0) 
{ 
echo "Sorry, but we can not find an entry to match your query<br><br>"; 
} 

//And we remind them what they searched for 
echo "<b>Searched For:</b> " .$find; 
} 
?> 

They're not searching one another.  In the case of no matches, both searches display the same message rather than one displaying nothing and the other displaying a message.

 

I do have a question - why are you blindly copying the guts of both forms?  Give them unique identifiers - form names, input names, etc.  If you have two <input name="field"> elements, PHP will only 'see' the second one.  Names, like ids, are supposed to be unique.

That's because, like I said before, you have two versions of the same form.  By the time PHP gets the values sent to it via POST, only the second set of values are there.  Why?  Because if you have form fields with the same name, PHP will only recognize the last/most recent field with that name.  Identifiers must be unique, and PHP assumes they will be.

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.