Forum Moderators: coopster

Message Too Old, No Replies

Search with multiply words

         

GertK

8:47 am on Nov 4, 2013 (gmt 0)

10+ Year Member



I'm about to update my search script. The search engine searches in my database where I ask it to search. What is new is I want do some search words, that the users can check in a checkbox, if he wants to use the word in the search.

As for now my search engine works, the only problem is that it only searches the last word and not all of the checked words. My formula looks like this:

<form method="POST" action="<?=$_SERVER["PHP_SELF"]?>"> 
<p>Search for:
</p>
Books: <input type="checkbox" name='search' value="books">
Movies: <input type="checkbox" name='search' value="movies">
Outdoor: <input type="checkbox" name='search' value="outdoor">
Indore: <input type="checkbox" name='search' value="indore">
</p>
<p><input type='submit' value='Search'></p>
</form>


The php code looks like:
<?php 
if(isset($_POST['search']))
{
$connx = mysql_connect('localhost', '*******', ',*********') or die("connx");
$db = mysql_select_db('*********') or die(mysql_error());

# convert to upper case, trim it, and replace spaces with "|":
$search = mysql_real_escape_string($search);
$search = strtoupper(preg_replace('/\s+/', '|', ($_POST['search'])));

# create a MySQL REGEXP for the search:
$regexp = "REGEXP '[[:<:]]($search)[[:>:]]'";
$query = "SELECT * FROM `keywords` WHERE UPPER(`keywords01`) $regexp OR ".
"`keywords02` $regexp OR ".
"`keywords03` $regexp OR ".
"`keywords04` $regexp";

$result = mysql_query($query) or die($query . " - " . mysql_error());

echo "<table>\n";
while($row = mysql_fetch_assoc($result))

{
echo "<tr>";
echo "<td><img src=../{$row['type']}/{$row['folder']}/{$row['date']}-{$row['num']}/{$row['thumbimage']} border=1></td>";
echo "<td>{$row['name']}</td>";
echo "<td>{$row['date']}</td>";
echo "<td><a href=../view.php?id={$row['id']} target=blank>VIEW</a></td>";
echo "</tr>\n";
}
}
else {
echo "<p>Sorry, no results matched your search.</p>";
}
?>


Are there someone, who can figure out, why it is only the last marked checkboxs word that are searched and not all marked words and how do I get it to search for all marked words?

Hope someone can help.

Readie

5:32 pm on Nov 5, 2013 (gmt 0)

WebmasterWorld Senior Member 10+ Year Member



Books: <input type="checkbox" name='search' value="books">
Movies: <input type="checkbox" name='search' value="movies">
Outdoor: <input type="checkbox" name='search' value="outdoor">
Indore: <input type="checkbox" name='search' value="indore">

Here lies your problem.

Currently each subsequent checkbox is overwriting the value of the previous one. If you changed the name from "search" to "search[]", then in your PHP script you could see it as an array:

print_r($_POST['search']);

GertK

7:25 pm on Nov 6, 2013 (gmt 0)

10+ Year Member



Thanks for taking the time to answer me. I found out that if I replaced the lines:

----------------------------------------------------------------------------

$search = mysql_real_escape_string($search);
$search = strtoupper(preg_replace('/\s+/', '|', ($_POST['search'])));

----------------------------------------------------------------------------


With:

----------------------------------------------------------------------------
$search = implode( '|', $_POST['search'] );

----------------------------------------------------------------------------

Then my script is working :)

omoutop

3:01 pm on Nov 8, 2013 (gmt 0)

WebmasterWorld Senior Member 10+ Year Member Top Contributors Of The Month



good one