我有以下代码,
这是我处理文本字段输入类型的地方,其中我输入配方的成分。 一个人应该如何输入成分的正确格式是这样的。
5毫升牛奶,4毫升水,2片胡萝卜
之间总是有分隔符,因为我有不同的数量,计量单位和名称列。
我对分离没有任何问题。我有另一张桌子。这是命名成分。 这就是我在不同的成分,如牛奶,并把他们所属的食物组和他们的营养信息(它发出的,如钙)。
无论如何,我得到一个数据库错误,不知何故,当我尝试在所有处理后插入时,类型和营养都是null。我已经考虑过了,也许我的查询错了?但它没有发出任何警告或通知。虽然它只是给了我注意/警告,当我试图在数组$ comp声明它们时,两个值都是未定义的,这是要插入的值。
我收到此错误,
错误号码:1048
列'营养'不能为空
INSERT INTO
component
(componentname
,quantity
,unit
,nutrition
,type
)VALUES('milk','5','ml',NULL,NULL)文件名:C:\ www \ KG \ system \ database \ DB_driver.php
行号:330
代码:
function insertrecipe()
{
$ingredients = $this->input->post('ingredients');
$recipename = $this->input->post('recipename');
$recipe = array(
'recipename' => $recipename,
'description' => $this->input->post('description'),
'instruction' => $this->input->post('instructions'),
'serving' => $this->input->post('serving'),
);
$this->db->insert('recipe', $recipe);
$this->ingredient($ingredients,$recipename);
}
function ingredient($ingredients,$recipename)
{
$ids = array();
$first_slice = explode(',',$ingredients);
$secondslice = $this->second_slice($first_slice);
foreach($secondslice as $qty => $iname)
{
$arr = explode('-',$qty);
$third_slice[$arr[1]] = $arr[0];
$sql = $this->db
->select('nutrition,group')
->where('ingname', $iname)
->from('ingredients')
->get()
->result_array();
$result = $this->db->query($sql);
foreach($result->result_array() as $row)
{
$ingredient_type = $this->get_ingredient_type($row['group']);
}
foreach($third_slice as $measure => $num)
{
$comp = array(
'componentname' => $iname,
'quantity' => $num,
'unit' => $measure,
'nutrition' => $nutri,
'type' => $ingredient_type
);
if($insert2 = $this->db->insert('component',$comp))
{
$latest_id = $this->db->insert_id();
$ids[] = $latest_id;
}
}
}
}
function second_slice($data)
{
foreach($data as $key => $value)
{
$ingredient = explode(' ', trim($value));
$second_slice[$ingredient[0]] = $ingredient[1];
}
return $second_slice;
}
function get_ingredient_type($data)
{
//foreach($data->result_array() as $row)
//{
if($data['group'] == "vegetable")
{
$type = 1;
}
else if($data['group'] == "fruit")
{
$type = 2;
}
else if($data['group'] == "dairy")
{
$type = 3;
}
else if($data['group'] == "seafood")
{
$type = 4;
}
else
{
$type = 5;
}
//}
return $type;
}
组件的数据库表包含以下列。
componentid componentname quantity unit nutrition type
营养是varchar单位是int。我猜他们不是null或cols,不接受空值。
我将不同的foreach循环分成了函数。我原本以为错误是因为我在该函数中仅有3-5个循环。所以我决定把它们分成几个函数。