Import fichier csv Erreur de syntaxe prsè de ...à la ligne 1

hx.jonathan
WRInaute discret
WRInaute discret
 
Messages: 162
Inscription: 2 Mar 2005

Import fichier csv Erreur de syntaxe prsè de ...à la ligne 1

Message le Jeu Nov 06, 2008 20:29

Salut tout le monde,

Je tente désepérément d'importer le contenu de mon fichier csv dans ma BDD. Je parviens à lire le fichier, à l'uploader sur mon serveur mais lorsqu'il s'agit d'enregistrer les infos du fichier csv, j'ai cette erreur :

Erreur de syntaxe près de 'Excursion,,Ne pas oublier d'apporter son maillot de bain
)' à la ligne 1



Remarque : j'utilise le "; " comme séparateur. Voic le code de ma page :

Code: Tout sélectionner
<?php

echo '<p>';
include_once 'fonctions.php';
connexion_DB('amisphere_main');

if(isset($_FILES['fichier']))
      {
$dest_dossier = 'Zones_Admin/programme/';
   
$fichier_source = basename($_FILES['fichier']['name']);// récupère le contenu de la variable fichier du formulaire

move_uploaded_file($_FILES["fichier"]["tmp_name"],$dest_dossier.$fichier_source);

echo 'Le nouveau programme ' .$_FILES['fichier']['name']. ' a été importé avec succès';
echo '<p><span class="gras">Redirection automatique...</span></p>';
}
else {

echo 'Impossible de charger le nouveau programme';

}

echo '</p>';

   
$myFile = fopen("Zones_Admin/programme/".$_FILES['fichier']['name'],'r');//on ouvre le fichier uplodé !!
   $i =0;
       while (!feof($myFile)){
             $i++;
             $myLine=fgets($myFile);//met la ligne dans la variable "$myline"
            $tab = explode(";", $myLine);
   
            if ($i > 1 && strlen($tab[0]) >0){ //plus grand que 1 et si la taille de la chaine de caractere est >0
              $type_activ=$tab[0];
              $date_debut=$tab[4];
           $date_fin=$tab[8];
           $prix=$tab[9];
           $heure=$tab[10];
           $resume=$tab[11];
           $details=$tab[12];
           $autres=$tab[13];
          
              /* echo  $type_activ.' | ';
           echo  $date_debut.' | ';
           echo  $date_fin.' | ';
           echo  $prix.' | ';
           echo  $heure.' | ';
           echo  $resume.' | ';
           echo  $details.' | ';
           echo  $autres.'<br/>'; */
          
          
           //INSERTION DANS BDD
               $sql="INSERT INTO test(type_activ,date,date_fin,prix,heure,resume,details,autre) VALUES($type_activ,$date_debut,$date_fin,$prix,$heure,$resume,$details,$autres)";
mysql_query($sql) or die(mysql_error());

             }
          }
       
unlink("Zones_Admin/programme/".$_FILES['fichier']['name']);//on supprimme le fichier importé du répertoire du serveur.
       
fclose($myFile);


?>


Quelqu'un aurait-il une solution svp ?

John


KOogar
WRInaute accro
WRInaute accro
 
Messages: 3974
Inscription: 16 Nov 2004

Message le Jeu Nov 06, 2008 22:32

au lieu d'utiliser fgets sert toi de fgetcsv
http://www.php.net/fgetcsv

hx.jonathan
WRInaute discret
WRInaute discret
 
Messages: 162
Inscription: 2 Mar 2005

Message le Jeu Nov 06, 2008 23:48

Ben j'ai cherché des sources avec fgetcsv. Je parviens à afficher le contenu de mon fichier csv mais il faudrait que je puisse stocker chaque colonne dans une variables séparéé histoire que je puisse enregistrer les champs que je veux dans la BDD.

Une idée ??

Merci


KOogar
WRInaute accro
WRInaute accro
 
Messages: 3974
Inscription: 16 Nov 2004

Message le Ven Nov 07, 2008 1:38

Tu dois traiter chaque ligne séparement. Ton fichier cvs en sortie doit avoir ce format

aaaaaaaa;bbbbbbbbb;cccccccccc
2222222;33333333;44444444

1° Passes chaque ligne dans une variable que tu vas traiter simplement avec la fonction explode()

Code: Tout sélectionner
$chaine = 'aaaaaaaa;bbbbbbbbb;cccccccccc';
$champ = explode(";", $chaine);



2° Le resultat se trouve dans le tableau "champ", a chaque traitement de ligne tu inserts un nouvelle enregistrement dans ta table

Code: Tout sélectionner
INSERT INTO tatable (champ1,champ2,champ3) VALUE($champ[0],$champ[1],$champ[2]);


UsagiYojimbo
WRInaute accro
WRInaute accro
 
Messages: 8575
Inscription: 23 Nov 2005

Message le Ven Nov 07, 2008 8:54

Ce serait pas un bête problème de quote ? Il faut penser à "protéger" les chaînes avant insertion dans le base de données.


Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités