OVH Cloud OVH Cloud

souci avec fgetscsv

2 réponses
Avatar
antoine
bonjour,

j'essaye "en vain" de mettre à jour un BD mysql avec un fichier csv
en utilisant la function fgetcsv

quand je fais :

while ($data = fgetcsv ($fichier, 4096, ";")) {
$num = count ($data);
print "<p> $num champs dans la ligne $row: <br>\n";
$row++;
for ($c=0; $c < $num; $c++) {
print $data[$c] . "<br>\n";
}
}

toutes les lignes de mon fichier(508).csv s'affichent correctement
avec pour chacune les 10 champs du style :

10 champs dans la ligne 114:
114
ANGLAISE
Comédie
12
2001
France
2h03
Eric ROHMER
Jean-Claude DREYFUS, Lucy RUSSELL, Françoise LARTHOURET
Sous la Révolution Française, le cousin du roi de France, duc
d'Orléans vit une relation avec Grace Elliott, une aristocrate
écossaise. La jeune femme, fervente adepte du système monarchique, ne
parvient pas à concilier ses sentiments pour le duc avec les choix
politiques de celui-ci, qui a voté pour la mort du roi.

j'essaye de faire la même chose en modifiant la ligne print par un
insert dans la base, c'est à dire :

while ($data = fgetcsv ($fichier, 4096, ";")) {
$num = count ($data);
print "<p> $num champs dans la ligne $row: <br>\n";
$row++;
for ($c=0; $c < $num; $c++) {
$query = "insert into $table VALUES('$data[$c]')" ;
$ok = mysql_query($query);
}
}

les insertions se font bien jusqu'au numéro 508 sauf que je n'ai en
tout que 366 enregistrements car des lignes sont zappées.. et en
essayant de trouver une explication : pourquoi telle ou telle ligne
n'es tpas prise en compte je ne vois aucune raison (les contenus de
champs sont exactement semblables à celle prises en compte ..) et ces
mêmes lignes zappées apparaissent pourtant quand je fais le print -
elles sont donc bien vues et interprétées par fgetcsv..

je suis preneur de toutes idées .. refléxions .. cela fais longtemps
que je cherche

merci
antoine

2 réponses

Avatar
ftc
bonjour,

j'essaye "en vain" de mettre à jour un BD mysql avec un fichier csv
en utilisant la function fgetcsv

quand je fais :

while ($data = fgetcsv ($fichier, 4096, ";")) {
$num = count ($data);
print "<p> $num champs dans la ligne $row: <br>n";
$row++;
for ($c=0; $c < $num; $c++) {
print $data[$c] . "<br>n";
}
}
[SNIP]

les insertions se font bien jusqu'au numéro 508 sauf que je n'ai en
tout que 366 enregistrements car des lignes sont zappées.. et en
essayant de trouver une explication : pourquoi telle ou telle ligne
n'es tpas prise en compte je ne vois aucune raison (les contenus de
champs sont exactement semblables à celle prises en compte ..) et ces
mêmes lignes zappées apparaissent pourtant quand je fais le print -
elles sont donc bien vues et interprétées par fgetcsv..


As-tu vérifier qu'aucune de tes lignes ne faisaient pas plus de 4096
octets ?

Avatar
Jerome
antoine wrote:
les insertions se font bien jusqu'au numéro 508 sauf que je n'ai en
tout que 366 enregistrements car des lignes sont zappées.. et en
essayant de trouver une explication : pourquoi telle ou telle ligne
n'es tpas prise en compte je ne vois aucune raison (les contenus de
champs sont exactement semblables à celle prises en compte ..) et ces
mêmes lignes zappées apparaissent pourtant quand je fais le print -
elles sont donc bien vues et interprétées par fgetcsv..


Les lignes zappées ne contiennent-elles pas un ' ?
Dans ce cas, il faut le backslashé avant de faire la requète.

--
Jérôme