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

Langage PHP Discussion :

Importer un fichier csv


Sujet :

Langage PHP

  1. #1
    Membre confirmé
    Inscrit en
    Mars 2005
    Messages
    59
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 59
    Par défaut Importer un fichier csv
    Bonjour @ tous,

    l'import fonctionne bien même trop bien et c'est là le problème

    j'ai six ligne dans le fichier et il m'en génère des millier dans la DB

    peut-être un œil éclairé pourrait m'aiguiller sur la bétise que je fais

    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
    <?php
    $servername = "localhost";
    $username = "username";
    $password = "pass";
    $dbname = "mydb";
     
    if(isset($_FILES['FileContacts']))
    { 
         $dossier = 'upload/';
         $fichier = basename($_FILES['FileContacts']['name']);
         if(move_uploaded_file($_FILES['FileContacts']['tmp_name'], $dossier . $fichier)) //Si la fonction renvoie TRUE, c'est que ça a fonctionné...
         {
              echo 'Upload effectué avec succès !';
         }
         else //Sinon (la fonction renvoie FALSE).
         {
              echo 'Echec de l\'upload !';
         }
    }
     
    // Create connection
    $conn = mysqli_connect($servername, $username, $password, $dbname);
    // Check connection
    if (!$conn) {
        die("Connection failed: " . mysqli_connect_error());
    }
     
    $sql = "SELECT * FROM TblCities ORDER BY PostCode ASC";
    $result = mysqli_query($conn, $sql);
     
     
     
    if (($handle = fopen($dossier . $fichier, "r")) !== FALSE) {
        while (($data = fgetcsv($handle, 1000, ";")) !== FALSE) {
    		$num = count($data);
     
            for ($c=0; $c < $num; $c++) {
    			$Sex = $data[1];
    			$Title = $data[2];
    			$FirstName = $data[3];
    			$LastName = $data[4];		
    			$Address = $data[5];
    			$Number = $data[6];
    			$Box = $data[7];
    			$PostCode = $data[8];
    			$Cities = $data[9];
    			$Color="";
     
    			if (mysqli_num_rows($result) > 0) {
    				// output data of each row
    				while($row = mysqli_fetch_assoc($result)) {
    					if (($PostCode == $row['PostCode']) AND ($Cities == $row['Cities']))
    						$FkCities = $row['IdCities'];
    						$sqlinsert = "INSERT INTO TblPeople (FirstName, LastName, Sex, Title, Address, Number, Box, Color, Flag , FkCities) VALUES ('$FirstName', '$LastName', '$Sex', '$Title', '$Address', '$Number', '$Box', '$Color', 0,'$FkCities')";
    						if (mysqli_query($conn, $sqlinsert)) {
    							echo "New record created successfully";
    						} else {
    							echo "Error: " . $sql . "<br>" . mysqli_error($conn);
    						}
    					}
    				}
    			}	
    		}
    		fclose($handle);
    }
     
     
    mysqli_close($conn);
    ?>
    Merci

  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
    Par défaut
    Disons que tout est à peu pres faux.

    Si tu lis en français la logique de ton code, tu devrais trouver tout de suite ce qui ne vas pas.

    Ligne 34 : Pour chaque ligne du fichier
    Ligne 37 : Et pour chaque colonne de la ligne
    Ligne 51 : Pour chaque enregistrement dans TblCities
    Ligne 54 : Je fais une insertion

    A part le problème de logique, pour recuperer le FkCities, il ne faut evidemment pas boucler la table à chaque fois.
    Soit tu fais une sous-requête, Soit tu récupères une fois tous tes résultats en PHP.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre confirmé
    Inscrit en
    Mars 2005
    Messages
    59
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 59
    Par défaut
    cela fonctionne maintenant

    je ne sais pas si c'est la solution la plus propre mais elle a le mérite de fonctionner


    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
    <?php
    $servername = "localhost";
    $username = "username";
    $password = "pass";
    $dbname = "mydb";
     
    if(isset($_FILES['FileContacts']))
    { 
         $dossier = 'upload/';
         $fichier = basename($_FILES['FileContacts']['name']);
         if(move_uploaded_file($_FILES['FileContacts']['tmp_name'], $dossier . $fichier)) //Si la fonction renvoie TRUE, c'est que ça a fonctionné...
         {
              echo 'Upload effectué avec succès !';
         }
         else //Sinon (la fonction renvoie FALSE).
         {
              echo 'Echec de l\'upload !';
         }
    }
     
     
     
    if (($handle = fopen($dossier . $fichier, "r")) !== FALSE) {
    	 while (($data = fgetcsv($handle, 1000, ";")) !== FALSE) {
     
    		$Sex = $data[0];
    		$Title = $data[1];
    		$FirstName = $data[2];
    		$LastName = $data[3];		
    		$Address = $data[4];
    		$Number = $data[5];
    		$Box = $data[6];
    		$PostCode = $data[7];
    		$Cities = $data[8];
    		$Color="";
     
    		// Create connection
    		$conn = mysqli_connect($servername, $username, $password, $dbname);
    		// Check connection
    		if (!$conn) {
    			die("Connection failed: " . mysqli_connect_error());
    		}
     
    		$sql = "SELECT * FROM TblCities ORDER BY PostCode ASC";
    		$result = mysqli_query($conn, $sql);
    		$FkCities = "";
     
    		if (mysqli_num_rows($result) > 0) {
    			// output data of each row
    			while($row = mysqli_fetch_assoc($result)) {
    				if (($PostCode == $row['PostCode']) AND ($Cities == $row['Cities'])){
    					$FkCities = $row['IdCities'];
    					break;
    				}				
    			}
    		} else {
    			echo "0 results";
    		}
    		mysqli_close($conn);
     
    		// Create connection
    		$conn = mysqli_connect($servername, $username, $password, $dbname);
    		// Check connection
    		if (!$conn) {
    			die("Connection failed: " . mysqli_connect_error());
    		}
     
    		$sql="INSERT INTO TblPeople (FirstName, LastName, Sex, Title, Address, Number, Box, Color, Flag , FkCities) VALUES ('$FirstName', '$LastName', '$Sex', '$Title', '$Address', '$Number', '$Box', '$Color', 0,'$FkCities')";
     
    		if (mysqli_query($conn, $sql)) {
    			echo "New record created successfully";
    		} else {
    			echo "Error: " . $sql . "<br>" . mysqli_error($conn);
    		}
     
    		mysqli_close($conn);
     
    	}
     
    }
    ?>

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

Discussions similaires

  1. import de fichier csv
    Par dev7 dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 15/02/2006, 08h23
  2. Import de fichier CSV automatique dans Access
    Par Jmar dans le forum Access
    Réponses: 4
    Dernier message: 20/01/2006, 11h48
  3. Importer un fichier CSV dans un clientdataset ?
    Par mls dans le forum Bases de données
    Réponses: 7
    Dernier message: 15/04/2005, 13h35
  4. [Conseil] Import de fichier CSV vers MySQL
    Par ShinJava dans le forum JDBC
    Réponses: 6
    Dernier message: 15/03/2005, 20h14
  5. Importation de fichier CSV vers une base Interbase
    Par PrinceMaster77 dans le forum ASP
    Réponses: 3
    Dernier message: 15/03/2005, 16h18

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