我正在CodeIgniter中开发一个网站。它有点基本,只是它有一些巨大的表单(150个字段),一些是动态创建/锁定/预定义/删除的等等
我在表单和数据库之间的转换时遇到了问题,当然这非常复杂。我的意思是,表单的提交在一些表中插入了多行,有些数据甚至没有保存。(一些单选按钮等)
我创建了一个非常大的对象,该对象具有尽可能多的以表单输入名称命名的属性,以便使用填充$_POST
数据
foreach ($largeObj as $key=>$value)
{
if (isset($_POST[$key])){
$largeObj[$key]=$value; //mind the data escaping
}
}
当然,这只适用于一半的输入,对于其他输入,我需要做这样的事情:
$largeObj['tanks']=Array();
for ($i=0;$i<$_POST['nbrTanks'];$i++){
$tank=new Tank();
// some if's in order to set some properties
$largeObj['tanks'][]=$tank;
}
然后我做所有的计算,并准备我的DTO,以便在每个表中插入相应的数据。顺便说一句,我使用PHPDAO来映射数据库表,因为它们太大了,无法写入整个CRUD操作。
有更好的方法吗?注释驱动或更有效的方式,因为我还需要用数据库中的数据填充整个表单。欢迎提出任何建议。
如果您有一个输入列表,可以执行以下操作:
##Array of items to be checked with `isset()`
$array_isset = array('field1', 'field2', 'field3');
foreach ($array_isset as $line) {
#.... same thing you did before
}
$array_tank = array('field4', 'field5', 'field6');
foreach ($array_tank as $line) {
$tank = new Tank()
}
如果我理解您的问题,上述方法将允许您根据需要对字段执行的操作对字段进行排序。
话虽如此,我有多个项目需要处理大量信息。我每次都发现,最好的方法是找到一种将原始数据放入数据库的方法,并在以后进行计算。
这也让它变得很容易,因为在CodeIgniter中,你可以这样做:
$array = $this->input->post(NULL, True);
$this->db->insert('table', $array);
如果表单字段与数据库列名匹配。
如果你有一个数据列表,那么你可以将数据存储为逗号分隔的列表,如下所示:
$array = array('value1', 'value2', 'value3');
$insert_string = implode(',', $array);
当你选择它时,它会爆炸。
这在你的情况下可能不起作用,但在某些情况下确实有价值。
祝你的申请好运;我希望我能帮上忙!