Partage
  • Partager sur Facebook
  • Partager sur Twitter

Intégration de données de fichier txt dans une Bdd

Sujet résolu
    10 mai 2019 à 15:13:33

    Bonjour tout le monde ! j'ai un petit souci au niveau de mon code source, en fait ce que j'essaie de faire c'est de lire les informations d'un fichier txt ou autres et récupérer les infos séparé par une "," de chaque lignes dans un tableau et ensuite les insérer avec une requête préparer dans la bdd, de la table clible mais seulement je rencontre ce problème " [23502] : SQLSTATE[23502]: not null violation: 7 ERROR: null value in column "lie_region" violates not-null contraint DETAIL: Failing row contains (309, nul, nul, nul, nul)." . Ça dit qu'au niveau de la colonne lie _region la valeur est nulle, or je ne comprends pas car quand je fais un var_dump($files) j'ai bien du contenu. Je vous ai mis les screens en pièce jointe, merci par avance de vos réponses.

    try{
    			$fileName = $_FILES['fichier']['name'];
    			$files = file('../save_Data/'.$fileName);
    			$data_array = array();
    			//var_dump($files);
    
    			foreach($files as $line)
    			{
    				$array_line = explode(",", $line);
    				var_dump($array_line);
    				if (count($array_line) >= 2) 
    				{
    					$data_array[$array_line[0]] = $array_line[1];
    
    					//strcmp(array_line[0],'Ile de France')
    					if (!empty($data_array) ) {
    						echo "Entré dans la condition";
    						$req = 'INSERT INTO public.lieu (lie_region, lie_adresse, lie_ville, lie_code_postal) VALUES(:lie_region, :lie_adresse, :lie_ville, :lie_code_postal)';
    						$stm=$this->db->prepare($req);
    						$stm->bindParam(':lie_region', $data_array['lie_region'], PDO::PARAM_STR);
    						$stm->bindParam(':lie_adresse', $data_array['lie_adresse'], PDO::PARAM_STR);
    						$stm->bindParam(':lie_ville', $data_array['lie_ville'], PDO::PARAM_STR);
    						$stm->bindParam(':lie_code_postal', $data_array['lie_code_postal'], PDO::PARAM_STR);
    						$stm->execute();
    
    						$data_array = array();
    					}
    					else
    					{
    						echo "La requête ne s'est pas executé !!!";
    					}
    				}
    			}
    		}
    		catch(PDOException $e)
    		{
    			die('<p>Erreur lors de l\'insertion à la base de données : Erreur [' .$e->getCode(). '] :' . $e->getMessage() .'</p>' );
    		}



    -
    Edité par Drmerys 10 mai 2019 à 15:19:48

    • Partager sur Facebook
    • Partager sur Twitter
    Yokor
      10 mai 2019 à 15:18:25

      Bonjour,

      Tu n'as pas besoin de recréer un tableau tu peux boucler directement sur $files.

      Mais surtout quelle dommage d'utiliser la requête préparée de la sorte !

      Il faut la sortir de la boucle, ainsi que les bindParam, et ne boucler que sur les valeurs et l'execute.

      -
      Edité par philodick 10 mai 2019 à 15:24:38

      • Partager sur Facebook
      • Partager sur Twitter
        10 mai 2019 à 16:06:19


        philodick a écrit:

        Bonjour,

        Tu n'as pas besoin de recréer un tableau tu peux boucler directement sur $files.

        Mais surtout quelle dommage d'utiliser la requête préparée de la sorte !

        Il faut la sortir de la boucle, ainsi que les bindParam, et ne boucler que sur les valeurs et l'execute.

        -
        Edité par philodick il y a 7 minutes

        Je retire donc tout le bloque de la requête de la boucle foreach et j'ai enlevé aussi le tableau mais par contre comment je boucle sur $files et les valeurs directement ?

        try{
        	$fileName = $_FILES['fichier']['name'];
        	$files = file('../save_Data/'.$fileName);
        	//var_dump($files);
        
        	foreach($files as $line)
        	{
        		$array_line = explode(",", $line);
        		var_dump($array_line);
        	}
        
        	//strcmp(array_line[0],'Ile de France')
        	if (!empty($data_array) ) {
        		echo "Entré dans la condition";
        		$req = 'INSERT INTO public.lieu (lie_region, lie_adresse, lie_ville, lie_code_postal) VALUES(:lie_region, :lie_adresse, :lie_ville, :lie_code_postal)';
        				$stm=$this->db->prepare($req);
        				$stm->bindParam(':lie_region', $data_array['lie_region'], PDO::PARAM_STR);
        				$stm->bindParam(':lie_adresse', $data_array['lie_adresse'], PDO::PARAM_STR);
        				$stm->bindParam(':lie_ville', $data_array['lie_ville'], PDO::PARAM_STR);
        				$stm->bindParam(':lie_code_postal', $data_array['lie_code_postal'], PDO::PARAM_STR);
        				$stm->execute();
        
        				$data_array = array();
        			}
        			else
        			{
        				echo "La requête ne s'est pas executé !!!";
        			}
        		}
        		catch(PDOException $e)
        		{
        			die('<p>Erreur lors de l\'insertion à la base de données : Erreur [' .$e->getCode(). '] :' . $e->getMessage() .'</p>' );
        		}



        • Partager sur Facebook
        • Partager sur Twitter
        Yokor
          10 mai 2019 à 16:22:09

          Je ferais quelque chose dans le genre :

          <?php
          $fileName = $_FILES['fichier']['name'];
              $files = file('../save_Data/'.$fileName);
              //var_dump($files);
           
                          $req = 'INSERT INTO public.lieu (lie_region, lie_adresse, lie_ville, lie_code_postal) VALUES(:lie_region, :lie_adresse, :lie_ville, :lie_code_postal)';
                          $stm=$this->db->prepare($req);
                          $stm->bindParam(':lie_region', $region, PDO::PARAM_STR);
                          $stm->bindParam(':lie_adresse', $adresse, PDO::PARAM_STR);
                          $stm->bindParam(':lie_ville', $ville, PDO::PARAM_STR);
                          $stm->bindParam(':lie_code_postal', $code_postal, PDO::PARAM_STR);
           
              foreach($files as $line)
              {
                  $array_line = explode(",", $line);
          		$region = $array_line[0];
          		$adresse = $array_line[1];
          		$ville = $array_line[2];
          		$code_postal = $array_line[3];
          		$stm->execute();
              }
          



          • Partager sur Facebook
          • Partager sur Twitter
            10 mai 2019 à 16:27:45

            Hello !

            Ce travail se fait presque tout seul en utilisant la fonction fgetcsv

            Cordialement.

            • Partager sur Facebook
            • Partager sur Twitter
              10 mai 2019 à 16:30:47

              Je viens de tester ça et il y a une nouvelle érreur : Erreur lors de l'insertion à la base de données : Erreur [22021] :SQLSTATE[22021]: Character not in repertoire: 7 ERROR: invalid byte sequence for encoding "UTF8": 0xe9 0x65 0x20.

              Est-ce qu'il faut modifer les caractères avec accents dans le fichier directement ?je souhaite les intégrer telle qu'il sont dans t la bdd,

              y aurait il un moyen d'encoder le contenu du fichier ?

              • Partager sur Facebook
              • Partager sur Twitter
              Yokor
                10 mai 2019 à 17:09:12

                C'est du CP1252, pas de l'UTF-8.

                Plusieurs solutions :

                • soit tu réencodes le fichier ou ce que tu en lis au fur et à mesure (iconv)
                • soit tu passes ta connexion MySQL en latin1 (mais uniquement pour réaliser cet import)

                -
                Edité par julp 12 mai 2019 à 11:39:59

                • Partager sur Facebook
                • Partager sur Twitter
                  12 mai 2019 à 10:55:03

                  Domi65 a écrit:

                  Hello !

                  Ce travail se fait presque tout seul en utilisant la fonction fgetcsv

                  Cordialement.


                  Oui c'est super, plus tard j'aurais a l'utiliser pour mes fichiers csv :)
                  • Partager sur Facebook
                  • Partager sur Twitter
                  Yokor
                    12 mai 2019 à 14:08:52

                    Drmerys a écrit:

                    Domi65 a écrit:

                    Hello !

                    Ce travail se fait presque tout seul en utilisant la fonction fgetcsv

                    Cordialement.


                    Oui c'est super, plus tard j'aurais a l'utiliser pour mes fichiers csv :)

                    Cela va en effet t'économiser l'explode.

                    • Partager sur Facebook
                    • Partager sur Twitter
                      13 mai 2019 à 17:30:30

                      julp a écrit:

                      C'est du CP1252, pas de l'UTF-8.

                      Plusieurs solutions :

                      • soit tu réencodes le fichier ou ce que tu en lis au fur et à mesure (iconv)
                      • soit tu passes ta connexion MySQL en latin1 (mais uniquement pour réaliser cet import)

                      -
                      Edité par julp il y a environ 21 heures

                      J'ai utiliser la fonction mb_convert_encoding() dans la quelle je passe en paramètre un tableau qui contient un ensemble de jeux de caractères et ma variable de lecture du fichier et cela fonctionne :D

                      • Partager sur Facebook
                      • Partager sur Twitter
                      Yokor
                        16 mai 2019 à 9:42:31

                        Re je sais que c'est un peux tard mais comme disent les gens mieux vaut tard que jamais, donc un grand Merci a tous :):D.
                        • Partager sur Facebook
                        • Partager sur Twitter
                        Yokor
                          17 mai 2019 à 1:40:14

                          Bonjour.

                          Ce ne serait pas du luxe que tu marques ton sujet comme résolu, c'est d'ailleurs indiqué dans les règles du forum.

                          Si les réponses apportées par les autres membres (ou votre propre recherche) vous ont permis de trouver une réponse à votre question, vous devez le signaler en cliquant sur le bouton "Résolu" tout en haut à droite de votre sujet.

                          • Partager sur Facebook
                          • Partager sur Twitter

                          Face a quelqu'un pour qui l'on n'éprouve que de l'aversion et du mépris, les yeux d'un homme deviennent extrêmement froids et cruels.

                            17 mai 2019 à 16:54:22

                            Lartak a écrit:

                            Bonjour.

                            Ce ne serait pas du luxe que tu marques ton sujet comme résolu, c'est d'ailleurs indiqué dans les règles du forum.

                            Si les réponses apportées par les autres membres (ou votre propre recherche) vous ont permis de trouver une réponse à votre question, vous devez le signaler en cliquant sur le bouton "Résolu" tout en haut à droite de votre sujet.


                            Salut merci pour le rappel mais en fait je n'avait pas poser toute mes question, :D:D:D.

                            J'ai cette erreur  "Fatal error: Uncaught RuntimeException: SplFileObject::__construct(../save_Data/'.2017-05-29_PE.xls): failed to open stream: No such file or directory in C:\wamp64\www\VD\modele\Pretreatment.class.php on line 135 " et "untimeException: SplFileObject::__construct(../save_Data/'.2017-05-29_PE.xls): failed to open stream: No such file or directory in C:\wamp64\www\VD\modele\Pretreatment.class.php on line 135" , dois-je comprendre qu'il faudrait donner la permission avec un truc du genre CHMOD 777 ? Si oui comment je dois m'y prendre ? merci par avance.

                            try
                            		{
                            			$fileName = $_FILES['fichier']['name'];
                            			$files = "../save_Data/'.$fileName";
                            			$csv = new SplFileObject($files); // On instancie l'objet SplFileObject
                            			$csv->setFlags(SplFileObject::READ_CSV); // On indique que le fichier est de type CSV
                            			$csv->setCsvControl(','); // On indique le caractère délimiteur, ici c'est la virgule
                            
                            			/**
                            			* Préparation de la requête avec les paramètres.
                            			*/
                            
                            			$nox = 'INSERT INTO public.nox_donnes_brutes (nox_date, nox_no_ppb, nox_no2_ppb, nox_nox_ppb) VALUES(:nox_date, :nox_no_ppb, :nox_no2_ppb, :nox_nox_ppb)';
                            			$stm = $this->db->prepare($nox);
                            			$stm->bindParam('nox_date', $nox_date, PDO::PARAM_STR);
                            			$stm->bindParam('nox_no_ppb', $nox_no_ppb, PDO::PARAM_STR);
                            			$stm->bindParam('nox_no2_ppb', $nox_no2_ppb, PDO::PARAM_STR);
                            			$stm->bindParam('nox_nox_ppb', $nox_nox_ppb, PDO::PARAM_STR);
                            
                            			foreach ($csv as $line) 
                            			{
                            				$character_sets = array("ISO-10646", "ISO-8859-1", "ISO-8859-2", "ISO-8859-3", "ISO-8859-4", "ISO-8859-5", "ISO-8859-9", "ISO-8859-10",
                            						"ISO-8859-13", "ISO-8859-14", "ISO-8859-15", "ISO-8859-16", "PC1250", "PC1251", "PC1252", "PC1253", "PC1254", "PC1255", "PC1256", "PC1257",
                            						"PC1258", "Windows-1252", "UTF-8", "UTF-16", "UTF-32", "ASCII", "TOA5", "TOB1", "UTF-EBCDIC", "CESU-8", "BOCU-1");
                            				$convert_files = mb_convert_encoding($line, 'UTF-8', $character_sets);
                            				$nox_date = $convert_files[0];
                            				$nox_no_ppb = $convert_files[1];
                            				$nox_no2_ppb = $convert_files[2];
                            				$nox_nox_ppb = $convert_files[3];
                            				$stm->execute();
                            			}
                            		}
                            		catch(PDOException $e)
                            		{
                            			die('Erreur lors de l\'insertion des données : Error ['. $e->getCode().'] ' . $e->getMessage() .'</p>');
                            		}



                            • Partager sur Facebook
                            • Partager sur Twitter
                            Yokor
                              17 mai 2019 à 17:03:32

                              C'est quoi le '. qui traîne dans ta chaîne ?

                              Non, il te dit que le fichier n'existe pas. Mais il n'y a pas de move_uploaded_file ? Pourquoi tu n'utilises pas directement $_FILES['fichier']['tmp_name'] sauf si le but est de conserver le fichier CSV ?

                              PS : la (prétendue) détection du jeu de caractères par mbstring est survendue, elle est à des années lumières de ce qu'offre la bibliothèque ICU : elle sera incapable de faire la différence entre tous ces jeux de caractères. Je ne sais même pas si elle serait capable de distinguer de l'UTF-8, pourtant caractéristique, et un jeu comme ISO-8859-1. En tout cas, personne ne saura reconnaître un jeu d'un autre entre les ISO* et CP*. J'ai le regret de te dire que ta liste ne sert strictement à rien. Elle serait limitée à UTF-8 (+ UTF-16 à la rigueur) et CP1252, oui mis là tu te mets le doigt dans l'oeil si tu t'attends à un miracle de sa part. Le problème c'est que tu prends le risque à ce qu'elle s'arrête sur le premier de ta liste et que ça donne n'importe quoi derrière ...

                              -
                              Edité par julp 17 mai 2019 à 17:22:45

                              • Partager sur Facebook
                              • Partager sur Twitter
                                17 mai 2019 à 17:12:08

                                comprendre qu'il faudrait donner la permission avec un truc du genre CHMOD 777 ? Si oui comment je dois m'y prendre ? merci par avance.

                                Non, si tu lis bien le message d'erreur, il y est dit :

                                failed to open stream: No such file or directory

                                Par conséquent le fichier où son répertoire n'existe pas.

                                La raison peut être ce que te dit julp, tu as un point dans le chemin qui n'a rien à y faire, tu as aussi une simple quote qui te pose obligatoirement problème.

                                De plus, il est préférable de donner le chemin absolu et non relatif.

                                -
                                Edité par Lartak 17 mai 2019 à 17:14:54

                                • Partager sur Facebook
                                • Partager sur Twitter

                                Face a quelqu'un pour qui l'on n'éprouve que de l'aversion et du mépris, les yeux d'un homme deviennent extrêmement froids et cruels.

                                  20 mai 2019 à 11:30:46

                                  julp a écrit:

                                  C'est quoi le '. qui traîne dans ta chaîne ?

                                  Non, il te dit que le fichier n'existe pas. Mais il n'y a pas de move_uploaded_file ? Pourquoi tu n'utilises pas directement $_FILES['fichier']['tmp_name'] sauf si le but est de conserver le fichier CSV ?

                                  PS : la (prétendue) détection du jeu de caractères par mbstring est survendue, elle est à des années lumières de ce qu'offre la bibliothèque ICU : elle sera incapable de faire la différence entre tous ces jeux de caractères. Je ne sais même pas si elle serait capable de distinguer de l'UTF-8, pourtant caractéristique, et un jeu comme ISO-8859-1. En tout cas, personne ne saura reconnaître un jeu d'un autre entre les ISO* et CP*. J'ai le regret de te dire que ta liste ne sert strictement à rien. Elle serait limitée à UTF-8 (+ UTF-16 à la rigueur) et CP1252, oui mis là tu te mets le doigt dans l'oeil si tu t'attends à un miracle de sa part. Le problème c'est que tu prends le risque à ce qu'elle s'arrête sur le premier de ta liste et que ça donne n'importe quoi derrière ...

                                  -
                                  Edité par julp 17 mai 2019 à 17:22:45



                                  Merci pour ta réponse, je ne vois pas comment installer la bibliothèque ICU pour PHP il me semble que c'est surtout utilisé avec les langages C,C++ et Java.

                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                  Yokor
                                    20 mai 2019 à 11:39:19

                                    La bibliothèque ICU est (partiellement) interfacée par l'extension intl et, malheureusement, les fonctionnalités que j'évoque, ne le [interfacées] sont pas par PHP (du moins pour le moment).

                                    De toute façon, une auto-détection, n'est pas fiable non plus : plus le texte sera long et caractéristique plus elle sera exacte (ICU se base sur la recherche/fréquence de certains groupes de lettres de mémoire pour en trouver la langue et associer le jeu correspondant - sauf pour les jeux caractéristiques facilement identifiables comme les UTF-*).

                                    Bref, je ne cherchais pas à dire qu'il fallait utiliser ICU mais que mbstring, bien moins avancée, est loin d'être capable de distinguer "tout ça".

                                    -
                                    Edité par julp 20 mai 2019 à 11:46:39

                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      20 mai 2019 à 15:31:04

                                      julp a écrit:

                                      La bibliothèque ICU est (partiellement) interfacée par l'extension intl et, malheureusement, les fonctionnalités que j'évoque, ne le [interfacées] sont pas par PHP (du moins pour le moment).

                                      De toute façon, une auto-détection, n'est pas fiable non plus : plus le texte sera long et caractéristique plus elle sera exacte (ICU se base sur la recherche/fréquence de certains groupes de lettres de mémoire pour en trouver la langue et associer le jeu correspondant - sauf pour les jeux caractéristiques facilement identifiables comme les UTF-*).

                                      Bref, je ne cherchais pas à dire qu'il fallait utiliser ICU mais que mbstring, bien moins avancée, est loin d'être capable de distinguer "tout ça".

                                      -
                                      Edité par julp il y a environ 1 heure


                                      Ah oui d'accord, désolé de vous déranger encore une fois, je suis bloqué sur cette érreur '[22P02] SQLSTATE[22P02]: Invalid text representation: 7 ERROR: invalid input syntax for integer: "" ' et lorsque je tente de tester les variables avec les fonctions is_null et is_int les érreurs disparaisse mais en revanche il n'y aucune insertion dans la table. Que faire ?

                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                      Yokor
                                        20 mai 2019 à 17:02:17

                                        Elles parlent d'elles-mêmes non ?

                                        Tu tombes sur une ligne de ton CSV qui n'a pas 4 "colonnes" s'en suit que tu te retrouves avec la chaîne vide or ton sql_mode doit le refuser. Tu as fait un var_dump ou autre pour voir quelle ligne de ton CSV produit ça ?

                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          21 mai 2019 à 12:04:50

                                          julp a écrit:

                                          Elles parlent d'elles-mêmes non ?

                                          Tu tombes sur une ligne de ton CSV qui n'a pas 4 "colonnes" s'en suit que tu te retrouves avec la chaîne vide or ton sql_mode doit le refuser. Tu as fait un var_dump ou autre pour voir quelle ligne de ton CSV produit ça ?


                                          Oui en effet j'ai une ligne vide dans mon csv, et je vais utiliser la méthode seek() pour lire le csv à partir de la ligne que je veux.

                                          Selon vous il existe une fonction ne lit seulement les ligne qui contiennent des colonnes non vide ?

                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                          Yokor
                                            21 mai 2019 à 12:08:11

                                            Tu connais la longueur de tes lignes (en octets) pour pouvoir utiliser seek ?

                                            > Selon vous il existe une fonction ne lit seulement les ligne qui contiennent des colonnes non vide ?

                                            Je ne pense pas non, mais qu'est-ce qui t'empêche de gérer ce cas par un bête if ?

                                            > Une ligne vide dans un fichier CSV sera retournée sous la forme d'un tableau contenant la valeur NULL et ne sera pas traitée comme une erreur.

                                            if ([NULL] == $line) continue; ?

                                            -
                                            Edité par julp 21 mai 2019 à 12:09:11

                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                              21 mai 2019 à 13:18:38

                                              julp a écrit:

                                              Tu connais la longueur de tes lignes (en octets) pour pouvoir utiliser seek ?

                                              > Selon vous il existe une fonction ne lit seulement les ligne qui contiennent des colonnes non vide ?

                                              Je ne pense pas non, mais qu'est-ce qui t'empêche de gérer ce cas par un bête if ?

                                              > Une ligne vide dans un fichier CSV sera retournée sous la forme d'un tableau contenant la valeur NULL et ne sera pas traitée comme une erreur.

                                              if ([NULL] == $line) continue; ?

                                              -
                                              Edité par julp il y a environ 1 heure

                                              La longueur de mes lignes en octets non mais le fichier fait 727 040 octets. Pour les colonnes non vide voila ce que je fait

                                              foreach ($csv as $line) 
                                              			{
                                              				$character_sets = array("ISO-10646", "ISO-8859-1", "ISO-8859-2", "ISO-8859-3", "ISO-8859-4", "ISO-8859-5", "ISO-8859-9", "ISO-8859-10",
                                              						"ISO-8859-13", "ISO-8859-14", "ISO-8859-15", "ISO-8859-16", "PC1250", "PC1251", "PC1252", "PC1253", "PC1254", "PC1255", "PC1256", "PC1257",
                                              						"PC1258", "Windows-1252", "UTF-8", "UTF-16", "UTF-32", "ASCII", "TOA5", "TOB1", "UTF-EBCDIC", "CESU-8", "BOCU-1");
                                              				$convert_files = mb_convert_encoding($line, 'UTF-8', $character_sets);
                                              
                                              				$nox_date = $convert_files[0];
                                              				$nox_no_ppb  =   $convert_files[1];
                                              				if (!is_int($nox_no_ppb)) {
                                              					$nox_no_ppb = NULL;
                                              				}
                                              
                                              				$nox_no2_ppb = $convert_files[2];
                                              				if (!is_int($nox_no2_ppb)) {
                                              					$nox_no2_ppb = NULL;
                                              				}
                                              
                                              				$nox_nox_ppb = $convert_files[3];
                                              				if (!is_int($nox_nox_ppb)) {
                                              					$nox_nox_ppb = NULL;
                                              				}	
                                              
                                              				var_dump($convert_files);
                                              
                                              				/**
                                              				* Préparation de la requête avec les paramètres.
                                              				*/
                                              
                                              				$nox = 'INSERT INTO public.nox_donnees_brutes (nox_date, nox_no_ppb, nox_no2_ppb, nox_nox_ppb) VALUES(:nox_date, :nox_no_ppb, :nox_no2_ppb, :nox_nox_ppb)';
                                              				$stm = $this->db->prepare($nox);
                                              				$stm->bindParam('nox_date', $nox_date, PDO::PARAM_STR);
                                              				$stm->bindParam('nox_no_ppb', $nox_no_ppb, PDO::PARAM_INT);
                                              				$stm->bindParam('nox_no2_ppb', $nox_no2_ppb, PDO::PARAM_INT);
                                              				$stm->bindParam('nox_nox_ppb', $nox_nox_ppb, PDO::PARAM_INT);
                                              
                                              				$stm->execute();				
                                              			}



                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                              Yokor
                                                21 mai 2019 à 13:36:43

                                                Et pour les lignes vides ? D'ailleurs, désolé, je ne sais pas pourquoi, j'étais resté sur fgetcsv mais SplFileObject fonctionne de manière similaire :

                                                > Une ligne vide d'un fichier CSV sera retourné sous la forme d'un tableau contenu un seul champ NULL sauf si vous utilisez SplFileObject::SKIP_EMPTY | SplFileObject::DROP_NEW_LINE, auquel cas, les lignes vides seront ignorées.

                                                Tu devrais utiliser array_map pour convertir les valeurs de toutes les colonnes d'un coup. Ce serait moins répétitif.

                                                Et ton prepare ainsi que tes bindParam ne devraient pas être dans la boucle mais avant.

                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                  21 mai 2019 à 14:29:20

                                                  Il y a plusieurs choses que tu devrais mettre en dehors de la boucle, la variable character_sets, ainsi que la variable nox et :

                                                  $stm = $this->db->prepare($nox);

                                                  Par contre, tu définies des variables comme NULL, mais est-ce que les colonnes correspondantes sont nullable ?
                                                  Surtout que quand tu utilises la méthode bindParam, tu indiques que ça doit être un int, sauf qu'avec ton code il se peut que certaines variables soient NULL.

                                                  -
                                                  Edité par Lartak 21 mai 2019 à 14:33:10

                                                  • Partager sur Facebook
                                                  • Partager sur Twitter

                                                  Face a quelqu'un pour qui l'on n'éprouve que de l'aversion et du mépris, les yeux d'un homme deviennent extrêmement froids et cruels.

                                                    21 mai 2019 à 17:01:06

                                                    Mais, d'ailleurs, $line est un tableau de chaînes en principe, non ?

                                                    Donc tu ne peux sûrement pas utiliser mb_convert_encoding comme ça (d'où ma suggestion d'employer array_map). Ca ne te renvoie pas la chaîne "Array" pour $convert_files (et les $convert_files[0]/[1]/[2]/[3] les chaînes "A"/"r"/"r"/"a") ?

                                                    > Surtout que quand tu utilises la méthode bindParam, tu indiques que ça doit être un int, sauf qu'avec ton code il se peut que certaines variables soient NULL.

                                                    A tester mais je pense que NULL a précédence sur le type (ce dernier n'étant pas non plus strictement respecté suivant le pilote PDO). Surtout qu'il me semble qu'il était question de déprécier PDO::PARAM_NULL.

                                                    EDIT : j'ai retrouvé la RFC mais elle est marquée inactive

                                                    -
                                                    Edité par julp 21 mai 2019 à 17:09:27

                                                    • Partager sur Facebook
                                                    • Partager sur Twitter
                                                      4 juillet 2019 à 12:18:14

                                                      Bonjours tout le monde ^^, j’avais une petite 'grande' question a posé, où est-ce que je doit indiquer le nom et le chemin de mon fichier sachant que le fichier peux se trouver n’importe où  lorsqu'il est chargé au niveau du formulaire.

                                                      J'applique l'architecture MVC avec mon index qui sert de routeur. En fait j'ai vraiment du mal à faire lecture de mon fichier et l'intégration de sont contenu dans la base de données en codant logiquement les méthodes des couche modèle et contrôleur.

                                                      Pour l'instant ce que j'ai fait, la méthode du modèle qui est appeler par le méthode du contrôleur qui lui même est appeler dans mon index.

                                                      Merci par avance

                                                      • Partager sur Facebook
                                                      • Partager sur Twitter
                                                      Yokor
                                                        4 juillet 2019 à 12:45:02

                                                        Bonjour.

                                                        Drmerys a écrit:

                                                        Bonjours tout le monde ^^, j’avais une petite 'grande' question a posé, où est-ce que je doit indiquer le nom et le chemin de mon fichier sachant que le fichier peux se trouver n’importe où  lorsqu'il est chargé au niveau du formulaire.

                                                        J'applique l'architecture MVC avec mon index qui sert de routeur. En fait j'ai vraiment du mal à faire lecture de mon fichier et l'intégration de sont contenu dans la base de données en codant logiquement les méthodes des couche modèle et contrôleur.

                                                        Pour l'instant ce que j'ai fait, la méthode du modèle qui est appeler par le méthode du contrôleur qui lui même est appeler dans mon index.

                                                        Merci par avance

                                                        Dans le fichier index, tu pourrais par exemple définir une constante qui aura comme valeur le chemin absolu du dossier de ton projet, puis par la suite tu pourrais utiliser cette constante pour récupérer le chemin qui mène directement dans le dossier de ton projet, de cette manière tu auras une base correcte.

                                                        -
                                                        Edité par Lartak 4 juillet 2019 à 12:45:33

                                                        • Partager sur Facebook
                                                        • Partager sur Twitter

                                                        Face a quelqu'un pour qui l'on n'éprouve que de l'aversion et du mépris, les yeux d'un homme deviennent extrêmement froids et cruels.

                                                          4 juillet 2019 à 14:00:40

                                                          Ce que je veux dire c'est que lorsque l'utilisateur va charger sont fichier via le formulaire, le fichier peut être n'importe où dans son disque-dur, et son chemin n'est pas déterminer à l'avance dans le code.

                                                          Voila à quoi ressemble mon formulaire.

                                                          -
                                                          Edité par Drmerys 4 juillet 2019 à 14:01:37

                                                          • Partager sur Facebook
                                                          • Partager sur Twitter
                                                          Yokor
                                                            4 juillet 2019 à 14:32:27

                                                            Oui et donc ?

                                                            Quand il soumet le formulaire tu obtiens plusieurs informations sous forme de tableau concernant le fichier.

                                                            -
                                                            Edité par Lartak 4 juillet 2019 à 14:37:04

                                                            • Partager sur Facebook
                                                            • Partager sur Twitter

                                                            Face a quelqu'un pour qui l'on n'éprouve que de l'aversion et du mépris, les yeux d'un homme deviennent extrêmement froids et cruels.

                                                              5 juillet 2019 à 17:12:16

                                                              mLartak a écrit:

                                                              Oui et donc ?

                                                              Quand il soumet le formulaire tu obtiens plusieurs informations sous forme de tableau concernant le fichier.

                                                              -
                                                              Edité par Lartak il y a environ 1 heure

                                                              define(CHEMIN1, realpath('index.php'));

                                                              Concretement je ne vois pas quand est-ce que j'aurais a l'utiliser, comment est-ce que je pourrais coder ça dans le modèle la lecture du fichier sans spécifier le chemin d'origine du fichier chargé ?
                                                              • Partager sur Facebook
                                                              • Partager sur Twitter
                                                              Yokor

                                                              Intégration de données de fichier txt dans une Bdd

                                                              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                                              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                                              • Editeur
                                                              • Markdown