我正在努力解决我认为应该非常简单的事情,我想知道你们中的任何人是否可以提供帮助。
长话短说; 在我的 php 搜索表单中,用户可以选择“fromdate”和“todate”。他们还可以输入两个字符串,通常是电话号码。
用户不必输入日期范围,他们只需使用发送者和接收者进行搜索。如果是这种情况,我希望 $daterange_stmt 为空白,并且 SQL 语句中不存在 AND 运算符。
同样,如果用户只提供日期范围而不提供发送方/接收方,我希望 SQL 语句不包含 AND 运算符且不包含 $operator_stmt。
如果其中一些代码是胡说八道,请原谅-我已经在各处添加和更改了位,试图使其正常工作... php 不是我的强项。
Vars被这样抓住......
$df = $_POST['df'];
$dt = $_POST['dt'];
$sender = $_POST['sender'];
$reciever = $_POST['reciever'];
我的 SQL 选择语句看起来像这样......
$sql = "SELECT * FROM comms_session_all s JOIN operators u ON s.agent = u.user_id WHERE " . $whereclause . " ORDER BY start_time ASC";
$Whereclause 是这样声明的......
$daterange_stmt = "";
$operator_stmt= "";
if(!($df==" ")){
$daterange_stmt = "start_time between '" . $df. "' AND '" . $dt. "'";
}
if(!(empty($sender))){
$operator_stmt= "sender like '%" . $sender . "%' AND reciever like '%" . $reciever. "%'";
}
$whereclause = $daterange_stmt;
if(!(df==" ")){
if(!($operator_stmt=="")){
$whereclause = $daterange_stmt . " AND " . $operator_stmt;
}
} else {
if(!($operator_stmt=="")){
$whereclause = $operator_stmt;
}
}
因此,目前如果提供了日期范围并提供了发送者/接收者,那么搜索工作正常,一切都很好。
如果只输入一个位,则由于流氓 AND 不需要存在而失败。执行时的 SQL 语句是这样的......
SELECT * FROM comms_session_all s JOIN operator u ON s.agent = u.user_id WHERE AND sender like '%447958xxxx%' AND receiver like '%123456%' ORDER BY start_time ASC2
任何帮助都是值得的!提前致谢