On Mon, Jul 14, 2003 at 01:11:11PM +0200, Petre Agenbag wrote:
> 
> HI list

Hi Petre.

> I want to search through a table by "exploding" the search string and
> then compounding my own sql string by working through the array.

I do alot of this.  I have a solution which offloads the slight extra
CPU onto the database server, while simplifying the PHP code a little.

> the if statement inside the loop is
> meant to "strip" out "the" and "and", meaning that it won't much help to
> use that approach anyway.

I've got a more flexible way of doing that too.  How about this:


    $sql = "SELECT * FROM $table_name WHERE ";
    if ($_POST['any_all'] == 'ANY') {
        $logic = 'OR';
        $sql .= '1=0';
    }
    elseif ($_POST['any_all'] == 'ALL') {
        $logic = 'AND';
        $sql .= '1=1';
    }
    else
        die ('form hacking detected');

    // protect from nasty user input
    $string = ereg_replace( '[^a-z0-9]+', ' ', strtolower($_POST['text']) );

    $skip = array(
        'the' => 1,
        'and' => 1,
        'a'   => 1,
    );

    foreach (explode(' ', $string) as $val) {
        if (!$skip[$val]) {
            $sql .= $logic . " name like '%$val%'";
        }
    }

    $sql .= ' ORDER BY name';


-- 
  Paul Chvostek                                             <[EMAIL PROTECTED]>
  it.canada                                            http://www.it.ca/
  Free PHP web hosting!                            http://www.it.ca/web/


-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to