2013-11-27 28 views
0

我得到了下面的代码,这是类似的形式搜索引擎与多个输入其中结果是绝对有关的字符数量等(完美匹配) 。如何在下面的代码中进行LIKE搜索?

// 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'). 
    ";"; 

我想要做的是什么形式

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

当用户将能够在case_reference栏来搜索并获得比赛第4,结果添加输入个字符。我还希望这个新的输入与其他的一样,就AND或OR和TRUE或FALSE语句而言与其他的一样。

感谢所有帮助谢谢提前:)

UPDATE:不是重写整个事情的,我想出了下面的代码在我以前的开头:

$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; } 

这是现在工作,但任何人都可以确认将来会好吗?

+0

您可以使用SELECT * FROM

WHERE LIKE “1234%” 1234是你的前四个字符(你可以在PHP中使用substr($ str,0,4)从变量中提取)祝你好运 – SquareCat

+0

小问题,但是你的代码对SQL注入攻击是开放的。 – Kickstart

回答

0

改写避免变量变量名称,并使用mysql_real_escape_string(虽然你使用mysqli或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).") ;"; 
?> 
1

从SQL:

$ SQL = “SELECT * FROM工作WHERE”。 (!empty($ wheres)?implode(“AND”,$ wheres):'1 = 1')。“;”;

只需简单地增加一个变量特殊:

$特殊= $ _ POST [ '特殊']; //这会从文本

获取数据,然后将其添加到SQL语句

$ SQL = “SELECT * FROM工作在那里同样的$特殊的 'AAAA%' AND”。 (!empty($ wheres)?implode(“AND”,$ wheres):'1 = 1')。“;”;

相关问题