【问题标题】:CodeIgniter - Writing input array to databaseCodeIgniter - 将输入数组写入数据库
【发布时间】:2012-10-17 21:58:00
【问题描述】:

我正在尝试从一组输入字段中获取数据并将它们写入数据库。我以前从未使用过数组,但这是我拥有的代码。它基于如果它只是一个输入值我会做什么。我知道这是错误的,但我不知道下一步该尝试什么。有任何想法吗?谢谢。

//view
<input type="text" name="assignments[]">
<input type="text" name="hours[]">

<input type="text" name="assignments[]">
<input type="text" name="hours[]">

<input type="text" name="assignments[]">
<input type="text" name="hours[]">

<input type="text" name="assignments[]">
<input type="text" name="hours[]">

<input type="text" name="assignments[]">
<input type="text" name="hours[]">

//controller
$assignments = $this->input->post('assignments', TRUE);
$hours = $this->input->post('hours', TRUE);

$this->load->model('create', 'create_model');
$this->create_model->create_projects($assignments, $hours);

//model
public function create_projects($assignments, $hours) {

    $data = array(
        'assignments' => $assignments,
        'hours' => $hours,
        );
    $this->db->insert('projects', $data);
}

【问题讨论】:

  • 这取决于您希望数据在数据库中的表示方式。例如,您不能将数组存储在文本字段中,除非您对其进行序列化(我怀疑这是您现在所做的)。

标签: database arrays codeigniter


【解决方案1】:

当然你不能把 PHP 数组按原样放在数据库中:

$data = array(
    'assignments' => $assignments, // this is an array
    'hours'       => $hours,       // so is this
);
$this->db->insert('projects', $data);

你需要一个数组的字符串表示,我想到了两个选项:

我个人更喜欢 json_encode,因为它不依赖于 PHP 进行读取,序列化对于存储 PHP 对象很有用,但在这里你不需要:

$data = array(
    'assignments' => json_encode($assignments),
    'hours'       => json_encode($hours),
);
$this->db->insert('projects', $data);

确保您的数据库字段为TEXT 类型,以便它们能够存储可变长度数据。稍后获取数据时,您必须在每个字段上运行json_decode() 才能读取它并将其转回数组,例如:

$result = $this->db->get('projects')->result();
foreach ($result as $record)
{
    $assignments = json_decode($record->assignments);
    // Now $assignments is an array
}

【讨论】:

  • 这很好,但我认为我正在寻找的结果是将每个 assignment[]hour[] 在表中的自己的行中。不是整个 assignment[] 数组存储在同一个表 cel 中。我一直在玩insert_batch,但没有成功。
  • 是的,我认为这将是一个更好的解决方案,但不确定您是否想走那条路。也许只是在循环中运行 INSERT 查询以检查它是否有效,然后在你弄清楚之后返回insert_batch
【解决方案2】:

感谢答案。最终对我最有效的是这个。

//controller
$assignments = $this->input->post('assignments');
$hours = $this->input->post('hours');

$this->load->model('create', 'create_model');

foreach($assignments as $key => $n){
    $this->create_model->create_projects($n, $hours[$key]);
}

【讨论】:

    【解决方案3】:

    只需使用json_encode()函数将数组数据存入数据库

    json_encode(array('key' => 'value'))
    

    json_encode($_P0ST['ARRAY'])
    

    或在 CodeIgniter 中

    json_encode($this->input->post('arraydata'));
    

    【讨论】:

      【解决方案4】:

      在帖子中:- $skills = $this->input->post('skills[]',TRUE);

      'skills' => json_encode($skills) ,

      它解决了我的问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-03-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-05-04
        • 2021-11-23
        相关资源
        最近更新 更多