0

我正在努力解决我认为应该非常简单的事情,我想知道你们中的任何人是否可以提供帮助。

长话短说; 在我的 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

任何帮助都是值得的!提前致谢

4

0 回答 0