Search code examples
phpcodeigniterconditional-statements

Condition Using Controller in Code Igniter


I'm trying to create a function, it exists and does not exist in the search feature. Condition does not exist, will display Error 404. Condition, exists. Then it will display from search. But in the code I wrote, it only shows Error 404.

This is my model:

    function search_album($keyword){
    $result=$this->db->query("SELECT tbl_album.*,DATE_FORMAT(album_date,'%d %M %Y') AS date FROM tbl_album WHERE album_title LIKE '%$keyword%'");
    return $result;
}

This is my controller:

function search(){
    $keyword=str_replace("'", "", $this->input->post('xfilter',TRUE));
    $x['data']=$this->model_album->search_album($keyword);
    if(empty($x)  &&  empty($keyword)){
        $this->load->view('view_contents',$x);
    }
    else if (!empty($x)  &&  !empty($keyword)){
        $this->load->view('view_error_404');
    }
    
}

I've tried from this source, but it doesn't work. Can you help me?


Solution

  • There are several errors in your code:

    ONE: You have interchanged your if statements. Like, if the search did not return any data and the keyword was not supplied, it is supposed to display the "view_error_404", otherwise, it is supposed to load data into the view "view_contents".You did the vice versa I have corrected that for you in the code below.

    TWO: You are checking if $x is empty which will never be empty as you have initialized $x['data']. Note that the model can return empty data, such that $x['data'] is empty. Instead, check if the search result is empty by replacing empty($x) with empty($x['data'])

    THREE: In your model, you are returning the query builder class, but not the actual data from the query statement. instead, replace return $result; with return $result->result();

    FOUR: From your if statements, you need to add an else statement so that if the 2 conditions are never met, it can execute. With your current implementation, there is a state which will not meet first or second conditions and will lead to a blank screen.

    if(empty($x['data'])  &&  empty($keyword)){
         $this->load->view('view_error_404');
    }else if (!empty($x['data'])  &&  !empty($keyword)){
        $this->load->view('view_contents',$x);    
    }else{
        $this->load->view('view_error_404'); // replace this code with your preference
    }