how to validate lines from a csv file not to go empty to the database

Asked

Viewed 104 times

0

<?php
require_once('csv.php');
require_once('db.php');

class Main {

    public function process($dados){
        $delimitador = ';';
        $cerca = '"';

        $csv = new CSV ();
        $file=$csv->openCSV($dados);

        $db = new DB;

        while (!feof($file)) {         

            // Ler uma linha do arquivo
            $linha = fgetcsv($file, 0, $delimitador, $cerca);
            
            
            if($linha[0]==null || $linha[1]==null || $linha[2]==null || $linha[3]==null || $linha[4]==null){
                
                echo "faltando colunas"; die;
            } //aqui estou tentando mas esta errado eu acho 


            if (!$linha) {
                continue;
            }

            
            $db->insert($linha);
        

        }  
        //$db->delete($linha);
        

    }


}

?>

2 answers

0


You can try this way:

<?php

require_once('csv.php');
require_once('db.php');

class Main {

    public function process($dados){
        $delimitador = ';';
        $cerca = '"';

        $csv = new CSV ();
        $file=$csv->openCSV($dados);
        $db = new DB;

        while (!feof($file)) {         
            // Ler uma linha do arquivo
            $linha = fgetcsv($file, 0, $delimitador, $cerca);

            // Verifica se tem todas as colunas
            if(count($linha) < 5 ){
                // Gera um log ou lança uma exception
                echo "faltando colunas"; die;
            }

            // Verifica se todas as colunas foram informadas
            foreach ($linha as $value) {
                if ($value == null) {
                    // Gera um log ou lança uma exception
                    echo "colunas vazias"; die;
                }
            }

            if (!$linha) {
                continue;
            }

            $db->insert($linha);       
        }  
        //$db->delete($linha);     
    }
}

-1

This function skips the blank lines

if(($handle = fopen('csv/'.$_FILES['upl']['name'], "r")) !== FALSE) {
                $csvKey = 0;
                while (($data = fgetcsv($handle, 1000, ";")) !== FALSE) {
                    // testa se a linha esta em branco ****************************
                    $c = count($data);
                    $empty = true;
                    for ($x = 0; $x < $c; $x++) {
                        $empty = $empty && (empty($data[$x]));
                        if ($specialChars === TRUE) {
                            $arrayCSV[$csvKey][$x] = htmlspecialchars($data[$x]);
                        } else {
                            $arrayCSV[$csvKey][$x] = $data[$x];
                        }
                    }
                    if ($empty) {
                        unset($arrayCSV[$csvKey]);
                        break;
                    }
                    $csvKey++;
   }

Browser other questions tagged

You are not signed in. Login or sign up in order to post.