AND运算符正在工作但是OR运算符在使用codeiniter选择无线电(和/或)按钮的条件下无效

时间:2017-11-22 18:08:45

标签: php codeigniter

这里,我想对多个字段执行搜索查询,这些字段基于AND&要操作的OR运算符我放置了两个单选按钮一个用于AND OPERATOR(匹配两个标准)而另一个是OR OPERATOR(标准之一)。

我的问题在这里AND运算符运行成功但是OR运算符没有运行。

我写了下面的代码:

型号:

// Variables treatise
$lnameFilter=$this->input->post('lnameFilter');
$id=$this->input->post('id');
$firstname= $this->input->post('fname');
$opt=$this->input->post('and');
$strWhere="id_photo LIKE "."'%".$id."%'";

// $lnamefilter treatise
if(!empty($lnameFilter)) {
    // AND OPERATOR (ON SELECTING RADIO BUTTON)
    if($opt==1) { 
        if($strWhere != "") {
            $strWhere=$this->db->where("($strWhere"." AND lastname LIKE "."'%".$lnameFilter."%')"); 
        } 
        else {
            $strWhere=$this->db->where("(lastname LIKE "."'%".$lnameFilter."%')"); 
        }
    }
    // OR OPERATOR (ON SELECTING RADIO BUTTON)
    if($opt==2) {
        if($strWhere != "") {
            $strWhere=$this->db->where("($strWhere"." OR lastname LIKE "."'%".$lnameFilter."%')");
        } 
        else {
            $strWhere=$this->db->where("(lastname LIKE "."'%".$lnameFilter."%')");
        }
    }
}

// $firstname treatise
if(!empty($firstname)) {
    if($opt==1) {
        if($strWhere != "") {
            $strWhere=$this->db->where("($strWhere"." AND firstname LIKE "."'%".$firstname."%')");
        }
        else {
            $strWhere=$this->db->where("(firstname LIKE "."'%".$firstname."%')");
        }
    }
    if($opt==2) {
        if($strWhere != "") {
            $strWhere=$this->db->where("($strWhere"." OR firstname LIKE "."'%".$firstname."%')");
        }
        else {
            $strWhere=$this->db->where("(firstname LIKE "."'%".$firstname."%')");
        }
    }
}

3 个答案:

答案 0 :(得分:0)

不太确定你在这里做什么,但试试这个......在OR是

的两行

更改

 $strWhere=$this->db->where("($strWhere"." OR lastname LIKE "."'%".$lnameFilter."%')");

 $strWhere=$this->db->where("(($strWhere)"." OR lastname LIKE "."'%".$lnameFilter."%')");

那应该解决它。 您的问题是$strWhereOR语句是从左到右执行的,如果您有ANDOR,则可能会非常困惑。

答案 1 :(得分:0)

你不必做$ strWhere = $ this-> db-> where();使用like代替where

只是做你的条件

<div class="input text">
    <input id="zip" name="zip" type="number"  min="0" max="99999" ng-model="formData.zip" placeholder="Type here..." class="input-medium" ng-init="0">

https://www.codeigniter.com/userguide3/database/query_builder.html

答案 2 :(得分:0)

尝试以下代码。

$strWhere=$this->db->where("(".$strWhere.") OR (lastname LIKE '%".$lnameFilter."%')");