插入行数和输入帖子使用情况

时间:2016-11-08 07:47:06

标签: php sql codeigniter

我正在尝试将数据插入到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);   
    }
}

我收到了错误。

它没有插入数据库表。

我添加了包含proname1quantity1等名称的输入字段的新行,而第二行的输入名称属性将生成为proname2quantity2它继续。

我正在检索另一个名为numrows的输入中的行数。

现在我想在模态文件中访问这些输入。

4 个答案:

答案 0 :(得分: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 );

这将执行单个数据库插入查询,而不是循环行数并执行每行插入。相同的数据将更有效地提交给数据库。

答案 1 :(得分: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);
}

因为你的问题不明确,所以我只能这样向你解释。

答案 2 :(得分:0)

也许问题是你在forloop中尝试return。因此,请尝试将其删除,如下所示

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);
    }
}

答案 3 :(得分:-1)

在PHP中,你不能使用+符号进行连接,你需要在这里使用(。)dot:

$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,这将在ist迭代后停止您的函数,您无法在for循环内使用它。

第三次 ,在插入之前,请尝试检查您的帖子值,这样可以帮助您了解您在尝试的内容。 < / p>

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

第四 ,而不是多次执行查询,我建议您使用batch_insert(),这会对您有所帮助:http://www.codeigniter.com/userguide3/database/query_builder.html < / em>的