gpt4 book ai didi

php - 如果用户只填写一个字段,MySQL 查询将不起作用

转载 作者:行者123 更新时间:2023-11-29 14:50:10 25 4
gpt4 key购买 nike

我正在 CodeIgniter 中进行搜索,该搜索将查询数据库。

这三个字段是“Location”(下拉列表)、“Date”(日期)和“Event Type”(下拉列表)。

我当前使用的代码是:

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;

提到的事件日期与“间隔”字段结合使用,以确定事件是否落在用户搜索的日期。

该事件还必须获得批准才能显示在搜索结果中。

问题是,如果用户只填写一个字段,则该表单将无法工作。

以前的开发人员已经编写了这段代码,我负责使其工作。

通常我会将 AND Flyers.location... 更改为 OR Flyers.location,但这意味着它将返回日期或位置的结果您指定的。

最佳答案

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

而不是

public function search_flyers($location, $date) 

您实际上可以通过像这样设置它们来添加默认值(只是一个示例)

public function search_flyers($location = 'mylocationstring', $date = strtotime("-1 week"))

如果用户未选择日期或位置,$date 和 $location 将默认为您指定的值。

现在,更简洁的方法是在让用户提交表单之前实际验证用户是否已在 View 中正确填写表单。您可以使用 CodeIgniter 的表单验证来做到这一点 http://codeigniter.com/user_guide/libraries/form_validation.html如果表单验证运行等于 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);
}

关于php - 如果用户只填写一个字段,MySQL 查询将不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5924047/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com