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 :

script import CSV vers BDD


Sujet :

PHP & Base de données

  1. #1
    Membre du Club
    Homme Profil pro
    Apprenti Ingénieur
    Inscrit en
    Novembre 2011
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Apprenti Ingénieur
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Novembre 2011
    Messages : 104
    Points : 53
    Points
    53
    Par défaut script import CSV vers BDD
    Bonjour,
    J'ai créé un script permettant d'envoyer le contenu d'un fichier CSV dans ma base de données, mais celui ci s'avère extrêmement long dés lors que l'on veut envoyer un nombre conséquent de ligne (> 10000).

    Existe t-il un moyen d'optimiser mon script afin qu'il soit plus efficace / rapide ?

    Mon script d'envoi de fichier
    Code html : 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
     
    <form method="POST" action="import_csv.php" enctype="multipart/form-data"> 
     
     
     
     
    	<!-- On limite le fichier à 1Go -->
     
    	<input type="hidden" name="MAX_FILE_SIZE" value="1000000000">
    	<br/>
    	<div class="form-group">
    		 <center><p><h4>Variante de Selection OPUS : SOAP_PRSP  </h4></p></center><br/>
    		<center><p><h4>Coller le resultat dans une fichier Excel vierge en cellule A1 puis enregistrer ce fichier au format *.csv (séparateur point virgule)</h4></p></center>
    		<center><p><img src="img/screenexcel.jpg" alt="Excel"></p></center><br/>
    		<center><p><h4>Sélectionner fichier CSV : </h4></p></center>
    		<label class="col-md-4 control-label" for="csv"></label>
    		<div class="col-md-4">
    		<input id="csv" name="csv" class="input-file" type="file">
    		</div>
    	</div>
     
    	<br/><br/>
    	<center><input type="submit" name="envoyer" value="Envoyer le fichier"></center>
    	</form>

    le script de traitement :
    Code php : 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
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
     
    <?php
    	include("connect_bdd.php");
     
    	if(isset($_FILES['csv']))
    	{ 			
    		$dossier = 'upload/';
    		$fichier = basename($_FILES['csv']['name']);
     
    		$result = move_uploaded_file($_FILES['csv']['tmp_name'], $dossier . $fichier);
     
    		if($result) //Si la fonction renvoie TRUE, c'est que la a fonctionne
    		{	
     
    			echo "Upload du fichier effectué avec succès !<br>";
     
    			$sql = "UPDATE membres SET import_date = NOW() WHERE identifiant = '".$identifiant."'  ";
     
    			mysqli_query($mysqli,$sql); //execution de la requete SQL:
     
    				// VARIABLES DE BASE
     
    				$sql = "DELETE FROM test_fichier_se where cuid='".$identifiant."'"; // fonction permettant de supprimer une partie d'une table	
     
    				mysqli_query($mysqli,$sql);
     
    				if(mysqli_query($mysqli,$sql))
    					// SUCCES
    					{ echo "La table ".$table_a_vider." a bien été vidée !<br>"; }	 
    				else
    					// ECHEC
    					{echo "La table ".$table_a_vider." n'a pas été vidée de son contenu.<br>" ;}
    					// }
     
    		}
    				else //Sinon (la fonction renvoie FALSE).
    					{
    						echo "Echec de l'upload ! Choisir un ficher.CSV et selectionner un UPR ";
    					}
     
     
    				echo "Resultat Import SQL : <br>";
     
    				//Le chemin d'acces a ton fichier sur le serveur
    				$fichier = fopen("upload/".$_FILES['csv']['name'], "r");
    				$compteur1 =0;
     
    				//tant qu'on est pas a la fin du fichier :
     
    				while (!feof($fichier))
    				// while ($compteur1<10)
    				{
    					// On recupere toute la ligne
    					$uneLigne = addslashes(fgets($fichier));
    					//On met dans un tableau les differentes valeurs trouvés (ici séparées par un ';')
    					$tableauValeurs = explode(';', $uneLigne);
     
    					// On crée la requete pour inserer les donner
     
    					//Initialisation des variables
    					$statu_sa = $tableauValeurs[6];
    					$rdv = $tableauValeurs[9];
    						$fin_reelle = $tableauValeurs[10];			
    						$date_lanc = $tableauValeurs[11];
    							$date_sais_dem_opus = $tableauValeurs[12];
    							$date_cont = $tableauValeurs[13];
    								$numero_act = $tableauValeurs[4];
     
    					//Traitement colonne Statut syst. activité
     
    					if($statu_sa == '') {
     
    					$statu_sa = 'Vide';
    					}
     
    					//Traitement colonne Date de RDV
    					if($rdv == '') {
     
    					$rdv = 'Vide';
    					}
     
    					//Traitement colonne Date fin réelle
    					if($fin_reelle == '') {
     
    					$fin_reelle = 'Vide';
    					}
     
    					//Traitement colonne Date de lancement
    					if($date_lanc == '') {
     
    					$date_lanc = 'Vide';
    					}
     
    					//Traitement colonne Date saisie demande OPUS
    					if($date_sais_dem_opus == '') {
     
    					$date_sais_dem_opus = 'Vide';
    					}
     
    					//Traitement colonne Date contractuelle
    					if($date_cont == '') {
     
    					$date_cont = 'Vide';
    					}
     
    					$numero_act2 = '';
     
    					// Traitement colonne Statut
     
    					$statut_final = '';
     
    					$query="INSERT INTO test_fichier_se SET m_pres_tech='$tableauValeurs[0]' , ar_opus='$tableauValeurs[1]' ,rol ='$tableauValeurs[2]' ,ros ='$tableauValeurs[3]',num_act='$tableauValeurs[4]' , Lib_act='$tableauValeurs[5]' , statu_sa='$statu_sa' , statut_a='$tableauValeurs[7]' , com_act='$tableauValeurs[8]' , rdv='$rdv' , fin_reelle='$fin_reelle' , date_lanc='$date_lanc' , date_sais_dem_opus='$date_sais_dem_opus' , date_cont='$date_cont' , cp_exta='$tableauValeurs[14]' , com_exta='$tableauValeurs[14]' , activite='$numero_act2' , statut='$statut_final', cuid='".$identifiant."'";
     
    					$nblignes = mysqli_num_rows($query);
     
    						$compteur1 = $compteur1 + 1;						
     
    					$req=mysqli_query($mysqli,$query);
    					// la ligne est finie donc on passe a la ligne suivante (boucle)
    					$compteur1 = $compteur1 + 1;
    					// echo "$compteur1,"; 
    				}
     
     
    				//vérification et envoi d'une réponse à l'utilisateur
    				if ($req)
    				{
    					echo "<h2>Ajout dans la base de données effectué avec succès</h2>";
    					echo "".$compteur1." Lignes ajoutées";
     
    					//requete maj du flag_import
    					$sql_flag="UPDATE membres SET flag_import=1 WHERE identifiant = '".$identifiant."' ";
    					$sql_flag=mysqli_query($mysqli, $sql_flag);
     
     
     
    					?> </br></br> <?php
     
    				} else {
    					?> </br></br> <?php
    					echo "  Echec dans l'ajout à la base de données".mysqli_errno($query);
     
    					?> </br></br> <?php
    				}
    				fclose($fichier);
    	}
    ?>

    Merci d'avance de votre aide !
    Steven

  2. #2
    Membre émérite
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Points : 2 522
    Points
    2 522
    Par défaut
    Si tu travailles en mode annule et remplace et que tu as confiance dans le remplissage des données tu peux utiliser.

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <?php
    $bdd = new PDO('mysql:host=127.0.0.1; dbname=tests','root','', array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,PDO::MYSQL_ATTR_LOCAL_INFILE => true));
    $insert ="LOAD DATA LOCAL INFILE 'C:/Program Files (x86)/EasyPHP-Devserver-16.1/eds-www/tests/toto2.csv' INTO TABLE tab_toto 
     FIELDS TERMINATED BY ';' 
     LINES TERMINATED BY '\r\n'
     IGNORE 1 LINES";
    $prepared = $bdd->prepare($insert);
    $prepared->execute();
    print "Done";

    après il y a aussi la fonction fgetcsv.

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <?php
    $line = array();
    $row  = 0;
    if (($handle = fopen("test.csv", "r")) !== FALSE) {
        while (($data = fgetcsv($handle, 1000, ";")) !== FALSE) {
            // $data contient un tableau avec les différentes informations
        }
        fclose($handle);
    }
    Cela ne sert à rien d'optimiser quelque chose qui ne fonctionne pas.

    Mon site : www.emmella.fr

    Je recherche le manuel de l'Olivetti Logos 80B.

Discussions similaires

  1. [MySQL] Script d'importation csv vers une table (mysql) via un formulaire
    Par sarabaïte dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 17/03/2011, 06h31
  2. [MySQL] Script d'importation automatique de CSV vers BDD
    Par jeinny dans le forum PHP & Base de données
    Réponses: 11
    Dernier message: 11/06/2009, 15h50
  3. importation csv vers PostgreSQL access denied
    Par rc_29 dans le forum PostgreSQL
    Réponses: 8
    Dernier message: 09/10/2008, 11h13
  4. importe fichier vers bdd
    Par ulysse031 dans le forum SQL Procédural
    Réponses: 0
    Dernier message: 27/12/2007, 17h17
  5. Importation CSV vers base de données
    Par Brice Yao dans le forum Bases de données
    Réponses: 1
    Dernier message: 29/06/2005, 13h42

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