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 :

Créer/Modifier une Table de la BD suite aux champs d'un fichier CSV [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Cyberdocumentaliste
    Inscrit en
    Janvier 2014
    Messages
    160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Cyberdocumentaliste
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2014
    Messages : 160
    Par défaut Créer/Modifier une Table de la BD suite aux champs d'un fichier CSV
    Bonjour à tous,

    L'idée :
    Importer un fihcier CSV et utiliser les noms des colonnes comme étant noms de champs pour la table de la BD.
    Dans le cas ou la table existe déjà; déclencher une comparaison entre les colonnes CSV et les champs de la table existé.

    Prob 1 :
    Certains noms des colonnes du fichier csv contiennent des espaces ou des points, tels que (Type intrv ou Com. litig )alors que cela signifie qu'on aura des problémes lors de la création de la table.

    Pour le problème des espaces j'ai utilisé la fonction preg_replace comme vous pouvez la voir sur le code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $first1 = preg_replace( '/([^.a-z0-9]+)/i','_',$liste1[0]);
    Pour le problème des points j'ai pensé à la solution suivante: utiliser la fonction str_replace.

    Mais je voudrais vous demander est-ce qu'il existe d'autre méthode pour éviter tout cela et bien d'autres problèmes (par exemple, si le champ est appelé référence le preg_replace ca la transformer en r_f_rence) ??

    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
    if(isset($_POST['valideImport']))
    	{
     
    			if (isset($_FILES['fichier']['tmp_name']) && is_uploaded_file($_FILES['fichier']['tmp_name'])) {
    			$fp = fopen($_FILES['fichier']['tmp_name'], "r");
    			$nbr_fic = 0;
     
    		 }
    		 // récupérer la premiére ligne
    		 if( ($ligne[1] = trim(fgets($fp,4096))) !== '' )
    		 {
     
    			 $liste1 = explode( ";",$ligne[1]);
    			 $first1 = preg_replace( '/([^.a-z0-9]+)/i','_',$liste1[0]);
    		     $last1  = preg_replace( '/([^.a-z0-9]+)/i','_',$liste1[1]);
    		     $mail1  = preg_replace( '/([^.a-z0-9]+)/i','_',$liste1[2]); 
     
    		     echo $first1."".$last1."".$mail1."<br>";
     
     
    				$sql = "CREATE TABLE exportpn (
    				id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    				".$first1." VARCHAR(30) NOT NULL,
    				".$last1." VARCHAR(30) NOT NULL,
    				".$mail1." VARCHAR(50))";
     
    				if ($conn->query($sql) === TRUE) {
    					echo "Table exportpn OK";
    				} else {
    					echo $conn->error;
    				}
    		 }
    Prob2:
    Le problème c'est que les colonnes csv sont variables ( possibilité d'apparence d'une nouvelle colonne )

    J'ai commencé à traiter le prob par l'idée d'extraire les champs de base de données et les comparer avec les colonnes csv, mais je sais pas comment l'exploiter

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $show=$conn->query("SELECT `COLUMN_NAME` FROM `INFORMATION_SCHEMA`.`COLUMNS` WHERE `TABLE_NAME`='exportpn'");
     
      	  	while($result = mysqli_fetch_array($show))
    		{    
     
    		          echo $result[0]."<br>";
     
    		}

  2. #2
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 681
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 681
    Par défaut
    Citation Envoyé par elkhazak Voir le message
    Prob 1 :
    Certains noms des colonnes du fichier csv contiennent des espaces ou des points, tels que (Type intrv ou Com. litig )alors que cela signifie qu'on aura des problémes lors de la création de la table.

    Pour le problème des espaces j'ai utilisé la fonction preg_replace comme vous pouvez la voir sur le code
    en utilisant le caractère de "protection" vous pouvez utiliser n'importe quel caractère dans les noms des colonnes mais il reste quand même des exceptions comme par exemple que le nom de doit pas se terminer par une espace ou ne doit pas contenir uniquement des chiffres :
    https://dev.mysql.com/doc/refman/5.5...entifiers.html


    Citation Envoyé par elkhazak Voir le message
    Prob2:
    Le problème c'est que les colonnes csv sont variables ( possibilité d'apparence d'une nouvelle colonne )

    J'ai commencé à traiter le prob par l'idée d'extraire les champs de base de données et les comparer avec les colonnes csv, mais je sais pas comment l'exploiter
    avec cela vous avez déjà la liste des colonnes de la table existante. ensuite vous créez une liste des colonnes du fichier CSV et vous comparez les 2 listes.

    en cas de changement, est ce que le contenu de la table doit être effacé ? dans ce cas vous pouvez par exemple commencer par détruire complètement la table et la récréer à partir du fichier CSV

  3. #3
    Membre confirmé
    Homme Profil pro
    Cyberdocumentaliste
    Inscrit en
    Janvier 2014
    Messages
    160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Cyberdocumentaliste
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2014
    Messages : 160
    Par défaut
    Citation Envoyé par mathieu Voir le message
    en utilisant le caractère de "protection" vous pouvez utiliser n'importe quel caractère dans les noms des colonnes mais il reste quand même des exceptions comme par exemple que le nom de doit pas se terminer par une espace ou ne doit pas contenir uniquement des chiffres :
    https://dev.mysql.com/doc/refman/5.5...entifiers.html

    avec cela vous avez déjà la liste des colonnes de la table existante. ensuite vous créez une liste des colonnes du fichier CSV et vous comparez les 2 listes.

    en cas de changement, est ce que le contenu de la table doit être effacé ? dans ce cas vous pouvez par exemple commencer par détruire complètement la table et la récréer à partir du fichier CSV
    C'est bon pour le premier problème, j'ai utulisé ` dans l'insertion des champs. Mercii

    Le problème c'est comment appliquer ce que tu viens de dire

    Comment créer ces listes là ? comment les comparer ?

    Le changement sera toujours par une addition des colonnes et non pas une suppression.

  4. #4
    Membre Expert
    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
    Par défaut
    Une chose que je ne comprends pas. Mettons que lundi tu as intégré un fichier csv avec les champs a, b, c, d et e. Mardi tu as de nouveau intégré un fichier csv avec la même structure dans la même table. Aujourd'hui tu reçois un fichier avec les champs a, b, c, e et f. Que fais-tu des données intégrées lundi et mardi ?

  5. #5
    Membre confirmé
    Homme Profil pro
    Cyberdocumentaliste
    Inscrit en
    Janvier 2014
    Messages
    160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Cyberdocumentaliste
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2014
    Messages : 160
    Par défaut
    Citation Envoyé par badaze Voir le message
    Une chose que je ne comprends pas. Mettons que lundi tu as intégré un fichier csv avec les champs a, b, c, d et e. Mardi tu as de nouveau intégré un fichier csv avec la même structure dans la même table. Aujourd'hui tu reçois un fichier avec les champs a, b, c, e et f. Que fais-tu des données intégrées lundi et mardi ?
    Si j'ai bien compris tu veux dire lundi j'ai un fichier avec A - B - C - D avec 20 lignes de données et Mardi A - B - C - D - E avec 10 lignes de données :

    alors le résultat doit être ; une table avec les champs A - B - C - D - E avec 30 lignes de données.

  6. #6
    Membre Expert
    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
    Par défaut
    Oui pour celles du lundi et du mardi. Mais celles du vendredi ?

  7. #7
    Membre confirmé
    Homme Profil pro
    Cyberdocumentaliste
    Inscrit en
    Janvier 2014
    Messages
    160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Cyberdocumentaliste
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2014
    Messages : 160
    Par défaut
    Citation Envoyé par badaze Voir le message
    Oui pour celles du lundi et du mardi. Mais celles du vendredi ?
    Si celle du vendredi ne contient que A - C seules les données A - C qui seront ajoutées !

  8. #8
    Membre confirmé
    Homme Profil pro
    Cyberdocumentaliste
    Inscrit en
    Janvier 2014
    Messages
    160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Cyberdocumentaliste
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2014
    Messages : 160
    Par défaut
    C'est bon pour le deuxième prob, j'ai récupérée les colonnes de la table sur chaîne puis j'ai utilisé preg_match avec boucle for pour les champs récupérées depuis le CSV.
    Si un nouveau élément apparaît j'exécute une requête ALTER TABLE .
    Merci à tous.

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

Discussions similaires

  1. [XL-2003] Modifier une macro pour qu'elle s'exécute sur son propre fichier
    Par Vadorblanc dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 20/03/2013, 19h21
  2. [WD14] Créer, lire et modifier une propriété d'un fichier excel
    Par mail.spam dans le forum WinDev
    Réponses: 15
    Dernier message: 23/04/2010, 13h12
  3. [PR-2002] Créer/Modifier/Supprimer une liste de choix
    Par aelmalki dans le forum Project
    Réponses: 6
    Dernier message: 27/01/2010, 17h39
  4. Modifier plusieurs champs dans un fichier Csv
    Par francois_a dans le forum Shell et commandes GNU
    Réponses: 36
    Dernier message: 02/09/2009, 17h31
  5. [CSV] Modifier un champ d'un fichier CSV
    Par BernardT dans le forum Langage
    Réponses: 3
    Dernier message: 04/07/2007, 10h13

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