Stefanos Vakirtzis
Stefanos Vakirtzis

Reputation: 448

How i will make a LIKE search in the following code?

I've got the following code which is something like a form search engine with multiple inputs where the results are kinda absolute concerning the number of characters etc(perfect match) .

// build array of field names=============================================================================
$fields=array('user','customer','vessel','country',
             'port','eta','service_station','type_of_service',
             'case_reference','status');

// initialize empty array for WHERE clauses
$wheres=array();

// loop through field names, get POSTed values,
// and build array of WHERE clauses, excluding false values
foreach ($fields as $field) {
  // get existing field value from POST, mark missing or empty value as FALSE
  ${$field} = isset($_POST[$field]) && trim($_POST[$field])!=''
      ? trim($_POST[$field]) : false;

  // add to array of WHERE clauses only if value is not FALSE
  if (${$field}) { $wheres[]="$field='".${$field}."'"; }

}

// build SELECT statement from WHERE clauses
$sql="SELECT * FROM jobs WHERE ".
     (!empty($wheres) ? implode(" AND ",$wheres) : '1=1').
     ";";

What i want to do is add an input in the form

<label for="special">Special Search</label>
            <input type="text" name="special" id="special_search">

where the user would be able to search in the case_reference field and get the results that match the first four characters. Also i would like this new input to work the same as the others as far as the AND or OR and TRUE or FALSE statements are concerned.

All help appreciated thank you in advance:)

UPDATE : Instead of rewriting the whole thing i came up with the following code at the begining of my previous :

$joker = $_POST['special'];
$joker1 = substr($joker1, 0, 4);
if(isset($_POST['case_reference']) && !empty($_POST['case_reference']) 
                                    && empty($_POST['special'])) {

} else { $_POST['case_reference'] = $joker1; }

It is working for now but anyone can confirm that it would be okay in future??

Upvotes: 0

Views: 98

Answers (2)

Kickstart
Kickstart

Reputation: 21533

Rewritten avoiding variable variable names, and using mysql_real_escape_string (although you should use mysqli or pdo):-

<?php
// build array of field names=============================================================================
$fields=array('user','customer','vessel','country',
             'port','eta','service_station','type_of_service',
             'case_reference','status');

// initialize empty array for WHERE clauses
$wheres = array('1=1');

// loop through field names, get POSTed values,
// and build array of WHERE clauses, excluding false values
foreach ($fields as $field) 
{
    // get existing field value from POST, mark missing or empty value as FALSE
    if (isset($_POST[$field]) && trim($_POST[$field])!='')
    {
        $wheres[]="`$field`='".mysql_real_escape_string(trim($_POST[$field]))."'";
    }
}

if (isset($_POST['special']) && trim($_POST['special'])!='')
{
    $wheres[] = " case_reference' LIKE '".mysql_real_escape_string(trim($_POST['special']))."%'";
)

// build SELECT statement from WHERE clauses
$sql="SELECT * FROM jobs WHERE (".implode(" AND ",$wheres).") ;";
?>

Upvotes: 0

user3041760
user3041760

Reputation:

From the SQL:

$sql="SELECT * FROM jobs WHERE ". (!empty($wheres) ? implode(" AND ",$wheres) : '1=1').";";

Just simply add a variable for special:

$special = $_POST['special']; // this will get the data from the textbox

then add it to the sql statement

$sql="SELECT * FROM jobs WHERE LIKE $special 'aaaa%' AND ". (!empty($wheres) ? implode(" AND ",$wheres) : '1=1').";";

Upvotes: 1

Related Questions