2016-11-08 2 views
0

Я пытаюсь вставить данные в таблицу в for цикле:Установка количества строк и ввода пост использования

public function insertprolist() 
{  
    for ($i = 1; $i < $this->input->post('numrows'); $i = $i + 1) 
    { 
     $data = array(
      'productname' => $this->input->post('proname'+$i), 
      'quantity' => $this->input->post('quantity'+$i), 
      'price' => $this->input->post('price'+$i), 
      'amount' => $this->input->post('amount'+$i) 
     ); 
     return $this->db->insert('purchaseprolist', $data); 
    } 
} 

Я получаю сообщение об ошибке.

Он не встает в таблицу базы данных.

Я приложил новые строки с полями вводом с именами, такими как proname1, quantity1 и для второй строки входного атрибут имени будет генерироваться, как proname2, quantity2 и идет дальше.

Я получаю количество строк в другом вводе с именем numrows.

Теперь я хочу получить доступ к этим входам в модальном файле.

+0

, пожалуйста, помогите мне с этим :) – Ramya

+2

В чем проблема? ошибка? – Blinkydamo

+0

он не вставлен в таблицу базы данных – Ramya

ответ

2
for ($i = 1; $i < $this->input->post('numrows'); $i++) 
{ 
    $data = array(
       'productname' => $this->input->post('proname' . $i), 
       'quantity' => $this->input->post('quantity' . $i), 
       'price'  => $this->input->post('price' . $i), 
       'amount'  => $this->input->post('amount' . $i) 
       ); 

    $this->db->insert('purchaseprolist', $data); 
} 

Это, скорее всего, работать, однако он делает вставки для каждой строки, вы бы лучше иметь взгляд на построение массива значений и использование insert_batch() делать что все это сразу.


Лучший вариант:

for ($i = 1; $i < $this->input->post('numrows'); $i++) 
{ 
    $data[] = array(
       'productname' => $this->input->post('proname' . $i), 
       'quantity' => $this->input->post('quantity' . $i), 
       'price'  => $this->input->post('price' . $i), 
       'amount'  => $this->input->post('amount' . $i) 
       ); 
} 
$this->db->insert_batch('purchaseprolist', $data); 

Это позволит выполнить один запрос вставки базы данных вместо того, чтобы цикл количества строк и выполнение вставки для каждой строки. Те же данные будут представлены в базу данных только более эффективно.

+0

спасибо, что он сработал :) Я никогда не использовал вставку, теперь это было для меня обучение :) – Ramya

+1

Рад, что вы отсортировали. – Blinkydamo

+0

yah, это один из примеров ... :) мой голос за u. – devpro

0

Может быть, вы должны использовать Установите свои "+" = "." PHP поймет, что это совпадение.

for ($i = 1; $i < $this->input->post('numrows'); $i = $i + 1) 
{ 
    $data = array(
    'productname' => $this->input->post('proname'.$i), 
    'quantity' => $this->input->post('quantity'.$i), 
    'price' => $this->input->post('price'.$i), 
    'amount' => $this->input->post('amount'.$i) 
); 
    return $this->db->insert('purchaseprolist', $data); 
} 

Потому что ваш вопрос непонятен, поэтому я могу только объяснить это вам именно так.

+0

этого не происходит :( – Ramya

+0

ya моя конкатенация неверна:) спасибо, я изменил его, но также мне пришлось изменить свой запрос, чтобы вставить пакет :) спасибо :) – Ramya

-1

В PHP, вы не можете использовать знак + для конкатенации, вы должны использовать точка здесь (.):

$data = array(
     'productname' => $this->input->post('proname'.$i), 
     'quantity' => $this->input->post('quantity'.$i), 
     'price' => $this->input->post('price'.$i), 
     'amount' => $this->input->post('amount'.$i) 
     ); 

Второй, вы используете возвращение, это остановит вашу функцию после ист итерации, вы не можете использовать его внутри цикла for.

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

print_r($_POST); // before for loop start. 

Четвертый, вместо выполнения нескольких запросов, я предлагаю вам использовать batch_insert(), это поможет вам: http://www.codeigniter.com/userguide3/database/query_builder.html

+0

спасибо, я попробую и посмотрю :) – Ramya

+0

@Ramya: третья часть очень важна для отладки, по крайней мере, проверьте, что вы получаете от вашей формы – devpro

+0

моя конкатенация была неправильной :), а также когда я использовал вставку, она работала спасибо :) – Ramya

0

Может быть, проблема в том, вы пытаетесь return в forloop.Поэтому попробуйте удалить его, как показано ниже:

public function insertprolist() 
{  
    for ($i = 1; $i < $this->input->post('numrows'); $i = $i + 1) 
    { 
     $data = array(
      'productname' => $this->input->post('proname'+$i), 
      'quantity' => $this->input->post('quantity'+$i), 
      'price' => $this->input->post('price'+$i), 
      'amount' => $this->input->post('amount'+$i) 
     ); 
     $this->db->insert('purchaseprolist', $data); 
    } 
} 
+0

Номер ошибки: 1048 Столбец 'productname' не может быть 0: INSERT INTO 'buyprolist' (' productname', 'количество',' price', 'amount') VALUES (NULL, NULL, NULL, NULL) Имя файла: E:/wamp/www/CodeIgniter/system/database/DB_driver.php Номер строки: 691 – Ramya

+0

это ошибка, я получаю – Ramya

+0

, тогда попробуйте это ''productname' => $ this-> input-> post ('proname'. $ i), 'проблема заключается в том, что вы не получаете данные сообщения – mapmalith

Смежные вопросы