Как автоматически сгенерировать код, используя каркас Codeigniter? пример создания номера участника для членской карты - PullRequest
0 голосов
/ 11 марта 2020

Как сделать автоматически сгенерированный код для номера участника. Я использую Codeigniter Framework. но он показывает некоторую ошибку и все данные об успешном вводе в базу данных, кроме «номера участника», который выделен в ошибке, изображенной ниже

Это мои коды:

//Model
public function customer_insert($table, $data)
{
    $query = $this->db->insert($table, $data);
    return $query;
}
public function customer_getByLastId()
{
    $query = $this->db->query("SELECT customer_id FROM customer where customer_id=last_insert_id()");
    return $query;
}
public function customer_update($id, $table, $data)
{
    $query = $this->db->where('customer_id', $id);
    $query = $this->db->update($table, $data);
    return $query;
}

//Controller
public function add()
{

    $name = strip_tags($this->input->post('i_name'));
    $ktp = strip_tags($this->input->post('i_ktp'));
    $email = strip_tags($this->input->post('i_email'));
    $gender = strip_tags($this->input->post('i_gender'));
    $phone = strip_tags($this->input->post('i_phone'));
    $address = strip_tags($this->input->post('i_address'));

    // Input Array
    $data = array(
        'name'             => $name,
        'ktp'             => $ktp,
        'email'             => $email,
        'gender'             => $gender,
        'phone'             => $phone,
        'address'             => $address
    );

    // Insert ke Database
    $x = $this->customer_model->customer_cek($ktp);

    if ($x == Null) {
        $this->customer_model->customer_insert('customer', $data);

        $id = $this->customer_model->customer_getByLastId();
        $char = "MEM";
        $no_member = $char . sprintf("%09s", $id);

        $data = array(
            'no_member'             => $no_member
        );
        $this->customer_model->customer_update($id, 'customer', $data);

        echo '<script language=JavaScript>alert("Input Berhasil")
            onclick=history.go(-0);</script>';
    } else {
        echo '<script language=JavaScript>alert("Gagal!! customer telah tersimpan sebelumnya karena Nama atau dan No. Hp sama!")
            onclick=history.go(-1);</script>';
    }
}

Ошибка, подобная следующей:

A PHP Произошла ошибка Серьезность: 4096

Сообщение : Объект класса CI_DB_mysqli_result не может быть преобразован в строку

Имя файла: admin / Customer. php

Номер строки: 46

Backtrace:

Файл: C: \ xampp \ htdocs \ tokobuku \ application \ controllers \ admin \ Customer. php Строка: 46 Функция: sprintf

Файл: C: \ xampp \ htdocs \ tokobuku \ index . php Строка: 315 Функция: require_once

A PHP Ошибка обнаружена Серьезность: 4096

Сообщение: объект класса CI_DB_mysqli_result не может быть преобразован в строку

Имя файла: database / DB_query_builder. php

Номер строки: 2442

Backtrace:

Файл: C: \ xampp \ htdocs \ tokobuku \ application \ models \ Customer_model. php Строка: 32 Функция: обновление

Файл: C: \ xampp \ htdocs \ tokobuku \ application \ controllers \ admin \ Customer. * 10 63 * Строка: 51 Функция: customer_update

Файл: C: \ xampp \ htdocs \ tokobuku \ index. php Строка: 315 Функция: require_once

Ошибка базы данных произошла номер ошибки : 1064

В синтаксисе SQL произошла ошибка; проверьте руководство, соответствующее вашей версии сервера MariaDB, чтобы узнать правильный синтаксис для использования рядом с '' в строке 2

ОБНОВЛЕНИЕ customer SET no_member = 'MEM000000000' ГДЕ customer_id

Имя файла: C: / xampp / htdocs / tokobuku / system / database / DB_driver. php

Номер строки: 691

Ответы [ 2 ]

0 голосов
/ 11 марта 2020

Измените эти коды в вашей модели, затем попробуйте

 //Model
public function customer_insert($table, $data){
   return $this->db->insert($table, $data);
}
public function customer_getByLastId(){
    return  $this->db->query("SELECT customer_id FROM customer ORDER BY customer_id DESC LIMIT 1 ")->row()->customer_id;    
}
public function customer_update($id, $table, $data){ 
    $this->db->where('customer_id', $id);
     return $this->db->update($table, $data);    
}
0 голосов
/ 11 марта 2020

По модели кажется, что вы хотите получить последний вставленный идентификатор клиента. Если это так, вы можете использовать его в codeigniter сразу после выполнения запроса вставки клиента:

$insert_id = $this->db->insert_id();

Вы должны использовать транзакции в случае нескольких вставок:

$this->db->trans_start(); $this->db->trans_complete();

...