Вставить несколько массивов значений, отличающихся в новой строке базы данных - PullRequest
0 голосов
/ 21 сентября 2011

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

Я не хочу вставлять все значения в строке из базы данных с использованием serialize (json_encodeили т. д.).

Например: (в этом примере я хочу трижды вставить данные (значение), потому что у меня 3 значения разные) Обновление 4:

это мое значение:

<input name="name[0][]" value="11">
<input name="passport_number[0][]" value="11">


<input name="name[1][]" value="22">
<input name="passport_number[1][]" value="22">

я делаю это, но это не сработало:

$name_input = $this->input->post('name');
$passport_number_input        = $this->input->post('passport_number');
//$term_passport_input = $this->input->post('term_passport');
//$date_of_birth_input       = $this->input->post('date_of_birth');
//$age_input        = $this->input->post('age');
//$national_number_input = $this->input->post('national_number');
//$mobile_input       = $this->input->post('mobile');
//$address_input        = $this->input->post('address');

$data = array();
foreach ($name_input as $idx => $name) {
    $data[] = array(
        'name' => $name_input[0]
        'passport_number' => $passport_number_input[0],
        //'term_passport' => $term_passport_input[$idx],
        //'date_of_birth' => $date_of_birth_input[$idx],
        //'age' => $age_input[$idx],
        //'national_number' => $national_number_input[$idx],
        //'mobile' => $mobile_input[$idx],
        //'address' => $address_input[$idx],
    );
};
var_dump($name_input);
$this->db->insert_batch('customer_info', $data);

Это вывод '$ name_input' с var_dump:

array(2) {
    [0] = > array(1) {
        [0] = > string(2)"11"
    }[1] = > array(1) {
        [0] = > string(2)"22"
    }
}

Я получаю эту ошибку:

Обнаружена ошибка PHP
Серьезность: Предупреждение
Сообщение: невозможно изменить информацию заголовка - заголовки уже отправлены (вывод запущенв D: \ xampp \ htdocs \ application \ controllers \ admin \ tour_foreign.php: 405)
Имя файла: core / Common.php
Номер строки: 413

Произошла ошибка базы данных
Номер ошибки: 1054
Неизвестный столбец '0' в 'списке полей'
INSERT INTO customer_info (0) VALUES ('22')
Имя файла: D: \xampp \ htdocs \ system \ database \ DB_driver.php
Номер строки: 330

1 Ответ

0 голосов
/ 21 сентября 2011

Обновление 3: по обновленному вопросу (обновление 4)
При работе с var_dump из $name_input должен работать следующий код:

$name_input = $this->input->post('name');
$passport_number_input = $this->input->post('passport_number');

$data = array();
foreach ($name_input as $idx => $name) {
    $data[] = array(
        'name' => $name_input[$idx][0],
        'passport_number' => $passport_number_input[$idx][0]
    );
};
$this->db->insert_batch('customer_info', $data);

Это необходимо ещечтобы получить доступ к элементу [0], поскольку вход POST передается как array of arrays

Обновление 2: Проблема заключается в том, что POST возвращает данные в виде дополнительного массива, следующего кода MIGHTРабота.Мне потребуется var_dump входов POST ($hi_input ..), чтобы дать точный код.

$hi_input    = $this->input->post('hi');
$hello_input = $this->input->post('hello');
$how_input   = $this->input->post('how');

$data = array();
foreach ($hi_input as $idx => $name) {
    $data[] = array(
        'hi' => $hi_input[$idx][0],
        'hello' => $hello_input[$idx][0],
        'how' => $how_input[$idx][0]
    );
};
$this->db->insert_batch('table', $data);

Следующий код должен работать так, как я его тестировал (у меня не установлен CodeIgniter).Он не использует CodeIgniter для получения данных постов.

$hi_input    = $_POST['hi'];
$hello_input = $_POST['hello'];
$how_input   = $_POST['how'];

$data = array();
foreach ($hi_input as $idx => $name) {
    $data[] = array(
        'hi' => $hi_input[$idx][0],
        'hello' => $hello_input[$idx][0],
        'how' => $how_input[$idx][0]
    );
}; 
$this->db->insert_batch('table', $data);

Обновление:
Вы также можете сделать это, используя $this->db->insert_batch();, например:

$hi_input    = $this->input->post('hi');
$hello_input = $this->input->post('hello');
$how_input   = $this->input->post('how');

$data = array();
foreach ($hi_input as $idx => $name) {
    $data[] = array(
        'hi' => $hi_input[$idx],
        'hello' => $hello_input[$idx],
        'how' => $how_input[$idx]
    );
};
$this->db->insert_batch('table', $data);

Старый ответ
В документации CodeIgniter по вставке - http://codeigniter.com/user_guide/database/active_record.html#insert
указано, что параметр $ data представляет собой ассоциативный массив с именами столбцов в качестве ключей и данными для вставки в качестве значений.

Так что вам нужно вызывать его один раз для каждой строки.Таким образом
Попробуйте это:

$hi_input    = $this->input->post('hi');
$hello_input = $this->input->post('hello');
$how_input   = $this->input->post('how');

foreach ($hi_input as $idx => $name) {
    $data = array(
        'hi' => $hi_input[$idx],
        'hello' => $hello_input[$idx],
        'how' => $how_input[$idx]
    );
    $this->db->insert('table', $data);
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...