将数据数组发送到控制器内的另一个函数

时间:2018-01-09 07:36:50

标签: php arrays function codeigniter csv

我使用两个用户定义的函数将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');        

1 个答案:

答案 0 :(得分:0)

对于插入导出数据到数据库,最好为数据库中的商店数据创建模型方法的库方法。

Codeigniter控制器方法是用户可以调用路径(控制器/操作/ ...)的操作,因此我认为您必须在控制器中为操作方法创建受保护的功能,或者使用第二种方法更好的模型/库方法。

在模型/库中创建方法只返回插入的数据或true / false,您的控制器必须决定重定向或其他操作。