IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Exporter fichier CSV vers Table mysql avec php [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre régulier
    Inscrit en
    Avril 2010
    Messages
    257
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 257
    Points : 87
    Points
    87
    Par défaut Exporter fichier CSV vers Table mysql avec php
    Bonjour,

    J'ai besoin dans le cadre d'un travail exporter des données d'un fichier csv vers ma base mysql et j'aimerais passer par php afin de l'automatiser.

    Dans mes recherches je suis tombé sur un code php qui est sensé m'aider dans cette tâche :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    LOAD DATA LOCAL INFILE '$source' 
    			INTO TABLE 'prestation' 
    			FIELDS TERMINATED BY ';' 
    			LINES TERMINATED BY '\r\n'
    			IGNORE 1 LINES ;
    Cependant vu que c'est ma première fois d'avoir affaire à ce genre de traitement j'ai une erreur de syntaxe après l'avoir utilisé comme suit dans mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    <!DOCTYPE html>
    <?php 
    	require_once '../fonctions/connexion.php';
    ?>
    <html>
    	<head>
    		<title>Recherche Chèque</title>
    		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
            <meta http - equiv ="X-UA-Compatible " content ="IE= edge">
            <meta name =" viewport " content =" width =device -width , initial-scale =1.0">
    		<!--Inclusion Bootstrap CSS-->
    		<link rel="shortcut icon" href="../img/LogoScribe.jpg">
    		<link rel="stylesheet" type="text/css" href="../bootstrap/dist/css/bootstrap.min.css">
    		<link rel="stylesheet" type="text/css" href="../styles/style.css">
     
    	</head>
    	<body>
    	<?php 
    		if (isset($_POST) && !empty($_POST))
    		{
    			extract($_POST);
     
    			//Chargement fichier CSV
    			LOAD DATA LOCAL INFILE '$source' 
    			INTO TABLE 'prestation' 
    			FIELDS TERMINATED BY ';' 
    			LINES TERMINATED BY '\r\n'
    			IGNORE 1 LINES ;	
     
    		}
     
    	?>
    		<header class="header_container">
    			<?php require_once ('HautPage.php'); ?>
    		</header>
    		<div class="row">
    			<div class="col-sm-12" id="barre">Accueil > Chèques > Imprimer chèque</div>
    		</div>
    		<div class="row">	
    			<div class="col-sm-offset-10 col-sm-2"><h5><a href="Accueil.php" class="LienAcl">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Accueil<img src="../img/accueil.jpg" alt="icône papyrus" class="IconeAcl"></a></h5></div>
    		</div>
    		<div class="container">	
    			<div class="row">	
    				<div class="col-sm-10"><H4 class="titre"></H4></div>
    			</div>
    			<div class="row">
    				<div class="col-sm-offset-1 col-sm-10 col-sm-offset-1">
    					<form action="" method="post" class="form-horizontal col-sm-12"> 
    						<div class="form-group">
    							<label class="col-sm-3" style="color:#d22d45; font-size:20px;">Sélectionner fichier :</label>
    							<div class="col-sm-5 ">
    								<input type="file" name="source">
    							</div>
    							<div class="col-sm-2">
    									<input type="submit" value="Charger Fichier" class="btn btn-primary btn-block">
    								</div>
    							</div>	
    					</form>
    				</div>
    			</div>
    			<div class="separateur">&nbsp</div>
    			<div class="row">
    				<div class="col-sm-12">
    					<div class="panel panel-primary">
    						<table class="table table-striped table-condensed">
    							<div class="panel-heading">
    								<h3 class="panel-title">Résultats</h3>
    							</div>
    							<thead>
    								<tr>
    									<th>POLICE</th>
    									<th>ASSURE</th>
    									<th>NUMERO DOSSIER</th>
    									<th>MONTANT REGLEMENT</th>
    									<th>IMPRIMER CHEQUE</th>
    								</tr>
    							</thead>
    							<tbody>
    								<?php
    									if (isset($rchbq) && !empty($rchbq))
    									{
    										$sql = "SELECT Police, Assure, NumDoss, MontRgl FROM prestation";
    						                $req = $DB->query($sql);
    						                while ($d = $req->fetch())
    						                {
    					            ?> 
    								<tr>
    									<td><?php echo $d['Police']; ?></td>
    									<td><?php echo $d['Assure']; ?></td>
    									<td><?php echo $d['NumDoss']; ?></td>
    									<td><?php echo $d['MontRgl']; ?></td>
    									<td><a href="AjustChq.php?code=<?php echo $d['Code_banque']; ?>" class="tablien" target="_blanc"><img src="../img/print.png" class="tabimg">Impprimer Chèque</a></td>
    								</tr>
    								<?php
    										}
    									}
    								?>
    							</tbody>
    						</table>			
    					</div>
    				</div>
    			</div>	
    			<div class="separateur_big">&nbsp</div>
    			<footer class="footer_container">
    				<?php //include ('PiedPage.php'); ?>
    			</footer>
     
    		</div>
    	<script src="../js/jquery-1.8.2.js"></script>
    	<script src="../bootstrap/dist/js/bootstrap.min.js"></script>
    	</body>
    </html>

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Ce n'est pas du code PHP c'est une requête SQL.
    On n'utilise pas extract() sur $_POST, c'est une très mauvaise pratique.
    Les informations sur le fichier uploadé sont dans $_FILES, pas dans $_POST

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $sql = "LOAD DATA LOCAL INFILE '" . $_FILES['source']['tmp_name'] . "'
    			INTO TABLE 'prestation' 
    			FIELDS TERMINATED BY ';' 
    			LINES TERMINATED BY '\r\n'
    			IGNORE 1 LINES;";
    Pour l'execution de la requête, je te laisse faire car je ne sais pas comment est ta connexion.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre régulier
    Inscrit en
    Avril 2010
    Messages
    257
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 257
    Points : 87
    Points
    87
    Par défaut
    Ok, autant pour moi.

    cependant ou pourrais je avoir un exemple de son utilisation vu que je n'est plus d'erreur mais plutôt aucun enregistrement dans ma base Mysql avec ce code ci-dessous :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    if (isset($_FILES['source']) && $_FILES['source']['error'] == 0)
    		{
    			$fichier = $_FILES['source']['tmp_name'];
     
    			//Chargement fichier CSV
    			$sql = "LOAD DATA LOCAL INFILE '".$fichier."'
    					INTO TABLE 'prestation' 
    					FIELDS TERMINATED BY ';' 
    					LINES TERMINATED BY '\r\n'
    					IGNORE 1 LINES";
    			$req = $DB->query($sql);
     
    		}

  4. #4
    Membre régulier
    Inscrit en
    Avril 2010
    Messages
    257
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 257
    Points : 87
    Points
    87
    Par défaut
    Après plusieurs recherche j'ai avec ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    if (isset($_FILES['source']) && $_FILES['source']['error'] == 0)
    		{
    			//$fichier = "C:\Users\Ulrich DIE\Desktop\Doc SCRIB\/".$_FILES['source']['tmp_name'];
    			$fichier = $_FILES['source']['tmp_name'];
    			//Chargement fichier CSV
    			$sql = "LOAD DATA LOCAL INFILE '$fichier'
    					INTO TABLE prestation 
    					FIELDS TERMINATED BY ',' 
    					ENCLOSED BY ''
    					LINES TERMINATED BY '\r\n'
    					IGNORE 1 LINES";
    			$DB->exec($sql);
     
    		}
    cette erreur : Warning: PDO::exec() [pdo.exec]: LOAD DATA LOCAL INFILE forbidden in C:\wamp\www\Scribe\sources\ImprimChqCsv.php on line 30

  5. #5
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    PDO n'accepte la commande LOAD INFILE que si l'option MYSQL_ATTR_LOCAL_INFILE a été activée au niveau de la connexion :
    PDO::MYSQL_ATTR_LOCAL_INFILE
    Active LOAD LOCAL INFILE.
    Notez que cette option n'a d'effet que si utilisée dans le tableau d'options driver_options du constructeur.
    http://fr2.php.net/manual/fr/ref.pdo...r-local-infile
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  6. #6
    Membre régulier
    Inscrit en
    Avril 2010
    Messages
    257
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 257
    Points : 87
    Points
    87
    Par défaut
    Dans ma fonction de connexion j'ai déjà cette option mise à 1 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    <?php
    	try {
    		$dns = 'mysql:host=localhost; dbname=scribebdd';
    		$user = 'root';
    		$pwd = '';
     
    		//option de connexion
    		$option = array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8",
    						PDO::MYSQL_ATTR_LOCAL_INFILE => 1,
    						);
     
    		//initialisation de la connexion 
    		$DB = new PDO ($dns,$user,$pwd,$option);
    		$DB->setAttribute (PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
     
    		}
    	catch (PDOExeption $e)
    		{
    			echo "ECHEC DE LA CONNECTION :" .$e->getMessage();
    			die();
    		}	
    ?>

  7. #7
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Si tu essaies avec phpmyadmin ça fonctionne ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  8. #8
    Membre régulier
    Inscrit en
    Avril 2010
    Messages
    257
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 257
    Points : 87
    Points
    87
    Par défaut
    oui avec phpmyadmin sa passe correctement, même si mes dates sont toutes (0000-00-00).

  9. #9
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Je voulais dire la requête LOAD dans phpmyadmin, qu'on parle bien de la même chose.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  10. #10
    Membre régulier
    Inscrit en
    Avril 2010
    Messages
    257
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 257
    Points : 87
    Points
    87
    Par défaut
    Oui la requête load s'exécute correctement dans phpmyadmin !

  11. #11
    Membre régulier
    Inscrit en
    Avril 2010
    Messages
    257
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 257
    Points : 87
    Points
    87
    Par défaut
    cependant avec cette requête ci tout passe bien :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $sql = "LOAD DATA INFILE 'C:/Users/Ulrich DIE/Desktop/Doc SCRIB/rg151215.csv'
    				INTO TABLE prestation 
    				FIELDS TERMINATED BY ';' 
    				ENCLOSED BY ''
    				LINES TERMINATED BY '\r\n'
    				IGNORE 1 LINES";
    		$req = $DB->prepare($sql);
    		$req->execute();
    Alors que mon problème est que le fichier passé en paramètre soit dynanique.
    Lorsque j'essais de partir d'utiliser $_FILES['source'] ou $_FILES['source']['tmp_name'] comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    LOAD DATA INFILE '".$_FILES['source']['tmp_name']."'
    					INTO TABLE prestation 
    					FIELDS TERMINATED BY ';' 
    					ENCLOSED BY ''
    					LINES TERMINATED BY '\r\n'
    					IGNORE 1 LINES";
    			$req = $DB->prepare($sql);
    			$req->execute();
    j'ai cette erreur : Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY000]: General error: 29 File 'c:\wamp\bin\mysql\mysql5.5.16\data\wamp mpphp9FB9.tmp' not found (Errcode: 22)' in C:\wamp\www\Scribe\sources\ImprimChqCsv.php on line 39

    qui correspond a cette ligne :

  12. #12
    Membre régulier
    Inscrit en
    Avril 2010
    Messages
    257
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 257
    Points : 87
    Points
    87
    Par défaut
    apparement c'est plus complexe avec "load data" donc je suis passé par la méthode classique, merci de votre aide .

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] Créer un table Mysql avec php
    Par xunil2003 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 06/02/2014, 14h05
  2. [MySQL] Mise à jour d'une table mysql avec php
    Par glodybiss4 dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 09/01/2012, 10h41
  3. [MySQL] Mettre à jour table MySQL avec PHP
    Par beegees dans le forum PHP & Base de données
    Réponses: 16
    Dernier message: 16/10/2008, 13h40
  4. [MySQL] Fichier texte vers table MySQL
    Par ecdxml dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 12/10/2007, 10h19
  5. [CSV] exporter des données d'un fichier CSV vers BD Mysql
    Par samsso2006 dans le forum Langage
    Réponses: 2
    Dernier message: 04/05/2007, 22h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo