Importation CSV

cs_perles Messages postés 74 Date d'inscription samedi 7 juillet 2007 Statut Membre Dernière intervention 29 mars 2015 - 5 nov. 2009 à 14:17
cs_perles Messages postés 74 Date d'inscription samedi 7 juillet 2007 Statut Membre Dernière intervention 29 mars 2015 - 6 nov. 2009 à 18:54
Bonjour à tous,

J'ai un problème avec l'importation d'un fichier CSV.

connect.php contient les information de la connection au serveur

<?php
session_start();
$db = mysql_connect("localhost", "root", "") or die("Could not connect.");
if(!$db)
die("no db");
if(!mysql_select_db("disa",$db))
die("No database selected.");
?>

______________________________________________________________________

videtable.php permet de vider les tables

//Connexion à la base.
$host = "localhost";
$user = "root";
$password = "";
$bdd = "disa";
mysql_connect($host, $user,$password) or die("erreur de connexion au serveur");
mysql_select_db($bdd) or die("erreur de connexion a la base de donnees");

//Vide la table 'nom_de_la_table' CLIENT
$query = "TRUNCATE TABLE `client`";
$result = mysql_query($query);

//Vide la table 'nom_de_la_table' CLIENTCLASSE
$query = "TRUNCATE TABLE `clientclasse`";
$result = mysql_query($query);

//Vide la table 'nom_de_la_table' DOSSIERS
$query = "TRUNCATE TABLE `dossiers`";
$result = mysql_query($query);

//Vide la table 'nom_de_la_table' DOSSIERSEQTITULAIRE
$query = "TRUNCATE TABLE `dossierseqtitulaire`";
$result = mysql_query($query);

//Vide la table 'nom_de_la_table' PAYS
$query = "TRUNCATE TABLE `pays`";
$result = mysql_query($query);

//Vide la table 'nom_de_la_table' DOSSIERSEQTITULAIRE
$query = "TRUNCATE TABLE `dossierseqtitulaire`";
$result = mysql_query($query);

//Vide la table 'nom_de_la_table' TITULIARE
$query = "TRUNCATE TABLE `titulaire`";
$result = mysql_query($query);

?>

_____________________________________________________________________

import.php permet des charger les tables avec les données du fichier *.csv

<?php
//Exécution des sripts de session ainsi que de connexion à la base de données
include ("traitement/connect.php");
include ("traitement/videtables.php");

$filename="EXPORT_PAYS.csv";
$handle = fopen("EXPORT_PAYS.csv", "r");

while (($data = fgetcsv($handle, 1000, "|")) !== FALSE)
{

$import="INSERT into pays(CodeISO,Langue,LibellePays) values('$data[0]','$data[1]','$data[2]')";
$No = $data[2];
echo $No;
echo ":";
mysql_query($import) or die(mysql_error());
}
fclose($handle);
print "Import done";

?>

___________________________________________________________________

A l'exécution du programme import.php, j'obtiens le message d'erreur suivant

Iran (République islamique d'):You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '')' at line 1

J'ai effectivement une ligne dans le fichier EXPORT_PAYS.csv qui est comme suit :

IR|D|Iran (République islamique d')

Comment est-ce que je peux régler ce problème ?



Merci beaucoup de m'aider

Isabelle

6 réponses

kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
5 nov. 2009 à 16:57
Salut Isabelle,

Avant tout pense à :
- fournir uniquement le code concerné
- indiquer précisément à quelle ligne se trouve l'erreur
- indenter ton code
- utiliser la balise PHP de cette textbox pour le permettre la coloration syntaxique
... c'est bien plus agréable et lisible pour tout le monde
Pense également à répondre aux gens sur les threads que tu as toi même initiés

Pour en revenir à ton problème il semble que ce soit le ' qui soit en cause, regarde donc du côté de mysql_real_escape_string()

Ou utilise les fonctions natives de mysql :
http://dev.mysql.com/doc/refman/5.0/en/load-data.html


Cordialement,

Kohntark -
0
cs_perles Messages postés 74 Date d'inscription samedi 7 juillet 2007 Statut Membre Dernière intervention 29 mars 2015
5 nov. 2009 à 18:05
Bonjour,


Effectivement, j'ai mis tout le code, je vais être plus précise à l'avenir et mieux présenter mes demandes pour que ce soit plus lisible.

Le problème est bien le ' qui est en cause et que me donne des soucis.

Je vais immédiatement faire un tour à l'adresse :
http://dev.mysql.com/doc/refman/5.0/en/load-data.html

Merci beaucoup

Isabelle
0
cs_perles Messages postés 74 Date d'inscription samedi 7 juillet 2007 Statut Membre Dernière intervention 29 mars 2015
5 nov. 2009 à 22:46
Bonsoir,


J'ai chercher une solution tout l'après-midi vainement.
Merci beaucoup.
mysql_real_escape_string() a résolu mon problème avec le '(apostrophe)
Je n'ai plus de message d'erreur.
Il faut que je fasse encore quelques essais et vérification.



<?php
$handle = fopen("csv/EXPORT_PAYS.csv", "r");

while (($data = fgetcsv($handle, 10000, "|")) !== FALSE)
{
$data[2] = mysql_real_escape_string($data[2]);

$import ="INSERT into pays(CodeISO,Langue,LibellePays) values('$data[0]','$data[1]','$data[2]')";
mysql_query($import) or die(mysql_error());
}
fclose($handle);
print "Import terminé PAYS
";
?>


Bonne soirée et encore merci

Isabelle
0
cs_perles Messages postés 74 Date d'inscription samedi 7 juillet 2007 Statut Membre Dernière intervention 29 mars 2015
6 nov. 2009 à 11:17
Bonjour,


J'ai encore un souci avec l'importation de csv. J'ai mis mon fichier
EXPORT_PAYS.csv sur le disque C, répertoire c:\disa\IFSsite. Avec le wampserver tout se passe bien. J'ai mis le programme php sur le site internet et le chemin est introuvable. Je me doute que mon code ne peut pas fonctionner sur le site web mais comment faire pour reprendre les données dans ce cas.

<?php
$dir= "c:\\disa\\IFSsite\";
$dir.= "EXPORT_PAYS.csv";

$filename= null;
$filename= $dir;
$handle = fopen("$filename", "r");
?>

Merci de m'éclairer et bonne fin de matinée.

Isabelle
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
6 nov. 2009 à 18:17
Re,

Heu, simplement en indiquant le chemin correct du fichier EXPORT_PAYS.CSV (là où tu l'as enregistré sur le serveur) dans la variable $dir, non ?
Tu es la seule à connaitre ce chemin


Cordialement,


Kohntark -
0
cs_perles Messages postés 74 Date d'inscription samedi 7 juillet 2007 Statut Membre Dernière intervention 29 mars 2015
6 nov. 2009 à 18:54
Bonjour,


Effectivement, c'est la seule solution.
Mettre les fichiers sur le serveur web et effectuer l'importation des fichiers cvs. J'ai modifié mon code et fait quelques tests et tout fonctionne.
Comment mettre automatiquement les fichiers du c:\disa\IFSsite\ sur le serveur web. Actuellement j'utilise le filezilla et effectue manuellement le transit des fichiers sur le serveur web.
Je souhaiterais trouver un moyen de faire automatiquement le transit pendant la nuit tous les jours
. J'ai fait un tour sur le site pour voir si d'autres personnes avaient eu un problème identique.Mais pas vraiment...

Bonne soirée

Isabelle
0
Rejoignez-nous