繁体   English   中英

PHP排列if语句的条件

[英]PHP permutation of if statements conditions

我打算用这部分代码创建一个高级搜索功能

 //search.php?name= &country= &city= &age= &gender=
$search_name = 0;
$search_country = 0;
$search_city = 0;
$search_age = 0;
$search_gender = 0;
$allow_querry = false;

if((isset($_GET["name"])) AND ($_GET["name"] != "")) {
 $name = $_GET["name"];
 $search_name = 1;
  }

 if((isset($_GET["country"])) AND ($_GET["country"] != "")) {
 $country = $_GET["country"];
$search_country = 1;
 }

 if((isset($_GET["city"])) AND ($_GET["city"] != "")) {
 $city = $_GET["city"];
 $search_city = 1;
  }

  if((isset($_GET["age"])) AND ($_GET["age"] != "")) {
  $age = $_GET["age"];
   $search_age = 1;

  $age = date('Y', strtotime('-'.$age.' years'));
  }

  if((isset($_GET["gender"])) AND ($_GET["gender"] != "")) {
  $gender = $_GET["gender"];
  $search_gender = 1;
  }

但是,要摆脱所有这些...

 if (($search_name==1) AND ($search_country==1) AND ($search_city==1) AND ($search_age==1) AND ($search_gender==1) ){

}else if(($search_name==1) AND ($search_country==0) AND ($search_city==0) AND ($search_age==0) AND ($search_gender==0) ){

 } 

.....依此类推... = 32 if语句

我以这种格式使用了开关盒功能:

 switch($search_name . $search_country . $search_city . $search_age . $search_gender) {
 case 11111 : 
  $query=mysql_query("SELECT  * FROM users WHERE `username` LIKE '%" . $name .  "%' OR  `country` LIKE '%" . $country .  "%' OR `city` LIKE '%" . $city .  "%' OR `birth_month` LIKE '%" . $age .  "%' OR `sex` LIKE '%" . $gender .  "%' ");
  $allow_querry = true;
   break;
    case 11110 :  
    $query=mysql_query("SELECT  * FROM users WHERE `username` LIKE '%" . $name .  "%' OR  `country` LIKE '%" . $country .  "%' OR `city` LIKE '%" . $city .  "%' OR `birth_month` LIKE '%" . $age .  "%' ");
    $allow_querry = true;
   break;

等等32例

您是否知道还有其他方法可以使它看起来更好或假设我有数百种组合更容易编写呢?

假设您不需要允许and / or变体,只需构建一系列爆选到最终sql的选项即可:

$options = array();
if( ... do city search) {
   $options[] = '`city` LIKE "$name"';
}
if( ... do country search ) {
   $options[] = '`country` LIKE "$name"';
}
etc...

$where_clause = implode(' OR ', $options);

$sql = "SELECT ... WHERE $where_clause";

请注意,您容易受到sql注入攻击的攻击

另外,您也可以使用fulltext搜索,仅搜索所需的特定字段:

if (...city search) {
   $fields[] = 'city';
}
etc...
$field_list = implode(', ', $fields);

$sql = "SELECT ... WHERE MATCH($fields) AGAINST '$name'"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM