我使用两个用户定义的函数将csv文件导入数据库。
在了解了" 清洁代码"后,我想出了这个想法,以便让我的队友正确阅读我的代码。显然我的编码方式很糟糕,这成了一种习惯。
我创建了两个用户定义的函数。
1)功能csv_process($toWrite)
&
2)函数action()
第一个功能是处理csv文件(验证文件),第二个功能是将从csv文件中提取的数据插入数据库。
在名为$toWrite[]
的第一个函数中有一个数组,其中提取了csv文件中的数据,我试图将此数组发送到第二个函数,以便将其插入到数据库中。
但是,我这样做有困难。我是PHP的新手也是Codeigniter,所以我对函数的工作原理知之甚少。我希望有人可以帮我解决这个问题,我不确定这是一个大问题还是因为我是新问题。
这是我的控制器以及两个功能:
控制器功能csv_process($toWrite)
$filename = $_FILES["file"]["tmp_name"];
$temp = explode(".", $_FILES["file"]["name"]);
$filesize = $_FILES["file"]["size"];
$allowed_ext = array("csv");
$extension = end($temp);
if (!in_array($extension, $allowed_ext)) {
$this->session->set_flashdata("message", "Sorry, CSV file only.");
}else{
if ($filesize < 0) {
}else{
$file = fopen($filename, "r");
$toWrite = array();
$error = false;
$col_size = 2;
$skip = 0;
while ($data = fgetcsv($file, 10000, ","))
{
$skip++;
if ($skip == 1) {
continue;
}
$numofcol = count($data);
if ($numofcol != $col_size ) {
$this->session->set_flashdata("message", "Column count exceeded or missing.");
}else{
$name1 = $data[0];
$name = str_replace("'", "''", $name1);
$email1 = $data[1];
$email = str_replace("'", "''", $email1);
$toWrite[] = array($name, $email);
}
}#end while
fclose($file);
}
}
Controller action()
$this->csv_process();
foreach ($toWrite as $arr) {
list($name, $email) = $arr;
$query = $this->db->query("SELECT * FROM import WHERE name ='$name' AND email = '$email'");
if ($query->num_rows() >= 1) {
}else{
if ($name == "" OR $email == "") {
}else{
if ((filter_var($email, FILTER_VALIDATE_EMAIL)) == FALSE ) {
}else{
$this->db->query("INSERT INTO import(name, email, created_date) VALUES('".$name."', '".$email."', '".date("Y-m-d h-i-s")."')");
$this->session->set_flashdata('message', 'SUCCESS YEAY');
}
}
}
$query->free_result();
}
redirect('clean_csv/index');
答案 0 :(得分:0)
对于插入导出数据到数据库,最好为数据库中的商店数据创建模型方法的库方法。
Codeigniter控制器方法是用户可以调用路径(控制器/操作/ ...)的操作,因此我认为您必须在控制器中为操作方法创建受保护的功能,或者使用第二种方法更好的模型/库方法。
在模型/库中创建方法只返回插入的数据或true / false,您的控制器必须决定重定向或其他操作。