首页 > 解决方案 > PHP:如何计算 CSV 文件中无效电子邮件的数量

问题描述

我将 VueJS 前端的 csv 文件上传到 cakephp API。在这些 CSV 文件中有需要验证的电子邮件。但之后我的问题出现了,我想计算 CSV 文件中无效的电子邮件数量,然后将此值放入数据库中。

这是我的代码:我用“count()”进行了测试,但这不起作用,因为我认为我做错了。

public function upload()
    {
        // POST ?
        $this->myMethodError(['post']);

        // reading parameters
        $uploadFileName = $this->request->getData('uploadFileName') ? $this->request->getData('uploadFileName') : '';
        $uploadFile = $this->request->getData('uploadFile') ? $this->request->getData('uploadFile') : '';


        // Uploaded with .csv extension ?
        $uploadFileExtension = pathinfo($this->request->data['name'])['extension']; // .csv ?
        if (!(in_array($uploadFileExtension, ['csv']))) {
            $this->myError(['error' => 'Wrong File extension: ' . $uploadFileExtension . '. .csv expected.']);
        }

        //copy the file in a repertory with date
        $destinationFile = TMP . "" . date("YmdHis") . "_annonceur_marque_campagne" . "." . $uploadFileExtension;

        if (move_uploaded_file($uploadFile['tmp_name'], $destinationFile)) {
            //---------------
            // Read .CSV
            //---------------
            if (($handle = fopen($destinationFile, "r")) !== FALSE) {

                //-------------------
                // Reading datas
                //--------------------
                $numrow = 0;

                while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
                    $numrow++;

                    if (count($data) != 13) {
                        $this->myError(['error' => 'Structure de fichier invalide détectée ligne ' . $numrow]);
                        exit;
                    }

                    if ($numrow == 1) {
                        continue;
                    } // on saute les titres des colonnes

                    if($data[4] == "")
                    {
                        $this->myError(['error' => 'Le champs email est obligatoire. ligne ' . $numrow]);
                        exit;
                    }
                }

                //insert in database
                $uploadTable = TableRegistry::get('Locationsets');
                $upload = $uploadTable->newEntity();

                if(!filter_var($data[4], FILTER_VALIDATE_EMAIL) === true){
                    $upload->nbr_errors_email = count(filter_var($data[4], FILTER_VALIDATE_EMAIL));
                }

                $upload->name = $uploadFileName;
                $upload->csv_files_dir = $destinationFile;

                if($uploadTable->save($upload)){
                    $uploadId = $upload->id;
                } else {
                    $this->myError(['error' => 'Insert failed']);
                }


                // return in Json
              $this->myOutput([$data]);

            } else {
                $this->myError(['error' => 'Reading csv file failed']);
            }
        } else {
            $this->myError(['error' => 'Csv file upload failed']);
        }
    }

此代码在数据库中添加 1 但这不是我应该得到的结果。

希望你能帮忙。

编辑 :

内容示例$data

csv中的数据

标签: phpemailcakephpcount

解决方案


推荐阅读