SitePoint Sponsor

User Tag List

Results 1 to 6 of 6
  1. #1
    SitePoint Member
    Join Date
    Nov 2013
    Posts
    21
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    Search with multiply words

    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:
    HTML Code:
    <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 Code:
    <?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.

  2. #2
    SitePoint Evangelist
    Join Date
    Oct 2005
    Location
    Michigan, USA
    Posts
    434
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)
    You'll need to change your input names to use array syntax like:
    type="checkbox" name='search[]'

    then $_POST['search'] will be an array. That being the case, you will then need to change your line which converts spaces to pipe.
    - Robert

  3. #3
    Hosting Team Leader silver trophybronze trophy
    cpradio's Avatar
    Join Date
    Jun 2002
    Location
    Ohio
    Posts
    5,118
    Mentioned
    152 Post(s)
    Tagged
    0 Thread(s)
    As an FYI, your mysql_real_escape_string is doing nothing to protect your query.
    PHP Code:
    $search mysql_real_escape_string($search);  
      
    $search strtoupper(preg_replace('/\s+/''|', ($_POST['search']))); 
    The first line would be applying mysql_real_escape_string to an empty/null string (unless you have register globals on).
    Even if the first line worked, the second line is overwriting it with data found in the $_POST array.

  4. #4
    SitePoint Member
    Join Date
    Nov 2013
    Posts
    21
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)
    Thanks QMonkey. You say:
    then $_POST['search'] will be an array. That being the case, you will then need to change your line which converts spaces to pipe.
    How do I do that? How would look like? Can you please show me the code?

    Hope you can help have been stocked with this for the last 4 days now :/

  5. #5
    SitePoint Evangelist
    Join Date
    Oct 2005
    Location
    Michigan, USA
    Posts
    434
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)
    If it's an array, you would just need to implode
    PHP Code:
    $search implode'|'$_POST['search'] ); 
    And be sure to incorporate escaping as mentioned by cpradio.
    - Robert

  6. #6
    SitePoint Member
    Join Date
    Nov 2013
    Posts
    21
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)
    PERFECT its working THANKS

    My script now looks like:
    Code:
    <?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 = implode( '|', $_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>";
    }
    ?>
    Do I miss anything to fine tune the codes?

    What does this means:
    incorporate escaping
    IS that something I need to Work with?


Tags for this Thread

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •