2013-07-03 45 views
1

我正在尝试执行搜索,用户可以搜索18岁以上或以下的候选人。在搜索期间选择使用dob的年龄组

在搜索时代组件的HTML:

Age<select id ='eighteen' name="eighteen" size="1" > 
    <option value="Below Eighteen">Below Eighteen</option> 
    <option value="Above Eighteen">Above Eighteen</option> 
    <option value="Any">Any</option> 
    </select> 

PHP代码:

$age = trim($_POST['eighteen']);  

$query2 = mysql_query("SELECT * FROM p_candidate WHERE YEAR(CURDATE())-YEAR(`age`) >= 18"); 
$query = mysql_query("SELECT * FROM p_candidate WHERE YEAR(CURDATE())-YEAR(`age`) < 18"); 
if ($age =="Below Eighteen") {$dob = $query;} 
if ($age == "Above Eighteen") {$dob = $query2;} 



$Odata = mysql_query("SELECT * FROM p_candidate WHERE(`gender` LIKE '%".$Gender."%') AND (`age` LIKE '%".$dob."%')") or die(mysql_error()); 

当我没有在搜索表单填写的性别字段运行这段代码,我不得到任何结果。我怎样才能使这个工作?我需要修改哪部分?

我的数据库是MySQL和候选人的DOB都存储在一个名为年龄

+0

2 ???一个人的年龄如何在同一时间低于18岁或以上?试试其他如果:) –

+1

如果它们恰好是18呢? – andrewsi

+0

我已经将query2更改为$ query2 = mysql_query(“SELECT * FROM p_candidate WHERE YEAR(CURDATE()) - YEAR('age')> = 18”); – user2510479

回答

0

这是我最后用 - if语句现在的工作

if ($age == "Above Eighteen") { 
$Odata = mysql_query("SELECT * FROM p_candidate WHERE(`gender` LIKE '%".$Gender."%') AND  (YEAR(CURDATE())-YEAR(`age`) >= 18)") or die(mysql_error());} 

if ($age == "Below Eighteen") { 
$Odata2 = mysql_query("SELECT * FROM p_candidate WHERE(`gender` LIKE '%".$Gender."%') AND  (YEAR(CURDATE())-YEAR(`age`) < 18)") or die(mysql_error());} 
1

,看看他们是至少18岁的列,可以从当前日期减去18岁及比较其诞生日期(这似乎是age列)。

18岁或以上

SELECT * FROM p_candidate WHERE age <= CURDATE() - INTERVAL 18 YEAR 

在18

SELECT * FROM p_candidate WHERE age > CURDATE() - INTERVAL 18 YEAR 

我也想避免使用LIKE当你不就得了。如果您正在检查性别F或性别M,那么只需说WHERE gender = 'F'WHERE gender = 'M'。通过过度使用LIKE,您无法获得任何收益,而且您可能会放慢其他优化查询的速度。

+0

谢谢@EdGibbs,但我仍然无法获取返回值的代码。 – user2510479

+1

它可能是您的PHP代码。在你的例子中,你将'$ dob'设置为'$ query'或'$ query2',但是当你实际执行查询时(代码的最后一行),你正在运行一个完全不同的查询。如果您将'$ dob'设置为我的查询之一(加上性别逻辑),然后运行'$ dob'查询,它应该可以正常工作。另外请注意,你不应该使用'mysql_ *'系列函数,因为它们可能会导致SQL注入 - 已经有很多来自编码器的帖子,它们的网站因为使用了'mysql_ *'方法而遭到黑客入侵,而且它是限制你的网站被黑客攻击的事情。 –

+0

谢谢@EdGibbs - 我让它工作最后:)我已经发布了代码片段的答案。非常感谢您的意见! – user2510479

1

为您的选择强制设置一个默认值,以便该字段始终填充一些内容。 像这样:

Age<select id ='eighteen' name="eighteen" size="1" > 
    <option value="Below Eighteen">Below Eighteen</option> 
    <option value="Above Eighteen">Above Eighteen</option> 
    <option value="Any" selected>Any</option> 
    </select> 
+1

这是一个非常有价值的建议@GuiGreg – user2510479