Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & MySQL
PHP & MySQL Forum d'entraide sur les fonctions MySQL avec PHP. Avant de poster -> FAQ MySQL, Cours MySQL et Sources MySQL. Pour les questions concernant le moteur MySQL plutôt que les fonctions PHP, merci d'utiliser le forum MySQL.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 31/08/2011, 09h08   #1
Nouveau Membre du Club
 
Femme
Inscription : janvier 2010
Messages : 78
Détails du profil
Informations personnelles :
Sexe : Femme

Informations forums :
Inscription : janvier 2010
Messages : 78
Points : 25
Points : 25
Par défaut pb LOAD DATA INFILE

Via php, j'ai uploadé un fichier.csv.
Je voudrais importer ce fichier dans une table de ma SGBD
La requête SQL plante.
J'espère que quelqu'un pourra éclairer ma lanterne

Le message qui s'affiche est le suivant :
Upload effectué avec succès sur la racine C:/Users/Public/applications/wamp/www/uploads/BZH-fbl5n.csvProblème de requête1 - upload2.phpL'intégralité de mon code

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
<?php require_once('connexion.php'); 
 
 
 
ini_set('upload_max_filesize','8M');
$dossier=$_SERVER['DOCUMENT_ROOT'].'uploads/';
//$fichier = basename($_FILES['fFichier']['name']);
$fichier2=$_POST['nomfic'];
$plaque=$_POST['plaque'];
 
$fichier=basename($_FILES['fFichier']['name']);
$agent=$_POST['agent'];
$taille_maxi=800000;
$taille=$_FILES['fFichier']['size']/1000;
 
$extensions=array('.csv');
$extension=strrchr($_FILES['fFichier']['name'],'.'); 
$datejour=date('Y-m-d');
 
 
//Début des vérifications de sécurité...
if(!in_array($extension, $extensions)) //Si l'extension n'est pas dans le tableau
{
     $erreur = 'Vous devez uploader un fichier de type csv...';
	 echo $erreur;
}
if($taille>$taille_maxi)
{
     $erreur = 'Le fichier est trop gros...';
	 echo $erreur;
}
if(!isset($erreur)) //S'il n'y a pas d'erreur, on upload
{
     //On formate le nom du fichier ici...
     $fichier = strtr($fichier, 
          'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ', 
          'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
     $fichier = preg_replace('/([^.a-z0-9]+)/i', '-', $fichier);
	 $nouveau_nom = $fichier2.'.'.pathinfo($_FILES['fFichier']['name'], PATHINFO_EXTENSION);
     if(move_uploaded_file($_FILES['fFichier']['tmp_name'], $dossier.$nouveau_nom)==true) //Si la fonction renvoie TRUE, c'est que ça a fonctionné...
     {
          echo 'Upload effectué avec succès sur la racine '.$dossier.$nouveau_nom;
		  $requete="INSERT INTO fichiers (fichiers_nom,fichiers_date,fichiers_tailleKO,fichiers_user,fichiers_plaque)";
		  $requete.=" VALUES ('$nouveau_nom','$datejour','$taille','$agent','$plaque')";
 
		  $resultat=mysql_query($requete) or die('Problème de requête - upload2.php');
 
		  $requete1="LOAD DATA INFILE $nouveau_nom ";
		  $requete1.="INTO TABLE fbl5n_bzh ";
		  $requete1.="FIELDS TERMINATED BY ';' ESCAPED BY '\\' ";
		  $requete1.="LINES STARTING BY '' TERMINATED BY '' (5n_compte,5n_ref,5n_ste,5n_exercice,5n_DC,5n_type,5n_affect,5n_cc,5n_cptg,5n_texte,5n_aaaamm,5n_cg,5n_date,5n_montant)";
		  $resultat1=mysql_query($requete1) or die('Problème de requête1 - upload2.php');
	 }
     else //Sinon (la fonction renvoie FALSE).
     {
          echo 'Echec de l\'upload !';
     }
}
 
?>
<form method="post" action="<?php echo "accueil.php";?>"/>
<input type="submit" class="boutonM" name="Quitter" value="Quitter"/>
</form>
naroco est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/08/2011, 15h36   #2
Nouveau Membre du Club
 
Femme
Inscription : janvier 2010
Messages : 78
Détails du profil
Informations personnelles :
Sexe : Femme

Informations forums :
Inscription : janvier 2010
Messages : 78
Points : 25
Points : 25
Par défaut ouh ouh y'a quelqu'un

habituellement, je trouve ce site assez réactif mais là, je reste dans la "mouise".
j'ai quand même un peu évolué dans mon code mais cela ne fonctionne toujours pas.

A l'aide

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
if(!isset($erreur)) //S'il n'y a pas d'erreur, on upload
{
     //On formate le nom du fichier ici...
     $fichier = strtr($fichier, 
          'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ', 
          'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
     $fichier = preg_replace('/([^.a-z0-9]+)/i', '-', $fichier);
	 $nouveau_nom = $fichier2.'.'.pathinfo($_FILES['fFichier']['name'], PATHINFO_EXTENSION);
     if(move_uploaded_file($_FILES['fFichier']['tmp_name'], $dossier.$nouveau_nom)==true) //Si la fonction renvoie TRUE, c'est que ça a fonctionné...
     {
		  $chemincomplet=(__FILE__);	
		  $repertoire=(dirname(__FILE__))."\uploads";
		  $cheminupload=$_SERVER['DOCUMENT_ROOT'].$nouveau_nom;
		  echo $cheminupload;?></br> <?php
		  echo $chemincomplet;?></br> <?php
		  echo $repertoire;?></br> <?php
		  echo(dirname(__FILE__).$nouveau_nom);?></br> <?php
          echo 'Upload effectué avec succès sur la racine '.$dossier.$nouveau_nom;
		  $requete="INSERT INTO fichiers (fichiers_nom,fichiers_date,fichiers_tailleKO,fichiers_user,fichiers_plaque)";
		  $requete.=" VALUES ('$nouveau_nom','$datejour','$taille','$agent','$plaque')";
 
		  $resultat=mysql_query($requete) or die('Problème de requête - upload2.php');
		  $requete1='LOAD DATA INFILE `$cheminupload` INTO TABLE fbl5n_bzh FIELDS TERMINATED BY `;` OPTIONALLY ENCLOSED BY `"`(5n_compte,5n_ref,5n_ste,5n_exercice,5n_DC,5n_type,5n_affect,5n_cc,5n_cptg,5n_texte,5n_aaaamm,5n_cg,5n_date,5n_montant)';
		  $resultat1=mysql_query($requete1) or die('Problème de requête1 - upload2.php');
 
 
 
	 }
     else //Sinon (la fonction renvoie FALSE).
     {
          echo 'Echec de l\'upload !';
     }
}
Citation:
C:/Users/Public/applications/wamp/www/BZH-fbl5n.csv
C:\Users\Public\applications\wamp\www\Impayes\upload2.php
C:\Users\Public\applications\wamp\www\Impayes\uploads
C:\Users\Public\applications\wamp\www\ImpayesBZH-fbl5n.csv
Upload effectué avec succès sur la racine C:/Users/Public/applications/wamp/www/BZH-fbl5n.csvProblème de requête1 - upload2.php
Problème de / ou \ ????
naroco est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/08/2011, 15h58   #3
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 029
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 11 029
Points : 18 327
Points : 18 327
Envoyer un message via MSN à CinePhil
Pourquoi as-tu mis les valeurs de la requête entre apostrophes inversées ?

Prends la bonne habitude d'écrire ta requête entre guillemets dans ton code PHP car les valeurs textuelles doivent être entre apostrophes en SQL.
Et prends aussi la bonne habitude d'écrire ta requête sur plusieurs lignes avec indentation afin qu'elle soit plus facile à lire et à déboguer.
Code :
1
2
3
4
5
6
7
$requete1 = "
    LOAD DATA INFILE '$cheminupload' 
    INTO TABLE fbl5n_bzh 
    FIELDS TERMINATED BY ';' 
    OPTIONALLY ENCLOSED BY '"'
    (5n_compte, 5n_ref, 5n_ste, 5n_exercice, 5n_DC, 5n_type, 5n_affect, 5n_cc, 5n_cptg, 5n_texte, 5n_aaaamm, 5n_cg, 5n_date, 5n_montant)
";
Quand une requête donne une erreur, fait un echo de la requête avant envoi au serveur pour vérifier sa syntaxe et lance la dans phpMyAdmin pour voir l'erreur. Ou mieux : affiche l'erreur en clair dans le déroulement de ton programme !
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/09/2011, 10h34   #4
Nouveau Membre du Club
 
Femme
Inscription : janvier 2010
Messages : 78
Détails du profil
Informations personnelles :
Sexe : Femme

Informations forums :
Inscription : janvier 2010
Messages : 78
Points : 25
Points : 25
merci pour ta réponse et tes conseils
naroco est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 21h32.


 
 
 
 
Partenaires

Hébergement Web