Forum |  HardWare.fr | News | Articles | PC | Prix | S'identifier | S'inscrire | Shop Recherche
1910 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  [PHP]Probleme de tableau aprés un explode

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[PHP]Probleme de tableau aprés un explode

n°1588689
Moriar6
Posté le 19-07-2007 à 11:44:14  profilanswer
 

Bonjour j'ai un probleme avec mon code pour alimenter une base de donnée depuis un fichier .csv
 
Je ne vois pas ce qui pause probleme dans ce code d'autant plus que les information sont correctement enregistrées dans la base.
Simplement les ça me genere une notice par rang du tableau de l'expode (sauf le rang0).
 
Voici le code en question :
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
   <head>
       <title>W7</title>
        <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    </head>
   
    <body>
 
<?php
 
mysql_connect("localhost", "root", "" );
mysql_select_db("test_stage" );
 
 $nb_ligne = 0;
 $nb_champs = 0;
 
 $fichier_csv = @fopen("traitement_fichier_csv.csv", "r" );
 if($fichier_csv)
 {
  while (!feof($fichier_csv))
  {
   $curent_ligne = fgets($fichier_csv, 4096);
   $champs = explode(";", $curent_ligne);
   $nb_ligne++;
   mysql_query("INSERT INTO test_csv VALUES('$champs[0]', '$champs[1]', '$champs[2]', '$champs[3]', '$champs[4]', '$champs[5]', '$champs[6]', '$champs[7]', '$champs[8]', '$champs[9]', '$champs[10]', '$champs[11]', '$champs[12]', '$champs[13]', '$champs[14]', '$champs[15]', '$champs[16]')" );
  }
  print($nb_ligne . " lignes ajoutées." );
 }
 fclose($fichier_csv);
mysql_close();
?>
 
 </body>
</html>
 
 
Et l'erreur retournée :
 
Notice: Undefined index: 1 in d:\stage\tests_temp\traitement_fichier_csv.php on line 26
 
Notice: Undefined index: 2 in d:\stage\tests_temp\traitement_fichier_csv.php on line 26
 
Notice: Undefined index: 3 in d:\stage\tests_temp\traitement_fichier_csv.php on line 26
 
Notice: Undefined index: 4 in d:\stage\tests_temp\traitement_fichier_csv.php on line 26
 
Notice: Undefined index: 5 in d:\stage\tests_temp\traitement_fichier_csv.php on line 26
 
(et ainsi de suite jusqu'à 16)

mood
Publicité
Posté le 19-07-2007 à 11:44:14  profilanswer
 

n°1588697
NewsletTux
&lt;Insérez ici votre vie /&gt;
Posté le 19-07-2007 à 11:50:11  profilanswer
 

avant de faire le mysql_query tu devrais faire un print_r($champs) (ou un var dump) pour voir si ton tableau est bien rempli des bonnes valeurs.

n°1588732
FlorentG
Unité de Masse
Posté le 19-07-2007 à 12:15:05  profilanswer
 

Et à la première apostrophe dans le fichier, tout pète :(


---------------
last.fmflickr
n°1588734
NewsletTux
&lt;Insérez ici votre vie /&gt;
Posté le 19-07-2007 à 12:21:38  profilanswer
 

bah oui justement ...

n°1588738
Moriar6
Posté le 19-07-2007 à 12:24:19  profilanswer
 

Ben apparement le tablea est bien repli, j'obtient Array([0] => "une valeur correcte" [1] "idem etc puiis ça recommence (vu qu 'il y a un while) et à la fin j'ai Array([0] => ).
 
Je pense avoir compris, à la derniere boucle du while il en prend en compte que l'indice 0.
 
Mais pourquoi ?

n°1588742
anapajari
s/travail/glanding on hfr/gs;
Posté le 19-07-2007 à 12:30:53  profilanswer
 

1- Y'a une fonction php (fgetscv) toute fait pour lire les csvs pourquoi réinventer la roue?
2- Tu peux directement loader un csv dans mysql via l'instruction "load data infile"

n°1588748
Moriar6
Posté le 19-07-2007 à 12:43:03  profilanswer
 

J'ai regardé le détail de la fonction fgetscv apparement elle ne fait rien de plus qu'une explode couplé avec une fgets donc je ne vois pas en quoi ça résoudrait mon probleme.
 
Par contre load data infile est une fonction mysql ?

n°1588804
FlorentG
Unité de Masse
Posté le 19-07-2007 à 14:28:09  profilanswer
 

Moriar6 a écrit :

J'ai regardé le détail de la fonction fgetscv apparement elle ne fait rien de plus qu'une explode couplé avec une fgets


Euh nan, elle est un peu plus complexe qu'un simple explode. cf. /ext/standard/file.c. C'est un beau monstre


---------------
last.fmflickr
n°1588847
rufo
Pas me confondre avec Lycos!
Posté le 19-07-2007 à 15:23:53  profilanswer
 

Moriar6 a écrit :

J'ai regardé le détail de la fonction fgetscv apparement elle ne fait rien de plus qu'une explode couplé avec une fgets donc je ne vois pas en quoi ça résoudrait mon probleme.
 
Par contre load data infile est une fonction mysql ?


 
Ca peut résoudre ton pb dans ce sens où elle a été bien codée et testée (au contraire de ta fonction) :o  
Par ex, avant de faire ton mysql_query, ça serait bien que tu vérifies que t'as le bon compte de champ : if (count($champs) == 16)
 

n°1588865
Moriar6
Posté le 19-07-2007 à 15:34:57  profilanswer
 

D'accord et bien je vais testé comme ça je vous remercie je ne connaissais pas cette fonction (en même temps il y en a tellement qu'on se fait souvent chier à recoder des truc existants).
 
Ce que je crain c'est que ça me genre le même probleme qu'avec mon code étant donné que les lignes que je traite comportent des ' du coup certaines lignes ne sont pas entrées.
 
J'ai résolu ce probleme de mon coté avec un str_replace mais j'ai toujours les notices en fin de code.

mood
Publicité
Posté le 19-07-2007 à 15:34:57  profilanswer
 

n°1588882
anapajari
s/travail/glanding on hfr/gs;
Posté le 19-07-2007 à 15:46:37  profilanswer
 

l'étape d'après c'est sprintf + mysql_real_escape ( pour ta requete)


Message édité par anapajari le 19-07-2007 à 15:46:45
n°1588919
Moriar6
Posté le 19-07-2007 à 16:23:33  profilanswer
 

Probleme résolu avec un simple if($champ[0] = NULL) break;
 
C'est résolu donc :) merci à tous !

n°1588927
rufo
Pas me confondre avec Lycos!
Posté le 19-07-2007 à 16:31:38  profilanswer
 

sauf que tu vérifies toujours pas si t'as bien le bon nb de champs avant de procéder à leur insertion dans ta bd...:/ T'as l'air malin s'il te manque un champ dans l'une des lignes...

n°1589106
Moriar6
Posté le 20-07-2007 à 08:28:15  profilanswer
 

Ben si il manque un champ ça mettra un champ vide (rien entre les ";" ).
Je vois pas où est le probleme.
 
Mais bon effectivement c'est mieux d'utiliser une fonction déjà codée histoire déviter toutes les erreur auxquelles je ne pense même pas.


Message édité par Moriar6 le 20-07-2007 à 08:34:19
n°1589181
rufo
Pas me confondre avec Lycos!
Posté le 20-07-2007 à 10:29:43  profilanswer
 

c'est pas ce que je voulais dire. Ton script part du principe que le fichier csv est bien formé (i.e., chaque ligne a bien le même nb de colonnes) : c'est dangereux!


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  [PHP]Probleme de tableau aprés un explode

 

Sujets relatifs
[PHP/MsSQL] Mise en forme de date[PHP/MySQL] Automatisation convertion xls -> csv pour update BDD (en p
Probleme repaint et passage de variables[PHP]Deplacement de curseur
problème de compilation[ASP.NET][Résolu] Problème envoi de mails
Connection BDD informix avec ODBC via PHP[VBA] Probleme de requete
[PHP] tcpdf / script bookmark et utf8[oracle PL/SQL] Problème de mis à jour
Plus de sujets relatifs à : [PHP]Probleme de tableau aprés un explode


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR