justlukeyou Posted March 19, 2011 Share Posted March 19, 2011 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; } ?> Quote Link to comment https://forums.phpfreaks.com/topic/231092-two-search-functions-should-not-work-together/ Share on other sites More sharing options...
KevinM1 Posted March 19, 2011 Share Posted March 19, 2011 Because at the end of both queries, you have: if ($anymatches == 0) { echo "Sorry, but we can not find an entry to match your query<br><br>"; } Quote Link to comment https://forums.phpfreaks.com/topic/231092-two-search-functions-should-not-work-together/#findComment-1189557 Share on other sites More sharing options...
justlukeyou Posted March 19, 2011 Author Share Posted March 19, 2011 Thanks, So can I stop them from searching one another? How come they are both searching one another? Quote Link to comment https://forums.phpfreaks.com/topic/231092-two-search-functions-should-not-work-together/#findComment-1189558 Share on other sites More sharing options...
KevinM1 Posted March 19, 2011 Share Posted March 19, 2011 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. Quote Link to comment https://forums.phpfreaks.com/topic/231092-two-search-functions-should-not-work-together/#findComment-1189563 Share on other sites More sharing options...
justlukeyou Posted March 19, 2011 Author Share Posted March 19, 2011 Thanks, I shall change the names. But if I search the first one with a term which is in the first database (questions) the second one carries out the same search on its database (answers). Quote Link to comment https://forums.phpfreaks.com/topic/231092-two-search-functions-should-not-work-together/#findComment-1189567 Share on other sites More sharing options...
KevinM1 Posted March 19, 2011 Share Posted March 19, 2011 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. Quote Link to comment https://forums.phpfreaks.com/topic/231092-two-search-functions-should-not-work-together/#findComment-1189572 Share on other sites More sharing options...
justlukeyou Posted March 19, 2011 Author Share Posted March 19, 2011 Thanks mate, I have changed all the names and it works perfectly. Quote Link to comment https://forums.phpfreaks.com/topic/231092-two-search-functions-should-not-work-together/#findComment-1189576 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.