Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如果用户只填写一个字段,则MySQL查询不起作用_Php_Mysql_Forms_Codeigniter - Fatal编程技术网

Php 如果用户只填写一个字段,则MySQL查询不起作用

Php 如果用户只填写一个字段,则MySQL查询不起作用,php,mysql,forms,codeigniter,Php,Mysql,Forms,Codeigniter,我在CodeIgniter中工作,从中搜索将查询数据库 这三个字段是位置下拉列表、日期和事件类型下拉列表 我当前使用的代码是: public function search_flyers($location, $date) { $date = $this->utils_model->get_sql_date($date); $query = $this->db->query("SELECT *, flyers.fid FROM flyers

我在CodeIgniter中工作,从中搜索将查询数据库

这三个字段是位置下拉列表、日期和事件类型下拉列表

我当前使用的代码是:

public function search_flyers($location, $date) {
    $date = $this->utils_model->get_sql_date($date);
    $query = $this->db->query("SELECT *, flyers.fid FROM flyers 
                LEFT JOIN event_dates ON flyers.fid = event_dates.fid 
                WHERE ((flyers.interval='weekly' 
                    AND DATEDIFF('" . $date . "',flyers.start_date)%7=0 
                    AND '" . $date . "' <= flyers.end_date)
                  OR (flyers.interval='fornightly' 
                    AND DATEDIFF('" . $date . "',flyers.start_date)%14=0 
                    AND '" . $date . "' <= flyers.end_date)
                  OR (flyers.interval='manual' 
                    AND event_dates.date = '" . $date . "' 
                    OR flyers.start_date = '".$date."' 
                    AND '".$date."' <= flyers.end_date) AND flyers.approved = 1) 
                AND flyers.location = '".$location."' 
                GROUP BY flyers.fid 
                ORDER BY flyers.start_date ASC");

    $data['flyers'] = $query->result();
    $data['rows'] = $query->num_rows();

    return $data;
所提到的事件日期与“间隔”字段一起使用,以确定事件是否落在用户搜索的日期

该活动还必须获得批准才能显示在搜索结果中

问题是,如果用户只填写一个字段,则表单不起作用

以前的一位开发人员编写了这段代码,我负责让它工作


通常我会改变照片和传单的位置。。。到或flyers.location,但这意味着它将返回您指定的日期或位置的结果。

有几种方法可以解决此问题,但最快的方法是在方法签名本身中设置默认值

而不是

public function search_flyers($location, $date) 
您可以通过如下设置来添加默认值,这只是一个示例

public function search_flyers($location = 'mylocationstring', $date = strtotime("-1 week"))
如果用户未选择日期或位置,$date和$location将默认为您指定的值

现在更简洁的方法是在让用户提交表单之前,在视图中验证用户是否正确填写了表单。通过使用CodeIgniter的表单验证,如果表单验证运行等于false,则不允许用户运行search_flyers$date$location

if ($this->form_validation->run() == FALSE) 
{
   //go back to your initial view
}
else
     {
          $data['results'] = search_flyers($location,$date)     
                  $this->load->view('form success',$data);
    }

您是否有要求在SQL查询中执行这部分操作?如果性能不是一个大问题,我建议在PHP代码中进行日期检查。在查询数据库之前,在PHP中进行日期检查会更容易,但我不知道如何进行?