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 :

creation de colonne + insertion de données dans une BDD PhpMyAdmin


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Femme Profil pro
    Webmaster
    Inscrit en
    Août 2017
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Août 2017
    Messages : 12
    Points : 11
    Points
    11
    Par défaut creation de colonne + insertion de données dans une BDD PhpMyAdmin
    Bonjour,

    Je débute et j'essaye de créer en php mySql un script qui rempli automatiquement une table que j'ai crée (testrv) avec les données d'un csv qui pour le test ne contient que 3 lignes dont la premiere devrait servir à créer mes colonnes.

    Problème, je trouve beaucoup de chose pour insérer des données dans des colonnes préalablement crée dans PhpMyAdmin, mais je ne trouve pas comment faire pour que les colonnes soient créées à la volée dans ma table grace à la premiere ligne de mon csv importé.

    J'ai vu que pour insérer des colonnes dans une table on utilisait ALTER TABLE mais je ne sais pas comment faire pour qu'il le fasse pour chacune des colonnes de mon csv sans que j'ai à lui préciser le nom des champs en plus dans le code et je ne sais pas où le mettre.

    Voici le code de la page appelée pour faire cette opération.
    Sachant que dans la table que j'ai crée j'ai juste crée préalablement un champ ID indexé en AI.

    Mon csv ressemble à ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    cat;sous-cat;nom;Image;prix;description
              Livre;Livre pour enfant;Un titre;http://www../images/test.jpg;20€;La description du livre en question.
              Livre;Livre pour enfant;Un autre titre;http://www../images/test2.jpg;30€;La description de cet autre livre.

    Mon fichier php :
    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
     
    <?php
        $fichierTestRv="produits.csv";  // fichier donnees testrv
     
        $separateur = ';';
     
        $fileTestRv = new SplFileObject($fichierTestRv);
        $fileTestRv->setFlags(SplFileObject::READ_CSV | SplFileObject::SKIP_EMPTY);
        $fileTestRv->setCsvControl($separateur);
     
     
        $tab_champsTestRv = $fileTestRv->current();
        $champs_insertTestRv = array_fill(0,count($tab_champsTestRv),'?');
        $champs_insertTestRv = implode(',',$champs_insertTestRv);
     
        try
        {
            $pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
    		$bdd = new PDO('mysql:host=localhost;dbname=test', 'root', '', $pdo_options);
     
            $ReqInsertTestRv = "INSERT INTO testrv VALUES($champs_insertTestRv)";
            $insertionTestRv = $bdd->prepare($ReqInsertTestRv);
     
            $fileTestRv->next();
     
            while($rowTestRv = $fileTestRv->current())
            {       
                $insertionTestRv->execute($rowTestRv);
                $fileTestRv->next();
            }
            echo "<br>table testrv remplie avec succès. <br>";
     
        }
        catch(PDOException $e)
        {
            die('Erreur : '.$e->getMessage());
        } 
         ?>
    Merci par avance pour votre aide

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

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 420
    Points : 15 789
    Points
    15 789
    Par défaut
    D'habitude, la base de données (tables et colonnes des tables) est fixée lors de la phase de préparation d'un projet et donc elle n'est plus modifiée pendant l'utilisation habituelle.
    Est-ce que cette façon de faire vous a été demandée ou bien vous essayez juste de faire un petit projet comme entrainement ?

  3. #3
    Membre à l'essai
    Femme Profil pro
    Webmaster
    Inscrit en
    Août 2017
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Août 2017
    Messages : 12
    Points : 11
    Points
    11
    Par défaut
    C'est un petit projet d'entrainement que je voulais faire pour gagner du temps et de la souplesse sur l'alimentation du contenu dynamique d'un site au boulot.
    En fait la demande est d'importer un csv et de créer avec ce csv toutes les colonnes et les lignes en une fois dans une table (J'ai une seule table qu'on m'a mis à dispo dans une base de donnée existante.)
    Après effectivement les colonnes déjà rentrées ne bougeront plus, mais je voudrais pouvoir en rajouter de nouvelles un jour si il le faut en réimportant mon csv avec les colonnes ou les lignes en plus.

    Du coup c'est vrai que je connais déjà le nom des colonnes du csv et que je pourrais faire des ALTER TABLE pour chaque nom dans un prétraitement, mais je me demandais justement si celà ne pouvait pas se faire par une boucle qui parserait ma premiere ligne de csv pour créer les colonnes avant de les remplir ? car il y a vraiment beaucoup de colonnes

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    La première chose est de bien cerner ce qu'on doit obtenir, pour savoir ce qu'on doit faire pour y arriver.

    1- Pour ne parler que des colonnes : on veut que les colonnes de la table puissent se remplir depuis le fichier CSV

    On réfléchit.... :
    • si la colonne existe déjà dans la table, pas besoin de la rajouter (!)

    Donc :
    1. on lit la 1ère ligne du CSV
    2. on en extrait un array des noms de colonnes
    3. pour chaque nom, on vérifie si il existe déjà dans la table.
    4. Sinon, on l'ajoute

    2- Ensuite, on peut tranquillement insérer dans la table les autres lignes du CSV.

  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
    Pour connaître les colonnes existantes, tu peux exécuter la requête SHOW COLUMNS FROM la_table. Une fois les deux listes récupérées, tu peux utiliser array_​diff pour faire la comparaison.

    Attention sur 2 points :
    Si il est possible de rajouter des colonnes, est-il possible de supprimer des colonnes (si non, que se passe-t-il si il manque des colonnes dans le fichier CSV)
    Comment connais-tu le format des colonnes à ajouter ?

Discussions similaires

  1. Réponses: 0
    Dernier message: 07/01/2013, 08h12
  2. [Débutant] Problème d'insertion de données dans une BDD sqlserver ce
    Par chinwya dans le forum VB.NET
    Réponses: 2
    Dernier message: 24/07/2012, 12h29
  3. Problème INSERTION de données dans une bdd
    Par kiradeus dans le forum Django
    Réponses: 12
    Dernier message: 15/02/2010, 18h06
  4. Insertion de données dans une BDD Access
    Par LeMeD dans le forum VB.NET
    Réponses: 2
    Dernier message: 25/01/2010, 16h43
  5. Insertion de données dans une BDD Oracle avec VB.NET
    Par DashRendar dans le forum Accès aux données
    Réponses: 7
    Dernier message: 23/01/2008, 08h47

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