Ошибка таблицы данных Неопределенный индекс Codeigniter - PullRequest
0 голосов
/ 29 ноября 2018

Я уже использовал таблицы данных, но впервые сталкиваюсь с подобным типом ошибки.

У меня есть ошибки:

Message: Undefined index: order
Message: Undefined index: start
Message: Undefined index: length

Message: Call to a member function result_array() on boolean

Line: 253

(я просто сделал ярлык для ошибок)

Мой код Ajax:

var dataTable = $('#table-grid').DataTable({ // *** This is for Data Table
    "processing": true,
    "serverSide": true,
    columnDefs: [
        { orderable: false, targets: [6,5]},
        { class: "text-center", targets: [5,6]},
    ],
    "ajax":{
        url :base_url+"LandClient/view_properties", // json datasource
        type: "post",  // method  , by default get
        data: {'email': $('#email').val()},
        error: function(){  // error handling
            $(".table-grid-error").html("");
            $("#table-grid").append('<tbody class="table-grid-error"><tr><th colspan="5">No data found in the server</th></tr></tbody>');
            $("#table-grid_processing").css("display","none");
        }
    }
});

Мой контроллер:

public function view_properties(){
    $email = $this->session->userdata('login_email');
    generate_json($this->LandClientModel->view_properties($email));
}

Моя модель:

public function view_properties($email){
    // storing  request (ie, get/post) global array to a variable  
    $requestData= $_REQUEST;


    $columns = array( 
        // datatable column index  => database column name for sorting
            0 => 'pr.date_created',
            1 => 'dc.tdn_no',
            2 => 'oct.orig_cert_no,tct.orig_cert_no',
            3 => 'tct_no',
            4 => 'owner_name',
            5 => 'pr.status',
        );

    // getting total number records without any search

    $sql = "SELECT *,oct.orig_cert_no as oct1, tct.orig_cert_no as oct2  FROM land_property pr 
            LEFT JOIN land_property_orig_title oct ON pr.prop_id = oct.prop_id
            LEFT JOIN land_property_transfer_title tct ON pr.prop_id = tct.prop_id
            LEFT JOIN land_property_declaration dc ON pr.prop_id = dc.prop_id
            WHERE pr.email = ? ";
    $params = array($email);
    $query = $this->db->query($sql, $params);
    $totalData = $query->num_rows();

    $totalFiltered = $totalData;  // when there is no search parameter then total number rows = total number filtered rows.





    if( !empty($requestData['columns'][0]['search']['value']) ) //email address
    { 
        $sql.=" AND tdn_no LIKE '%". $this->db->escape_like_str(sanitize($requestData['columns'][0]['search']['value']))."%' ";
    }

    if( !empty($requestData['columns'][1]['search']['value']) ) //email address
    { 
        $sql.=" AND oct.orig_cert_no LIKE '%". $this->db->escape_like_str(sanitize($requestData['columns'][1]['search']['value']))."%' OR tct.orig_cert_no LIKE '%". $this->db->escape_like_str(sanitize($requestData['columns'][1]['search']['value']))."%' ";
    }


    if( !empty($requestData['columns'][2]['search']['value']) ) //email address
    { 
        $sql.=" AND owner_name LIKE '%". $this->db->escape_like_str(sanitize($requestData['columns'][2]['search']['value']))."%' ";
    }


    if( !empty($requestData['columns'][3]['search']['value']) ) //email address
    { 
        $sql.=" AND tct_no LIKE '%". $this->db->escape_like_str(sanitize($requestData['columns'][3]['search']['value']))."%' ";
    }



    $query = $this->db->query($sql, $params);
    $totalFiltered = $query->num_rows(); // when there is a search parameter then we have to modify total number filtered rows as per search result.

     $sql.=" ORDER BY ". $columns[$requestData['order'][0]['column']]."   ".$requestData['order'][0]['dir']."   LIMIT ".$requestData['start']." ,".$requestData['length']."   ";  // adding length


    $query = $this->db->query($sql, $params);
    $data = array();

    foreach( $query->result_array() as $row ) {  // preparing an array for table tbody
        $nestedData=array(); 
        // $nestedData[] = $row["date_created"];
            if($row['tdn_no']==''){
                $tdn = "<h1>-</h1>";
            } else {
                $tdn = $row['tdn_no'];
            }
            $nestedData[] = $tdn;
            if($row['oct1']!=""){
                $nestedData[] = $row["oct1"];
            } else {
                $nestedData[] = $row["oct2"];
            }
            $nestedData[] = $row["tct_no"]==""?"-":$row["tct_no"];
            $nestedData[] = $row["owner_name"];


            if($row["status"] == 4){
                $status = "<span class='badge badge-danger tbl-badge'>Hold</span>";
            }
            elseif($row["status"] == 1){
                    $status = "<span class='badge badge-success tbl-badge'>Assessed</span>";
            }
             elseif($row["status"] == 2){
                    $status = "<span class='badge badge-warning tbl-badge'>For Assessment</span>";
            }
            $nestedData[] = $status;

            $nestedData[] = $row["status"];




            $nestedData[] = '<button class="btn btn-primary btnView btnView-1 btn-cus" > View</button>  ';
            $data[] = $nestedData;
    }
    $json_data = array(
        "recordsTotal"    => intval( $totalData ),  // total number of records
        "recordsFiltered" => intval( $totalFiltered ), // total number of records after searching, if there is no searching then totalFiltered = totalData
        "data"            => $data,   // total data array
    );

    return $json_data;
}

кстати, строка 253 -

 $sql.=" ORDER BY ". $columns[$requestData['order'][0]['column']]."   ".$requestData['order'][0]['dir']."   LIMIT ".$requestData['start']." ,".$requestData['length']."   ";  // adding length

Ответы [ 2 ]

0 голосов
/ 30 ноября 2018

сначала проверьте, какая переменная или kay установлена ​​или не используется с помощью функции isset, как эта

if(isset($requestData['order'][0]['column']) && isset($requestData['order'][0]['dir']) && isset($requestData['start']) && isset($requestData['length'])){
     $sql.=" ORDER BY ". $columns[$requestData['order'][0]['column']]."   ".$requestData['order'][0]['dir']."   LIMIT ".$requestData['start']." ,".$requestData['length']."   ";  // adding length
    }

проверьте ваш код везде

public function view_properties($email){
    // storing  request (ie, get/post) global array to a variable  
    $requestData= $_REQUEST;

    $columns = array( 
        // datatable column index  => database column name for sorting
            0 => 'pr.date_created',
            1 => 'dc.tdn_no',
            2 => 'oct.orig_cert_no,tct.orig_cert_no',
            3 => 'tct_no',
            4 => 'owner_name',
            5 => 'pr.status',
        );

    // getting total number records without any search

    $sql = "SELECT *,oct.orig_cert_no as oct1, tct.orig_cert_no as oct2  FROM land_property pr 
            LEFT JOIN land_property_orig_title oct ON pr.prop_id = oct.prop_id
            LEFT JOIN land_property_transfer_title tct ON pr.prop_id = tct.prop_id
            LEFT JOIN land_property_declaration dc ON pr.prop_id = dc.prop_id
            WHERE pr.email = ? ";
    $params = array($email);
    $query = $this->db->query($sql, $params);
    $totalData = $query->num_rows();

    $totalFiltered = $totalData;  // when there is no search parameter then total number rows = total number filtered rows.

    if( !empty($requestData['columns'][0]['search']['value']) ) //email address
    { 
        $sql.=" AND tdn_no LIKE '%". $this->db->escape_like_str(sanitize($requestData['columns'][0]['search']['value']))."%' ";
    }

    if( !empty($requestData['columns'][1]['search']['value']) ) //email address
    { 
        $sql.=" AND oct.orig_cert_no LIKE '%". $this->db->escape_like_str(sanitize($requestData['columns'][1]['search']['value']))."%' OR tct.orig_cert_no LIKE '%". $this->db->escape_like_str(sanitize($requestData['columns'][1]['search']['value']))."%' ";
    }

    if( !empty($requestData['columns'][2]['search']['value']) ) //email address
    { 
        $sql.=" AND owner_name LIKE '%". $this->db->escape_like_str(sanitize($requestData['columns'][2]['search']['value']))."%' ";
    }

    if( !empty($requestData['columns'][3]['search']['value']) ) //email address
    { 
        $sql.=" AND tct_no LIKE '%". $this->db->escape_like_str(sanitize($requestData['columns'][3]['search']['value']))."%' ";
    }

    $query = $this->db->query($sql, $params);
    $totalFiltered = $query->num_rows(); // when there is a search parameter then we have to modify total number filtered rows as per search result.

    if(isset($requestData['length'])){
     $sql.=" ORDER BY ". $columns[$requestData['order'][0]['column']]."   ".$requestData['order'][0]['dir']."   LIMIT ".$requestData['start']." ,".$requestData['length']."   ";  // adding length
    }

    $query = $this->db->query($sql, $params);
    $data = array();

    foreach( $query->result_array() as $row ) {  // preparing an array for table tbody
        $nestedData=array(); 
        // $nestedData[] = $row["date_created"];
            if($row['tdn_no']==''){
                $tdn = "<h1>-</h1>";
            } else {
                $tdn = $row['tdn_no'];
            }
            $nestedData[] = $tdn;
            if($row['oct1']!=""){
                $nestedData[] = $row["oct1"];
            } else {
                $nestedData[] = $row["oct2"];
            }
            $nestedData[] = $row["tct_no"]==""?"-":$row["tct_no"];
            $nestedData[] = $row["owner_name"];

            if($row["status"] == 4){
                $status = "<span class='badge badge-danger tbl-badge'>Hold</span>";
            }
            elseif($row["status"] == 1){
                    $status = "<span class='badge badge-success tbl-badge'>Assessed</span>";
            }
             elseif($row["status"] == 2){
                    $status = "<span class='badge badge-warning tbl-badge'>For Assessment</span>";
            }
            $nestedData[] = $status;

            $nestedData[] = $row["status"];

            $nestedData[] = '<button class="btn btn-primary btnView btnView-1 btn-cus" > View</button>  ';
            $data[] = $nestedData;
    }
    $json_data = array(
        "recordsTotal"    => intval( $totalData ),  // total number of records
        "recordsFiltered" => intval( $totalFiltered ), // total number of records after searching, if there is no searching then totalFiltered = totalData
        "data"            => $data,   // total data array
    );

    return $json_data;
}
0 голосов
/ 30 ноября 2018

Единственное использование result_array в показанном вами коде - это строка

foreach( $query->result_array() as $row ) 

Что для меня означает, что ошибка говорит: «Вы пытаетесь использовать логическое значение $query в качествеобъект, который имеет функции-члены. "

Похоже, что этой строке

$query = $this->db->query($sql, $params);

присвоено значение false для $query.Мы знаем, что это false, потому что для оператора "read" query() вернёт либо объект результата базы данных в случае успеха, либо FALSE, если запрос завершится неудачно.(Примечание: «успех» не означает, что есть какие-либо строки, только то, что вещи не взорвались.)

Это просто очень многословный способ сказать, что ваш запрос не работает.

Исходя из ошибок "Неопределенный индекс", я думаю, что вы пытаетесь получить элементы из $requestData, которые не существуют.Похоже, что это те, которые задают предложение ORDER BY;$requestData['order'], $requestData['start'] и $requestData['length'].

Я думаю, вам было бы лучше использовать метод ввода класса post_get() документация (или get_post()) вместо созданиякопия $_REQUEST.Мне не ясно, к каким различным индексам вы пытаетесь получить доступ, поэтому я не могу предложить наглядный пример использования get_post().

Возможно, частью проблемы является попытка построить строку запроса по старинке - объединение строк на основе каскадных условных выражений.Этот вариант использования - именно то, для чего был создан Query Builder .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...