0

我想将帖子数据存储到数据库中,并且我有动态生成的字段course[]start_date[],我编写以下代码来检索和存储帖子数据:

但在执行以下操作后,所有字段中仅存储“0”零。

if($this->input->post('course'))
{

    $education_data= array();
    for($i=0; $i<count($_POST['course']); $i++)
    {
        $education = array(
                'course'       => $this->input->post('course' . $i),
                'start_date'   => $this->input->post('start_date' . $i),
                'end_date'     => $this->input->post('end_date' . $i),
                'college_name' => $this->input->post('college_name' . $i),
                'other_info'   => $this->input->post('other_info' . $i),
        );

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

所以我尝试了第二种方法:

if($this->input->post('course'))
{    

    $courses = $this->input->post("course");
    $startdates = $this->input->post("start_date");
    $end_date = $this->input->post("end_date");
    $college_name = $this->input->post("college_name");
    $other_infos   = $this->input->post("other_info");

    $education_data= array();
    for($i=0; $i<count($_POST['course']); $i++)
    {

        $education = array(
                 'course'       => $courses[$i],
                 'start_date'   => $startdates[$i],
                 'end_date'     => $end_date[$i],
                 'college_name' => $college_name[$i],
                 'other_info'   => $other_infos[$i],    //line number 101
        );

        // Insert Education data in 'education' table
        $this->db->insert('education',$education);
    }
}

但是在这种情况下,只有一次迭代正在运行,而在第二次迭代中,它在循环的第二次迭代中给出了一些错误。

第二次迭代中的错误:

Severity: Notice

Message: Undefined offset: 1

Filename: models/resume_model.php

Line Number: 101


A Database Error Occurred

Error Number: 1048

Column 'other_info' cannot be null

INSERT INTO `education` (`course`, `start_date`, `end_date`, `college_name`, `other_info`) VALUES ('', '', '', '', NULL)

Filename: C:\wamp\www\resume\system\database\DB_driver.php

Line Number: 330

如果有人知道,请提出解决方案。

var_dump 输出:

 [course] => Array
        (
            [0] => course1
            [1] => course2
        )

    [start_date] => Array
        (
            [0] => from1
            [1] => from2
        )

    [end_date] => Array
        (
            [0] => to1
            [1] => to2
        )

    [college_name] => Array
        (
            [0] => univ1
            [1] => univ2
        )

    [other_info] => Array
        (
            [0] => other1
        )
4

2 回答 2

1

var_dump 的更新

从 var_dump 您可以看到 other_info 不会有 a'other_info' => $other_infos[1]因为数组中只有一项。如果您希望您的秒代码正常工作,您可以向 other_info 添加另一个索引。

@JoseVega 的更新我已经更新了上面的问题,但出现了错误

您的错误是指出为 other_info 传递的值为空,从错误中我假设您的表架构不支持 other_info 列的空值。您可以更改架构以允许空值,也可以在其为空时传递一个值。

试试下面的,看看你的结果。我假设并非所有数组都具有相同的大小,这就是您的第二次迭代失败的原因。

    for($i=0; $i<count($courses); $i++) {

         $education = array(
                    'course'       => isset($courses[$i]) ? $courses[$i] : "",
                    'start_date'   => isset($startdates[$i]) ? $startdates[$i] : "",
                    'end_date'     => isset($end_date[$i]) ? $end_date[$i] : "",
                    'college_name' => isset($college_name[$i]) ? $college_name[$i] : "",
                    'other_info'   => isset($other_infos[$i]) ? $other_infos[$i] : "",
                    );

         // Insert Education data in 'education' table
         $this->db->insert('education',$education);
    }
于 2012-08-03T15:01:33.630 回答
1

$_POST['course'] <-- 包含一个数组,如您所说。

所以如果你想 print_r($POST); 你会看到类似的东西:

array(2) {
  ["course"]=>
  array(3) {
    [0]=>
    string(5) "17740"
    [1]=>
    string(5) "18422"
    [2]=>
    string(5) "14170"
  }
  ["startdate"]=>
  array(3) {
    [0]=>
    string(10) "2012-01-02"
    [1]=>
    string(10) "2012-01-02"
    [2]=>
    string(10) "2012-01-02"
  }

但是在您的第一个代码示例中,您使用:

$this->input->post('课程' . $i),

哪个不存在(course12345 不存在)。

在您的第二个代码示例中,您做得对:

$courses = $this->input->post("course");

现在 $courses 保存了数组,您似乎可以在随意检查时在循环中使用它(也许我错过了一些东西)。

我怀疑你最好从一个简单的开始调试

echo "<pre>";
print_r($_POST);
echo "</pre>";

并确保你收到了你期望收到的东西。我怀疑您不会发布您认为发布的所有内容。

确保所有使用的数组中的元素与课程数组中的元素一样多。

如果没有看到 $_POST 的实际内容,很难给出更多建议。

于 2012-08-03T15:05:12.277 回答