IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

importer depuis un fichier excel


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2017
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2017
    Messages : 76
    Par défaut importer depuis un fichier excel
    J'ai 2 table SQL et je veux les remplir par deux fichiers xlsx via PHP.
    J'ai crée une classe pour les getters et les setters et une autre classe pour les requetes INSERT INTO et SELECT, son code est le suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    public function save(\....\Parse\LRU $LRU){
     
            echo '<pre>';
            var_dump($LRU); //// Il retourne rien 
            echo '</pre>';
            die();
            $IdLRU = $LRU->getId();
            if ($LRU == "Unspecified") {
                $IdLRU = 40;
            } 
     
                            else{
                                    if ($LRU != 'new'){
                            $check= $this->_db->query("SELECT `ID_LRU` FROM `lru` WHERE `LRU` ='".$LRU->getLRU()."'");
     
                            if ($check->rowCount() == 0) {
                                $this->_db->query("INSERT INTO `lru` (`ID_LRU`, `LRU`) VALUES ('".$LRU->getId()."' , '".$LRU->getLRU()."');");
                                $requete2 =$this->_db->query("SELECT `ID_LRU` FROM `lru` WHERE `LRU` ='".$LRU->getLRU()."'");
                                while($data = $requete2->fetch())
                                {
                                    $IdLRU=$data['ID_LRU'];
                                }
     
                            echo($this->_db->query);    
                            }   
     
                            else{
                                while($data = $check->fetch())
                                {
                                    $IdLRU=$data['ID_LRU'];
                                }
                            }}}
     
        } 
     
        public function saveAll(array $LRUdao) {
            $count=0;
            foreach ($LRUdao as $value) {
                if($this->save($value))
                $count++;
            }
            return $count; //// et aussi bien sûr retourne 0, 
            echo($count);
        }
    J'ai fait quelques tests pour vérifier si je récupère les données ou non par var_dump. La variable ne retourne aucune chose. Est-elle la structure du fichier pose un problème ? ou la classe des fonctions getters et setters pourtant je l'ai fait comme d'habitude et toujours ça marche très bien.
    S'il vous plait j'ai besoin de vos avis pour résoudre ce problème. Merci

  2. #2
    Membre émérite Avatar de Willy_k
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2011
    Messages
    541
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2011
    Messages : 541
    Par défaut
    Salut,
    Montres tes appels à ta méthode save (qui me semble bizarre car elle fait de la sauvegarde et/ou de la récupération des données) ou saveAll. Et ton code n'est pas très bien indenté.
    Sinon une question $LRU est censé être un objet non ?
    Après ton return le echo ne sera pas exécuté.

  3. #3
    Membre confirmé
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2017
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2017
    Messages : 76
    Par défaut
    Oui le $LRU est un objet.

    En fait, j'ai une classe pour le parsing ( 2 fonctions chacune pour un fichier presque sont similaire) et dans le controlleur je fait les appels à la fonction de parsing et saveAll.

    Voilà le code de parsing:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
     public function parseEquipment($filePath = null) {
            set_time_limit(0);
            $listEquipement = [];
    		$listEquipementLRU = [];
            $count = 0;
            $chunkSize = 1024;
            $objReader = PHPExcel_IOFactory::createReader(PHPExcel_IOFactory::identify($filePath));
            $spreadsheetInfo = $objReader->listWorksheetInfo($filePath);
            $chunkFilter = new \Floose\Parse\ChunkReadFilter();
            $objReader->setReadFilter($chunkFilter);
            $objReader->setReadDataOnly(true);
            $chunkFilter->setRows(0, 1);
            $objPHPExcel = $objReader->load($filePath);
            $totalRows = $spreadsheetInfo[0]['totalRows'];
            for ($startRow = 1; $startRow <= $totalRows; $startRow += $chunkSize) {
                $chunkFilter->setRows($startRow, $chunkSize);
                $objPHPExcel = $objReader->load($filePath);
                $sheetData = $objPHPExcel->getActiveSheet()->toArray(null, null, true, false);
                $startIndex = ($startRow == 1) ? $startRow : $startRow - 1;
    			if($dataToAnalyse[0][0]==NULL){
    				break;
    			}
                if (!empty($sheetData) && $startRow < $totalRows) {
                    $dataToAnalyse = array_slice($sheetData, $startIndex, $chunkSize);
                    for ($i = 0; $i < $chunkSize; $i++) {
                        if ($dataToAnalyse[$i]['0'] != NULL) {
                            $listEquipement[] = new Article($dataToAnalyse[$i]['3'], $dataToAnalyse[$i]['4'], $dataToAnalyse[$i]['2']);
    						$listEquipementLRU[] = new LRU($dataToAnalyse[$i]['2'], $dataToAnalyse[$i]['3']);
                            $count++;
                        }
                    }
                }
                $objPHPExcel->disconnectWorksheets();
                unset($objPHPExcel, $sheetData);
            }	
     
             var_dump(array_slice($sheetData, $startIndex, $chunkSize)); /// il retourne les données
           echo($count); /// ici 0
            return [$listEquipement, $listEquipementLRU];
     
     
        }
    Et le controlleur où je fait les appel de parsing et saveAll:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    $app->get('/admin/update/article', function() use ($app) {
        $parse = new Floose\Parse\Parse();
        $update = new Floose\DAO\ArticleDAO();
    	$updateLRU = new Floose\DAO\LRUDAO();
    	 $filePathEquipement = __DIR__ . "/../../DATA/UpdateFiles/Equipement.xlsx";
        $filePathEquipment = __DIR__ . "/../../DATA/UpdateFiles/equipment.xlsx";
     
     
    	//Parsing files Equipement.xsls and equipment.xsls
        $equipement = $parse->parseEquipement($filePathEquipement);
        $equipment = $parse->parseEquipment($filePathEquipment);
     
    	// save data of File Equipement into article and LRU
        $countEquipement = $update->saveAll($equipement['1']);
    	$countEquipementLRU = $updateLRU->saveAll($equipement['0']);
     
    	// save data of File Equipment into article and LRU
        $countEquipment = $update->saveAll($equipment['1']);	
        $countEquipmentLRU = $updateLRU->saveAll($equipment['0']);
     
        $stat = stat($filePathEquipement);
        $dateImport = date(d . '-' . m . '-' . Y, $stat['mtime']);
        $date = new DateUpdate(null, "Equipement", $dateImport, getdate()['mday'].'-'.getdate()['mon'].'-'.getdate()['year']);
        $dateDAO = new DateUpdateDAO();
        $dateDAO->save($date);
     
        $stat = stat($filePathEquipment);
        $dateImport = date(d . '-' . m . '-' . Y, $stat['mtime']);
        $date = new DateUpdate(null, "equipment", $dateImport, getdate()['mday'].'-'.getdate()['mon'].'-'.getdate()['year']);
        $dateDAO = new DateUpdateDAO();
        $dateDAO->save($date);
     
        $result = '<div class="alert alert-success alert-dismissable">
                        <button type="button" class="close" data-dismiss="alert" aria-hidden="true"></button>
                        <h4>	<i class="icon fa fa-check"></i> "LRU" update finished successfully!</h4> ' . ($countEquipement + $countEquipment + $countEquipementLRU + $countEquipmentLRU) . ' Article(s) has been saved/modified.<br/>
                            ' . $countEquipement . ' --> Equipement.xlsx<br/>
                                ' . $countEquipment . ' --> equipement.xlsx<br/>
    								 ' . $countEquipementLRU . ' --> Equipement.xlsx<br/>
                                        ' . $countEquipmentLRU . ' --> equipement.xlsx
     
                      </div>';

  4. #4
    Membre émérite Avatar de Willy_k
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2011
    Messages
    541
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2011
    Messages : 541
    Par défaut
    Si ton count est à 0 alors tes tableaux $listEquipement et $listeEquipementRU sont bien vides
    Ta variable $dataToAnalyse qui elle est définie que dans le 2ème if , je pense que tu as un soucis là
    - ajoute un echo après l'accolade du if où tu break à l'intérieur (si tu as un affichage ce qui m’entonnerais à cause de $dataToAnalyse qui n'existe pas alors tu "breakeras" toujours),
    A toi d'aller pas à pas, tu trouveras sûrement où ça foire.

    Est-ce que tu développes avec les erreurs activées ?

  5. #5
    Membre confirmé
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2017
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2017
    Messages : 76
    Par défaut
    les tests:

    Pour $totalRows:

    echo($totalRows); ===> il affiche bien le nombre des lignes.

    Pour $dataToAnalyse:

    var_dump(array_slice($sheetData, $startIndex, $chunkSize)); ===> il affiche les données

    Pour $sheetData:

    var_dump($sheetData); ==> il affiche qu'une seule colonne est l'autre NULL

    En fait lorsque je supprime cet if :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if($dataToAnalyse[0][0]==NULL){
    				break;
    			}
    Je vois pas aucun affichage de mes message c'est à dire après cette suppression.

  6. #6
    Membre émérite Avatar de Willy_k
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2011
    Messages
    541
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2011
    Messages : 541
    Par défaut
    Juste après $dataToAnalyse = array_slice($sheetData, $startIndex, $chunkSize);, si tu mets un echo 'test'; est-ce que tu as un résultat ?
    Parce que si ça var_dump(array_slice($sheetData, $startIndex, $chunkSize)); s'affiche, je suppose que ça le fait en dehors de ta boucle for non ?

Discussions similaires

  1. [MySQL-5.6] [Noob] Insert Data from file
    Par YlsNovak dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 22/02/2016, 18h23
  2. Import data into MongoDB - Bug with tMongoDBOutput, tExtractJSONFields
    Par minh-hieu.pham dans le forum Développement de jobs
    Réponses: 0
    Dernier message: 08/05/2015, 02h35
  3. [AC-2007] ( DoCmd.TransferText ) Export Data from Access to Text File
    Par DevMedi dans le forum VBA Access
    Réponses: 5
    Dernier message: 01/07/2010, 16h52
  4. import / copy folder from file system
    Par chichone dans le forum Eclipse Java
    Réponses: 0
    Dernier message: 13/06/2008, 16h10
  5. [SQL-SERVER]Importing data from external sources
    Par poosh dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 20/04/2006, 13h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo