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

EDI, CMS, Outils, Scripts et API PHP Discussion :

importation csv avec clés étrangères [phpMyAdmin]


Sujet :

EDI, CMS, Outils, Scripts et API PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2009
    Messages : 50
    Par défaut importation csv avec clés étrangères
    Bonjour à tous

    Je suis bloqué depuis un moment sur un problème, voici la situation.
    J'ai une base de données MySQL contenant 9 tables, j'ai besoin de remplacer l'intégralité du contenu de l'une de ses 9 tables avec le contenu d'un fichier csv.
    Cela fonctionne parfaitement lorsque la base de données est vide, mais lorsque des enregistrements sont effectués, l'importation ne fonctionne plus :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #1451 - Cannot delete or update a parent row: a foreign key constraint fails
    Cela, je le comprend, c'est logique. En cherchant, l'astuce consisterai à utiliser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SET foreign_key_checks = 0;
    En début de script sql, puis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SET foreign_key_checks = 1;
    en fin de script sql afin de désactiver le contrôle des clés étrangères. J'ai réussi avec un script sql généré depuis phpmyadmin mais pas avec un csv, et je suis obligé de passer par un csv, car c'est le seul moyen d'exporter les données depuis le programme qui les contient.

    Question : comment faire, dans phpmyadmin, pour désactiver le contrôle des clés étrangères avant importation via un csv ?

    J'ai cherché et trouvé qu'il était possible de passer par "CSV using LOAD DATA" dans phpmyadmin, ce qui reviendrait à utiliser du SQL et donc à pouvoir désactiver la vérification des clés étrangères. Je n'obtient pas d'erreur mais il ne se passe rien après un court instant de chargement.

    Merci pour votre aide !

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2009
    Messages : 50
    Par défaut
    Évidemment, cela fonctionne très bien si je converti le csv en script sql avec un convertisseur en ligne par exemple : http://www.convertcsv.com/csv-to-sql.htm

    C'est un peu dommage d'être obligé de faire ça systématiquement, il doit bien y avoir un moyen de le faire simplement avec phpmyadmin non ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2009
    Messages : 50
    Par défaut
    Bon alors vu qu'il n'y avait visiblement pas de solution, j'ai écrit une page php qui me permet de contourner le soucis. Je vous donne la manière dont j'ai procédé, des fois qu'une autre personne soit dans la même situation que moi.

    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 PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
            <link rel="stylesheet" href="./css/style.css" type="text/css" />
            <title>actualisation des anciens clients</title>
        </head>
     
        <body>
        <div class="contenu" id="haut">
    	<a title="retour à l'accueil" href="./index.php"><img src="./jpg/en-tete.jpg" /></a>
        <h3 class="titre_rubrique"><font color="#FFFFFF">Actualisation des anciens clients</font></h3>
     
    <!-- Partie formulaire =================================================== -->
        <table align="center">
     
     	<form method="POST" action="">
     
        <th class="titre_section">SECTION FICHIER</th>
        <tr>
        <td class="champ_obligatoire">Contenu CSV *</td>
        <td><textarea class="contenu_csv" name="contenu_csv"></textarea></td>
       	</tr>             
     
        <tr><!-- séparation de catégorie de formulaire -->
        <td>&nbsp;</td>
        </tr>
     
        <tr>
        <td>&nbsp;</td>
        </tr>
     
        <th class="titre_section">SECTION VALIDATION</th>
        <tr>
        <td><input class="bouton" type="submit" value="valider" /></td>
        <td><input class="bouton" type="reset" value="réinitialiser" /></td>
        </tr>        
     
        </table>
        </form>
     
    <!-- Partie gestion saisie =============================================== -->   
        <?php
    	if($_SERVER['REQUEST_METHOD'] == 'POST')//il y a eu validation du formulaire
    	{
    		if(!isset($_POST['contenu_csv']) || $_POST['contenu_csv'] == '' || $_POST['contenu_csv'] == ' ')//vérification de la saisie
    		{
    			echo '<br/>';
    			echo '<div class="erreur_id"><h3>La saisie est invalide.</h3></div>';
    			echo '<br/>';
    			echo '<div class="navigation"><a title="retour en haut de page" class="a_clair" href="./ajout_reparation_depuis_client_existant.php#haut">haut | </a><a title="retour sur la page d\'accueil" class="a_clair" href="./index.php">accueil </a></div>';
    			echo '</div>';
    			exit;
    		}//fin if saisie invalide
     
        	//connexion
        	include("./connexion_sql.php");
     
    		mysqli_query($bdd, "SET foreign_key_checks = 0");//désactivation vérification fk
     
    		mysqli_query($bdd, "TRUNCATE tclients_anciens");//vide tclients_anciens
     
    		$lignes = explode("\n", $_POST['contenu_csv']);//capture lignes
     
    		for ($i = 0; $i < count($lignes); $i++)
    		{
    			$champs = explode(";", $lignes[$i]);//capture champs ligne courante
     
    			mysqli_query($bdd, "INSERT INTO `tclients_anciens`(`id`, `titre`, `nom`, `prenom`, `complement`, `adresse`, `npa`, `localite`, `telephone1`, `telephone2`, `telephone3`, `fax`, `email`, `web`)
    								VALUES ('".mysqli_real_escape_string($bdd, $champs[0])."',
    					        	'".mysqli_real_escape_string($bdd, $champs[1])."',
    						    	'".mysqli_real_escape_string($bdd, $champs[2])."',
    						    	'".mysqli_real_escape_string($bdd, $champs[3])."',
    						    	'".mysqli_real_escape_string($bdd, $champs[4])."',
    						    	'".mysqli_real_escape_string($bdd, $champs[5])."',
    						    	'".mysqli_real_escape_string($bdd, $champs[6])."',
    						    	'".mysqli_real_escape_string($bdd, $champs[7])."',
    						    	'".mysqli_real_escape_string($bdd, $champs[8])."',
    						    	'".mysqli_real_escape_string($bdd, $champs[9])."',
    						    	'".mysqli_real_escape_string($bdd, $champs[10])."',
    						    	'".mysqli_real_escape_string($bdd, $champs[11])."',
    						    	'".mysqli_real_escape_string($bdd, $champs[12])."',
    						    	'".mysqli_real_escape_string($bdd, $champs[13])."')");
    		}//fin boucle for
     
    		mysqli_query($bdd, "SET foreign_key_checks = 1");//activation vérification fk
     
    		//vérification intégrité
    		$result = mysqli_query($bdd, "SELECT count(*) AS nombre
    								   	 FROM tclients_anciens");
     
    		$data = mysqli_fetch_assoc($result);
     
    		if($data['nombre'] == count($lignes))//le nombre d'anciens clients est-il le même que le nombre de lignes capturées dans le csv ?
    		{echo '<br/><div align="center" class="succes_ajout">L\'actualisation est un succès : <b>'.htmlentities($data['nombre']).'</b> enregistrements insérés sur <b>'.htmlentities(count($lignes)).'</b> fournis.<br/>Vérifier que les données sont intègres.</div>';}
    		else
    		{echo '<br/><div align="center" class="erreur_id">Le nombre d\'enregistrements insérés est incorrect. Insérés = '.htmlentities($data['nombre']).' Fournis = '.htmlentities(count($lignes)).'</div>';}
     
    	//déconnexion
    	mysqli_free_result($result);		
    	}//fin if validation formulaire
    	?>
     
    <!-- Partie navigation =================================================== -->
        <br/>
        <div class="navigation"><a title="retour en haut de page" class="a_clair" href="./actualisation_anciens_clients.php#haut">haut </a><a title="retour sur la page d'accueil" class="a_clair" href="./index.php">| accueil </a></div>
     
        </div>
        </body>
     
    </html>

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

Discussions similaires

  1. [phpMyAdmin] Importation CSV avec guillemets
    Par stefanelle dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 5
    Dernier message: 04/03/2009, 17h37
  2. import CSV avec encodage dans la foulée
    Par benoitXV dans le forum SQL Procédural
    Réponses: 5
    Dernier message: 10/12/2008, 13h07
  3. [Macro]Problème d'importation .CSV avec macro
    Par Eric Harvey dans le forum VBA Access
    Réponses: 8
    Dernier message: 12/04/2007, 17h04
  4. [CSV] importation CSV avec des guillemets
    Par trash_board dans le forum Langage
    Réponses: 3
    Dernier message: 12/09/2006, 14h08
  5. Aide pour MCD avec clés étrangères
    Par tiger33 dans le forum Langage SQL
    Réponses: 12
    Dernier message: 19/07/2006, 16h01

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