2011-07-20 107 views
0

我已经把一个非常复杂的搜索表单。使用数组我已经设法通过复选框来搜索它。PHP搜索引擎

if(isset($_POST['search']) && !empty($_POST['search'])){ 
foreach($_POST['search'] as $key=>$value){ 
    if($value==1) $search[] = "$key"; 
} 
$searchstring = implode(' AND ', $search); 

}

 $query = "SELECT candidate_id.master_id, candidate_contact_details.first_name, candidate_contact_details.last_name, candidate_contact_details.home_phone, candidate_contact_details.work_phone, candidate_contact_details.mobile_phone, candidate_contact_details.email FROM candidate_id, candidate_contact_details, qualifications, security_experience, previous_career WHERE qualifications.active = 'finished' and candidate_id.master_id = candidate_contact_details.c_id and candidate_id.master_id = qualifications.c_id and $searchstring"; 

我知道如何用特定的词做数据库的搜索。即。邮政编码字段,但没有人知道我可以如何添加到此查询?我知道如何执行基于复选框的搜索或基于文本字段的搜索,但不知道如何将两者结合起来。

再次感谢 杰森

+7

有道理这不。通过复选框搜索你是? (sry星球大战前3晚) –

+2

复杂?您没有看到任何... – adlawson

+0

您可能想要查看SQL注入是什么意思 – citronas

回答

0

据我可以理解你的问题,你需要将表单字段的名称映射到数据库列。你可以建立像一个数组:

$post_map = array(
    'home_phone' => 'candidate_contact_details.home_phone', 
    'first_name' => 'candidate_contact_details.first_name', 
    // etc. 
); 

然后,你可以喜欢的东西添加到您的查询(只是一个未经测试的例子......):

foreach ($_POST as $key => $value) 
{ 
    if (array_key_exists($key, $post_map)) 
    { 
    $search[] = $post_map[$key] . '=' . mysql_real_escape_string($value); 
    } 
} 
+0

我想我明白你要去哪里了。我相当新的PHP,所以这是一个学习练习。不是生产环境。据我所知,你所说的地图可以让我将这些添加到我的阵列中,对吧? –

+0

@Jason Gearhart在示例代码中,我将字段和它们的值添加到'$ search'数组,当您将'12345678'放入表单域时,完整的条目例如'candidate_contact_details.home_phone = mysql_real_escape_string(“12345678”)'' 'home_phone'。 – jeroen

+0

谢谢。我明白。试图找出它在我的代码中的位置。 –

0
$query = " 
SELECT 
    candidate_id.master_id, candidate_contact_details.first_name, candidate_contact_details.last_name, candidate_contact_details.home_phone, candidate_contact_details.work_phone, candidate_contact_details.mobile_phone, candidate_contact_details.email FROM candidate_id, candidate_contact_details, qualifications, security_experience, previous_career 
WHERE 
    (qualifications.active = 'finished' and candidate_id.master_id = candidate_contact_details.c_id and candidate_id.master_id = qualifications.c_id) and $searchstring"; 

另外, 你不想 “或” 不是 “和”?

+0

它是AND,因为大约有50个复选框以及这些需求的任意组合。即。在资格表中,搜索可以是任何具有水平和程度但不是olevel等的人。 –