我正在尝试使用php和pdo构建一个分类器,在那里我可以为用户显示任务。 我有几个选择,我可以从中选择一个或全部。
<select id="select_user">
<option data-id="all">All</option>
<option data-id="1">User 1</option>
<option data-id="2">User 2</option>
<option data-id="3">User 3</option>
<option data-id="4">User 4</option>
</select>
根据任务是否完成显示任务。
<select id="task_done">
<option data-id="all">All</option>
<option data-id="1">Done</option>
<option data-id="0">Not Done</option>
</select>
根据截止日期是否已过去显示任务。
<select id="task_deadline">
<option data-id="all">All</option>
<option data-id="1">Passed</option>
<option data-id="0">Not passed</option>
</select>
通过一些Ajax我调用php函数看起来像这样:
function getTasksSorter($userid, $done, $passed) {
$stmt = $this->conn->prepare('SELECT * FROM tasks WHERE user_id = :userid AND done = :done AND deadline_date = :passed');
$stmt->execute(array('userid' => $userid,'done' => $done, 'passed' => $passed));
$row = $stmt->fetchAll();
foreach.. $row... build $html;
}
return $html;
}
如果我选择All,显然这不起作用。我试图解决这个问题,但我无法弄明白。如何修改代码以使所有选择都有效?
编辑:好的,我添加了很多信息,因为当我第一次询问时我还不够清楚。我不想用一堆if语句来解决这个问题,必须有一个更好的解决方案。答案 0 :(得分:3)
那么你的逻辑可能取决于为这样的$userid
提供一个值。
function getTasksSorter($userid = null) {
if(is_null($userid)){
$stmt = $this->conn->query('SELECT * FROM tasks');
} else {
$stmt = $this->conn->prepare('SELECT * FROM tasks WHERE user_id = :userid');
$stmt->execute(array('userid' => $userid));
}
$row = $stmt->fetchAll();
foreach.. $row... build $html;
}
return $html;
}