PHP MySQL search with multiple criteria

前端 未结 3 452
温柔的废话
温柔的废话 2021-01-23 15:04

I have a search form in a website and would like to have several search terms which is input by the user to perform db search, terms as below:

  • Keywords
  • Pr
3条回答
  •  夕颜
    夕颜 (楼主)
    2021-01-23 15:17

    Instead of taking these variables you should use ".=" operator.

    /*      $t1 = '';
            $t2 = '';
            $t3 = '';
            $t4 = '';
            $t5 = '';
    */
            $q = "SELECT * FROM `property` WHERE `status`='1' ";
    
    // You need to enclose all **OR** logical tests in parenthesis.
    // Moreover most of the usages of isset function are useless,
    // as your are initializing many variables
    
            if($keyword && !empty($keyword)){
                $q .= " AND (`p_title` LIKE '%".$keyword."%' OR `address` LIKE '%".$keyword."%' OR `area` LIKE '%".$keyword."%')";
            }
            if($prop_for && !empty($prop_for)){
    // If you are using double quotes you really don't need  handle to concatenation.
            $q .= " AND `p_for`='$prop_for'";
            }
            if($state && !empty($state)){
                $q .= " AND `state`='$state'";
            }
            if($ptype && !empty($ptype)){
                $q .= " AND `p_category`='$ptype'";
            }
            //min only
            if($min_price && !empty($min_price)){
                $q .= " AND `price` >= '".$min_price."'";
            }
            //max only
            if($max_price && !empty($max_price)){
                $q .= " AND `price` <= '$max_price'";
            }
    
    // When you are not using OFFSET keyword,
    //the first number after LIMIT keyword should be the number of records
                    $q .= " ORDER BY `posted_date` DESC LIMIT $per_page , $start;";
                    $sql = $mysqli->query($q);
    

提交回复
热议问题