Partage
  • Partager sur Facebook
  • Partager sur Twitter

ligne avec que des zéro sur insert fichier csv

Sujet résolu
    14 novembre 2018 à 13:19:50

    bonjour

    je remplis une table par un script qui fait appel à un fichier .csv, il est régulièrement mis à jour au fur et mesure de la journée. l'envoi et la mise à jour se fait bien mais j'ai une ligne qui se rajoute systématiquement et indique que des zéros sur tous les champs, y compris la date .

    voici mon code : 

    <?php 
      require ("Connect.php");
    $connexion = mysql_pconnect (SERVEUR, NOM, PASSE);
    if ($connexion)
    		{    
    		mysql_select_db (BASE, $connexion);
        $req = "SELECT * FROM minimaxiarchive";
        $result = mysql_query ($req, $connexion);
        if ($result)
                {        
                    $NomFich = 'LesResumes_moiscourant.csv';                    
            $fichier=@fopen($NomFich,'r');
            if ($fichier)  
    			{             
                $Ligne= fgets($fichier,900);			
                $Fini = false ;
                while (!feof($fichier) and !$Fini)
                      {                   
                      if (strlen($Ligne) > 7)
                          {                  
                          $Ligne1=trim(fgets($fichier));
                          $TabLigne1= explode(";",$Ligne1);        
                          $Ligne2=trim(fgets($fichier));
                          $TabLigne2= explode(";",$Ligne2);				 
                          $periode              =substr($TabLigne1[0],6,4).substr($TabLigne1[0],3,2).substr($TabLigne1[0],0,2);                      
                          $h_temp_max           = $TabLigne2[1];
                          $temp_max             = $TabLigne1[1];
    					  $h_temp_min           = $TabLigne2[2];
                          $temp_min             = $TabLigne1[2];
    					  $temp_moy             = $TabLigne1[5];
    					  $temp_ressentie_min   = $TabLigne1[7];
    					  $h_temp_ressentie_min = $TabLigne2[7];					 
    					 $enregist= "INSERT INTO minimaxiarchive
                          (periode,temp_max,h_temp_max,temp_min,h_temp_min,temp_moy,temp_ressentie_min,h_temp_ressentie_min)
                           VALUES
                          ('$periode','$temp_max','$h_temp_max','$temp_min','$h_temp_min','$temp_moy','$temp_ressentie_min','$h_temp_ressentie_min') ON DUPLICATE KEY UPDATE 
    					  temp_max = '$temp_max' , h_temp_max = '$h_temp_max' , temp_min = '$temp_min',h_temp_min = '$h_temp_min',temp_moy = '$temp_moy' , temp_ressentie_min = '$temp_ressentie_min', h_temp_ressentie_min = '$h_temp_ressentie_min' ";
                          
                                     $result =mysql_query($enregist,$connexion);
    								 if(mysql_error($connexion)) echo mysql_errno($connexion) . ": " . mysql_error($connexion) . "\n";
                                     $Date= $periode; 								 
                                     if ($result)
                             {
                             echo 'DONNEES DU '.$Date.' ENREGISTREES.<br>';
                             } 
                             else
                             {
                             echo 'PROBLEME LES DONNEES DU '.$Date.' NON PAS ETE ENREGISTREES.<br>';
                             }                         
                          }
                          else
                          {
                          $Fini = true ;
                          }            
                      }
                  echo "<br><br> TRAITEMENT TERMINE"  ;
                  }
                  else
                  {
                  echo $NomFich.' INTROUVABLE';
                  }       
             }
             else
             {
             echo "PROBLEME AVEC LA TABLE";         
             }      
        }
        else
        {
        echo 'PROBLEME AVEC LA BDD';
        } 
    ?>

    j'ai essayé de changer les valeurs 0 par NULL mais à chaque mise à jours ça revient.

    si quelqu'un a une idée .



    • Partager sur Facebook
    • Partager sur Twitter
      14 novembre 2018 à 14:59:54

      Bonjour,

      Ce n'est pas une réponse directe à ta question mais plusieurs points :

      - tu utilises la bibliothèque mysql qui est obsolète et même retirée de php 7 - http://php.net/manual/fr/intro.mysql.php

      A toi de voir mais passer sur du PDO est une recommandation (perso).

      - tu désactives les messages d'erreur par l'opérateur @ : ce n'est pas à mon sens une bonne manière de faire. Il vaut mieux, à mon avis, sortir les erreurs et les traiter plutôt que les masquer.

      Pour traiter ton problème je ferai un fichier test csv de quelques lignes et je mettrai des traces dans le php pour savoir ce qui se fait.

      A+

      -
      Edité par monkey3d 14 novembre 2018 à 15:06:00

      • Partager sur Facebook
      • Partager sur Twitter
        14 novembre 2018 à 15:28:55

        merci de ta réponse monkey3d, ce qui me parait bizarre ou sans explication c'est que lorsque je lis juste le csv en demandant les même variable je n'ai pas cette ligne qui s'affiche https://mobile.meteo-canejan.fr/copieresume.php  

        <?php       
                $NomFich = 'LesResumes_moiscourant.csv';                    
                $fichier=@fopen($NomFich,'r');
                if ($fichier)  
        			{           
        			$Nb = count($TabLigne);
                    for ($i=0;$i<=$Nb;$i++)
                        {
                        $Ligne= fgets($fichier, 900);
                        }            
                    while (!feof($fichier))                    
                        {
                         $Ligne1=trim(fgets($fichier));
                         $TabLigne1= explode(";",$Ligne1);        
                         $Ligne2=trim(fgets($fichier));
                         $TabLigne2= explode(";",$Ligne2);
        				 
                              $periode              = $TabLigne1[0];                      
                              $heuretempmax         = $TabLigne2[1];
                              $temp_max             = $TabLigne1[1];
        					  $heuretempmin         = $TabLigne2[2];
                              $temp_min             = $TabLigne1[2];
        					  $temp_moy             = $TabLigne1[5];
        					  $temp_ressentie_min   = $TabLigne1[7];
        					  $h_temp_ressentie_min = $TabLigne2[7];
        					  
        					  
        					  
                        echo '<table>';// on crée un tableau                       				  
                              echo "<tr>"; // on crée une nouvelle ligne dans le tableau                                           
                                                   
                                                  echo "<td>"; // on crée une nouvelle cellule dans la ligne du tableau tableau 
                                                                      echo $periode ;                                          
                                                  echo "</td>"; // on ferme la cellule
        										  echo "<td>"; // on crée une nouvelle cellule dans la ligne du tableau tableau 
                                                                      echo $temp_max ;                                          
                                                  echo "</td>"; // on ferme la cellule
        										  echo "<td>"; // on crée une nouvelle cellule dans la ligne du tableau tableau 
                                                                      echo $heuretempmax ;                                          
                                                  echo "</td>"; // on ferme la cellule
        										  echo "<td>"; // on crée une nouvelle cellule dans la ligne du tableau tableau 
                                                                      echo $temp_min ;                                          
                                                  echo "</td>"; // on ferme la cellule
        										  echo "<td>"; // on crée une nouvelle cellule dans la ligne du tableau tableau 
                                                                      echo $heuretempmin ;                                          
                                                  echo "</td>"; // on ferme la cellule
                                                   echo "<td>"; // on crée une nouvelle cellule dans la ligne du tableau tableau 
                                                                      echo $temp_moy ;                                          
                                                  echo "</td>"; // on ferme la cellule
                                                  echo "<td>"; // on crée une nouvelle cellule dans la ligne du tableau tableau 
                                                                      echo $temp_ressentie_min ;                                          
                                                  echo "</td>"; // on ferme la cellule
        										  echo "<td>"; // on crée une nouvelle cellule dans la ligne du tableau tableau 
                                                                      echo $h_temp_ressentie_min ;                                          
                                                  echo "</td>"; // on ferme la cellule
                                                  				  
        										  
                                   echo "</tr>"; // on ferme la ligne du tableau		    
                        echo '</table>';    //on ferme le tableau    
                        }				            
                    }
        			
        fclose ($fichier) ; // on ferme le fichier      
            
        
        ?>
        • Partager sur Facebook
        • Partager sur Twitter
          14 novembre 2018 à 16:05:10

          Une chose que tu pourrais faire d'ailleurs c'est de vérifier avant l'insert les valeurs de tes données ... et si elles sont toutes à zéro, ne rien faire. Certes cela traite la conséquence pas la cause.

          De plus c'est curieux d'intégrer des zéros en base pour une date ou time : tes champs en base sont de quel type ?

          Si quand tu parcours c'est bon alors c'est sans doute ta requête avec le duplicate key qui pose problème.

          N'oublie pas mes 2 autres suggestions - recommandations : mysql => pdo et enlever @

          A+

          • Partager sur Facebook
          • Partager sur Twitter
            14 novembre 2018 à 16:29:47

            justement c'est ce que je te montre dans ce lien : https://mobile.meteo-canejan.fr/copieresume.php  les valeurs de mon fichier csv y sont bien et en fin de lecture il n'y a pas de ligne supplémentaire avec des zéros. 

            par contre !! si je regarde la source je m’aperçois qu'en fin de lecture il y a des cellules vide view-source:https://mobile.meteo-canejan.fr/copieresume.php  

            pour les deux suggestions de mysql => pdo   pas très évident car je ne suis pas expert :) et enlever  @ la si tu pouvais etre un peu plus explicite car je ne vois pas 

            • Partager sur Facebook
            • Partager sur Twitter
              14 novembre 2018 à 17:22:24

              Je ne peux pas voir le formattage de ton fichier csv ... d'où ma suggestion d'afficher les entrées qui sont lues pour être sûr que tu ne lis pas des zones que tu ne vois pas.

              Et là tu vas cibler les instructions qui posent problème.

              mysql => pdo : je comprends que cela change pas mal ... alors utilise la librairie mysqli - avec un i à la fin - et non la librairie mysql sans i. Au moins tu auras une compatibilité avec la version 7 de php. Et cela change assez peu le code.

              Pour le @ ligne 3 de ton post du début :

              $fichier=@fopen($NomFich,'r');
              
              

              A+

              • Partager sur Facebook
              • Partager sur Twitter
                14 novembre 2018 à 17:37:57

                c'est a ce @ que je pensai aussi mais je n'en été pas sûr :)  j'ai enlevé l'@ et j'avoue que cela ne fait rien de plus ou moins. 

                pour PDO ou mysqli je vois ça, voici le lien du fichier csv https://mobile.meteo-canejan.fr/LesResumes_moiscourant.csv  

                • Partager sur Facebook
                • Partager sur Twitter
                  14 novembre 2018 à 17:49:56

                  Oui le @ est juste pour supprimer les messages en cas de problème. Donc si tu n'as pas d'erreur c'est bien. Mais si tu en avais tu ne les verrais pas.

                  Ton fichier csv a l'air correct pour ce que tu en fais.

                  Je pense donc que c'est ta requête insert / update qui génère le problème.

                  Tu pourrais faire un echo de $enregist avant la requête ?

                  A+

                  • Partager sur Facebook
                  • Partager sur Twitter
                    14 novembre 2018 à 18:09:48

                    voila ce que donne l'echo $enregist : 

                    https://mobile.meteo-canejan.fr/copieresumebdd.php  

                    on vois à la fin des champs vide : je pense que cela correspond aux zéro sur ma table ?

                    si je ne me suis pas trompé dans le code mais apparement non puisque la table c'est remplis, je suis passé en mysqli, j'ai toujours la ligne en sup des zéros .

                    si je ne me suis pas trompé dans le code mais apparement non puisque la table c'est remplis, je suis passé en mysqli, j'ai toujours la ligne en sup des zéros .
                    
                    <?php 
                     $server ="####";
                    $user = "####";
                    $pwd = "########";
                    $db ="########";
                    $con=mysqli_connect($server,$user,$pwd,$db);
                    If(! $con) {
                    exit("Echec de la connexion");
                    }
                        $req = "SELECT * FROM minimaxiarchive";
                        if ($resultat = mysqli_query($con,$req))  
                                {      
                            $NomFich = 'LesResumes_moiscourant.csv';                    
                            $fichier=fopen($NomFich,'r');
                            if ($fichier)  
                    			{                 
                                $Ligne= fgets($fichier);                           
                                while (!feof($fichier) )                    
                                    {	
                                          
                                      if (strlen($Ligne) > 10)
                                          {			
                                          $Ligne1=trim(fgets($fichier));
                                          $TabLigne1= explode(";",$Ligne1);        
                                          $Ligne2=trim(fgets($fichier));
                                          $TabLigne2= explode(";",$Ligne2);				 
                                          $periode              =substr($TabLigne1[0],6,4).substr($TabLigne1[0],3,2).substr($TabLigne1[0],0,2);                      
                                          $h_temp_max           = $TabLigne2[1];
                                          $temp_max             = $TabLigne1[1];
                    					  $h_temp_min           = $TabLigne2[2];
                                          $temp_min             = $TabLigne1[2];
                    					  $temp_moy             = $TabLigne1[5];
                    					  $temp_ressentie_min   = $TabLigne1[7];
                    					  $h_temp_ressentie_min = $TabLigne2[7];
                    					  $temp_ressentie_max   = $TabLigne1[8];
                    					  $h_temp_ressentie_max = $TabLigne2[8];
                    					  $temp_ressentie_moy   = $TabLigne1[11];
                    					  $temp_rosee_min       = $TabLigne1[9];
                    					  $h_temp_rosee_min     = $TabLigne2[9];
                    					  $temp_rosee_max       = $TabLigne1[10];
                    					  $h_temp_rosee_max     = $TabLigne2[10];
                    					  $temp_rosee_moy       = $TabLigne1[12];
                    					  $hum_max              = $TabLigne1[13];
                    					  $h_hum_max            = $TabLigne2[13];
                    					  $hum_min              = $TabLigne1[14];
                    					  $h_hum_min            = $TabLigne2[14];
                    					  $hum_moy              = $TabLigne1[17];
                    					  $bar_max              = $TabLigne1[18];
                    					  $h_bar_max            = $TabLigne2[18];
                    					  $bar_min              = $TabLigne1[19];
                    					  $h_bar_min            = $TabLigne2[19];
                    					  $bar_moy              = $TabLigne1[20];
                    					  $vent_max             = $TabLigne1[21];
                    					  $h_vent_max           = $TabLigne2[21];
                    					  $vent_moy             = $TabLigne1[22];
                    					  $total_vent_jour      = $TabLigne1[23];
                    					  $dir_vent_max         = $TabLigne1[25];
                    					  $pluie_jour           = $TabLigne1[27];
                    					  $int_max_pluie_jour   = $TabLigne1[28];
                    					  $h_int_max_pluie_jour = $TabLigne2[28];
                    					  $solar_max            = $TabLigne1[33];
                    					  $energy_jour          = $TabLigne1[34];
                    					  $et_jour              = $TabLigne1[36];
                    					 $enregist= "INSERT INTO minimaxiarchive
                                          (periode,temp_max,h_temp_max,temp_min,h_temp_min,temp_moy,temp_ressentie_min,h_temp_ressentie_min)
                                           VALUES
                                          ('$periode','$temp_max','$h_temp_max','$temp_min','$h_temp_min','$temp_moy','$temp_ressentie_min','$h_temp_ressentie_min') ON DUPLICATE KEY UPDATE 
                    					  temp_max = '$temp_max' , h_temp_max = '$h_temp_max' , temp_min = '$temp_min',h_temp_min = '$h_temp_min',temp_moy = '$temp_moy' , temp_ressentie_min = '$temp_ressentie_min', h_temp_ressentie_min = '$h_temp_ressentie_min'";
                    					  
                                          
                                                     $result = mysqli_query($con,$enregist);
                    								 if(mysqli_error($con)) echo mysqli_errno($con) . ": " . mysqli_error($con) ."\n";
                                                     $Date= $periode; 								 
                                                     if ($result)
                                             {
                                             echo 'DONNEES DU '.$Date.' ENREGISTREES.<br>';
                                             } 
                                             else
                                             {
                                             echo 'PROBLEME LES DONNEES DU '.$Date.' NON PAS ETE ENREGISTREES.<br>';
                                             }                         
                                          }
                                                    
                                      }
                                  echo "<br><br> TRAITEMENT TERMINE"  ;
                                  }
                                  else
                                  {
                                  echo $NomFich.' INTROUVABLE';
                                  }       
                             }
                             else
                             {
                             echo "PROBLEME AVEC LA TABLE";         
                             }
                    	mysqli_close($con);	 
                    ?>
                    
                    

                    -
                    Edité par lucasdom 14 novembre 2018 à 18:35:25

                    • Partager sur Facebook
                    • Partager sur Twitter
                      17 novembre 2018 à 12:53:22

                      finalement, je n'ai pas réussi a trouver l'origine de la ligne supplémentaire de zéro mais plutôt a la contourner.

                      lors du premier envois, je remplace les zéro de la ligne incriminée par NULL sauf pour la colonne avec la clés primaire, puis dans la requête j'y ai mis une condition, pas avec WHERE car MySQL ne l’accepte pas mais celle ci : 

                      ON DUPLICATE KEY UPDATE 

                      temp_max = IF (VALUES(temp_max) != temp_max, VALUES (temp_max), temp_max)

                      voici mon code complet de ma requête si ça peu servir a quelqu'un :

                      INSERT INTO minimaxiarchive
                                            (periode,temp_max,h_temp_max,tstamp_temp_max,temp_min,h_temp_min,temp_moy,temp_ressentie_min,h_temp_ressentie_min,temp_ressentie_max,h_temp_ressentie_max,temp_ressentie_moy,
                      					   temp_rosee_min,h_temp_rosee_min,temp_rosee_max,h_temp_rosee_max,temp_rosee_moy,hum_max,h_hum_max,hum_min,h_hum_min,hum_moy,bar_max,h_bar_max,bar_min,h_bar_min,bar_moy,
                      					    vent_max,h_vent_max,vent_moy,total_vent_jour,dir_vent_max,pluie_jour,int_max_pluie_jour,h_int_max_pluie_jour,solar_max,energy_jour,et_jour)
                                             VALUES
                                            ('$periode','$temp_max','$h_temp_max','$tstamp_temp_max','$temp_min','$h_temp_min','$temp_moy','$temp_ressentie_min','$h_temp_ressentie_min',
                      					   '$temp_ressentie_max','$h_temp_ressentie_max','$temp_ressentie_moy','$temp_rosee_min','$h_temp_rosee_min','$temp_rosee_max','$h_temp_rosee_max','$temp_rosee_moy',
                      					   '$hum_max','$h_hum_max','$hum_min','$h_hum_min','$hum_moy','$bar_max','$h_bar_max','$bar_min','$h_bar_min','$bar_moy',
                      					   '$vent_max','$h_vent_max','$vent_moy','$total_vent_jour','$dir_vent_max','$pluie_jour','$int_max_pluie_jour','$h_int_max_pluie_jour',
                      					   '$solar_max','$energy_jour','$et_jour')
                      					  ON DUPLICATE KEY UPDATE 
                      					  temp_max = IF (VALUES(temp_max) != temp_max, VALUES (temp_max), temp_max),
                      					  h_temp_max = IF (VALUES(h_temp_max) != h_temp_max, VALUES (h_temp_max), h_temp_max),
                      					  tstamp_temp_max = IF (VALUES(tstamp_temp_max) != tstamp_temp_max, VALUES (tstamp_temp_max), tstamp_temp_max),
                                            temp_min = IF (VALUES(temp_min) != temp_min, VALUES (temp_min), temp_min),
                                            h_temp_min = IF (VALUES(h_temp_min) != h_temp_min, VALUES (h_temp_min), h_temp_min),
                                            temp_moy = IF (VALUES(temp_moy) != temp_moy, VALUES (temp_moy), temp_moy),
                      					  temp_ressentie_min = IF (VALUES(temp_ressentie_min) != temp_ressentie_min, VALUES (temp_ressentie_min), temp_ressentie_min),
                      					  h_temp_ressentie_min = IF (VALUES(h_temp_ressentie_min) != h_temp_ressentie_min, VALUES (h_temp_ressentie_min), h_temp_ressentie_min),
                      					  temp_ressentie_max = IF (VALUES(temp_ressentie_max) != temp_ressentie_max, VALUES (temp_ressentie_max), temp_ressentie_max),
                      					  h_temp_ressentie_max = IF (VALUES(h_temp_ressentie_max) != h_temp_ressentie_max, VALUES (h_temp_ressentie_max), h_temp_ressentie_max),
                      					  temp_ressentie_moy = IF (VALUES(temp_ressentie_moy) != temp_ressentie_moy, VALUES (temp_ressentie_moy), temp_ressentie_moy),
                      					  temp_rosee_min = IF (VALUES(temp_rosee_min) != temp_rosee_min, VALUES (temp_rosee_min), temp_rosee_min),
                      					  h_temp_rosee_min = IF (VALUES(h_temp_rosee_min) != h_temp_rosee_min, VALUES (h_temp_rosee_min), h_temp_rosee_min),
                      					  temp_rosee_max = IF (VALUES(temp_rosee_max) != temp_rosee_max, VALUES (temp_rosee_max), temp_rosee_max),
                      					  h_temp_rosee_max = IF (VALUES(h_temp_rosee_max) != h_temp_rosee_max, VALUES (h_temp_rosee_max), h_temp_rosee_max),
                      					  temp_rosee_moy = IF (VALUES(temp_rosee_moy) != temp_rosee_moy, VALUES (temp_rosee_moy), temp_rosee_moy),
                      					  hum_max = IF (VALUES(hum_max) != hum_max, VALUES (hum_max), hum_max),
                      					  h_hum_max = IF (VALUES(h_hum_max) != h_hum_max, VALUES (h_hum_max), h_hum_max),
                      					  hum_min = IF (VALUES(hum_min) != hum_min, VALUES (hum_min), hum_min),
                      					  h_hum_min = IF (VALUES(h_hum_min) != h_hum_min, VALUES (h_hum_min), h_hum_min),
                      					  hum_moy = IF (VALUES(hum_moy) != hum_moy, VALUES (hum_moy), hum_moy),
                      					  bar_max = IF (VALUES(bar_max) != bar_max, VALUES (bar_max), bar_max),
                      					  h_bar_max = IF (VALUES(h_bar_max) != h_bar_max, VALUES (h_bar_max), h_bar_max),
                      					  bar_min = IF (VALUES(bar_min) != bar_min, VALUES (bar_min), bar_min),
                      					  h_bar_min = IF (VALUES(h_bar_min) != h_bar_min, VALUES (h_bar_min), h_bar_min),
                      					  bar_moy = IF (VALUES(bar_moy) != bar_moy, VALUES (bar_moy), bar_moy),
                      					  vent_max = IF (VALUES(vent_max) != vent_max, VALUES (vent_max), vent_max),
                      					  h_vent_max = IF (VALUES(h_vent_max) != h_vent_max, VALUES (h_vent_max), h_vent_max),
                      					  vent_moy = IF (VALUES(vent_moy) != vent_moy, VALUES (vent_moy), vent_moy),
                      					  total_vent_jour = IF (VALUES(total_vent_jour) != total_vent_jour, VALUES (total_vent_jour), total_vent_jour),
                      					  dir_vent_max = IF (VALUES(dir_vent_max) != dir_vent_max, VALUES (dir_vent_max), dir_vent_max),
                      					  pluie_jour = IF (VALUES(pluie_jour) != pluie_jour, VALUES (pluie_jour), pluie_jour),
                      					  int_max_pluie_jour = IF (VALUES(int_max_pluie_jour) != int_max_pluie_jour, VALUES (int_max_pluie_jour), int_max_pluie_jour),
                      					  h_int_max_pluie_jour = IF (VALUES(h_int_max_pluie_jour) != h_int_max_pluie_jour, VALUES (h_int_max_pluie_jour), h_int_max_pluie_jour),
                      					  solar_max = IF (VALUES(solar_max) != solar_max, VALUES (solar_max), solar_max),
                      					  energy_jour = IF (VALUES(energy_jour) != energy_jour, VALUES (energy_jour), energy_jour),
                      					  et_jour = IF (VALUES(et_jour) != et_jour, VALUES (et_jour), et_jour)



                      • Partager sur Facebook
                      • Partager sur Twitter

                      ligne avec que des zéro sur insert fichier csv

                      × 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