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 :

Remplissage de base de données via fichier PHP


Sujet :

PHP & Base de données

  1. #1
    Nouveau candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2023
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2023
    Messages : 1
    Par défaut Remplissage de base de données via fichier PHP
    Bonjour, j'ai un problème.
    Depuis un moment j'essaye de remplir ma base de données via php cependant je n'arrête pas d'avoir des erreurs du type "undefined array key" et autres c'est pourquoi je requiert votre aide j'ai un fichier SQL que voici:
    Code sql : 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
     DROP DATABASE IF EXISTS DB;
    CREATE DATABASE IF NOT EXISTS DB;
    USE DB;
     
    CREATE TABLE Produits (
        id INT NOT NULL AUTO_INCREMENT,
        nom VARCHAR(255) NOT NULL,
        prixht DECIMAL(10,2) NOT NULL,
        prixttc DECIMAL(10,2) NOT NULL,
        descriptions TEXT NOT NULL,
        images VARCHAR(255) NOT NULL,
        PRIMARY KEY (id)
    );
     
    CREATE TABLE Categories (
        id INT NOT NULL AUTO_INCREMENT,
        categories VARCHAR(255) NOT NULL,
        PRIMARY KEY (id)
    );
     
    CREATE TABLE Produits_Categories (
        id_produit INT NOT NULL,
        id_categorie INT NOT NULL,
        PRIMARY KEY (id_produit, id_categorie),
        FOREIGN KEY (id_produit) REFERENCES Produits(id) ON DELETE CASCADE,
        FOREIGN KEY (id_categorie) REFERENCES Categories(id) ON DELETE CASCADE
    );
     
    CREATE TABLE Utilisateurs (
        id INT NOT NULL AUTO_INCREMENT,
        nom VARCHAR(255) NOT NULL,
        prenom VARCHAR(255) NOT NULL,
        email VARCHAR(255) NOT NULL,
        mot_de_passe VARCHAR(255) NOT NULL,
        username VARCHAR(255) NOT NULL,
        PRIMARY KEY (id)
    );
     
    CREATE TABLE Commandes (
        id INT NOT NULL AUTO_INCREMENT,
        id_utilisateur INT NOT NULL,
        dates DATETIME NOT NULL,
        PRIMARY KEY (id),
        FOREIGN KEY (id_utilisateur) REFERENCES Utilisateurs(id) ON DELETE CASCADE
    );
     
    CREATE TABLE Commandes_Produits (
        id_commande INT NOT NULL,
        id_produit INT NOT NULL,
        quantite INT NOT NULL,
        Total DECIMAL(10,2) NOT NULL,
        PRIMARY KEY (id_commande, id_produit),
        FOREIGN KEY (id_commande) REFERENCES Commandes(id) ON DELETE CASCADE,
        FOREIGN KEY (id_produit) REFERENCES Produits(id) ON DELETE CASCADE
    );
    avec un dossier en JSON
    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
     [
      {
        "id": "1",
        "prixht": 35,
        "images": "https://contents.mediadecathlon.com/p1954220/k$1b13dd1cf1afc2104882f7f46ef0ce98/sq/raquette-de-tennis-enfant.jpg?format=auto&f=800x0",
        "nom": "Raquette de tenis",
        "descriptions": "Une bonne raquette vous permettant de vous défouler sur le terrain ou sur le visage de votre adversaire.\r\n",
        "categories": [
          "Sport",
          "Loisir"
        ]
      },
     
      {
        "id": "2",
        "prixht": 45,
        "images": "https://contents.mediadecathlon.com/p2332995/k$011566baa18cde77b9d17c4ef8776916/sq/survetement-adidas-sereno-noir.jpg?f=3000x3000",
        "nom": "Ensemble de survêtement",
        "descriptions": "Ensemble de vêtement vous laissant libres dans vos mouvements pour faire vos meilleurs High-Kick dans la bouche de votre cousin qui vous doit de l argent depuis au moins 3 mois. Non mais qu elle personne sensé ne rembourserai pas sa dette envers la famille pendant aussi longtemps ? On est d accord qu il mérite un pied bouche.\r\n",
        "categories": [
          "Sport",
          "Habillage"
        ]
      },
     
      {
        "id": "3",
        "prixht": 149.99,
        "images": "https://m.media-amazon.com/images/G/08/apparel/rcxgs/tile._CB483369919_.gif",
        "nom": "Micro-ondes",
        "descriptions": "Un micro-onde multi-fonction vous laissant la possibilité de cuire des aliments en tous genre comme un bon boeuf ou un petit hamster qui appartenait à votre petite soeur !!! Bah ouais il m a mordu donc il paye ce petit e***ler.\r\n",
        "categories": [
          "Electronique",
          "Maison"
        ]
      },
     
      {
        "id": "4",
        "prixht": 3.55,
        "images": "https://www.cascades.com/sites/default/files/2021-01/Produits_Integral_Boeuf_0.jpg",
        "nom": "Barquette de Goldwin",
        "descriptions": "Viande de Hamster de qualité supérieur, rien ne vos le bon goût d une viande bien cuite et préparer avec génie et douceur en y incorporant des pâtes et de bon légume mijoter par votre serviteur.\r\n",
        "categories": [
          "Alimentaire"
        ]
      },
     
      {
        "id": "5",
        "prixht": 12.99,
        "images": "https://www.sephora.fr/dw/image/v2/BCVW_PRD/on/demandware.static/-/Sites-masterCatalog_Sephora/default/dw3de37e43/images/hi-res/SKU/SKU_5/397386_swatch.jpg?sw=585&sh=585&sm=fit",
        "nom": "Rouge à lèvre Rose-oriental",
        "descriptions": "Ce rouge à lèvre d une couleur unique vous fera passer pour une impératice japonaise de l ère édo tellement il est parfait (ouais c est précis comme époque et alors !!!). Fait à partir de plantes, il est garantit 100% bio (WARNING produit testé sur le c*l de Goldwin).\r\n",
        "categories": [
          "Beauté"
        ]
      }
     
    ]
    et mon but et de pouvoir lié mes produits à mes catégories tout en évitant les doublons la seul parti du code qui fonctionne est celle-ci :
    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
     <?php
        session_start();
     
           include('ConnectDBnew.php');
           global $connect;
     
     
           //utilisation d'un file_get_contents pour récupérer le contenu du fichier json
     
           $api = file_get_contents('produits.json');
           $produits = json_decode($api);
          //var_dump($produits);          // après test mon json est bien décoder
     
           $sql = file_get_contents('DB.sql');
     
            $requete = $connect -> prepare($sql);
            $requete -> execute();
     
     
            $categories = array();
     
     
            foreach ($produits as $produit){
               // var_dump($produits); //me retourne bien les produits
     
               $requeteprod = $connect -> prepare('INSERT INTO Produits (id, nom, prixht, descriptions, images) VALUES (:id, :nom, :prixht, :descriptions, :images)');  //la fonction prepare() permet d'executer plusieur fois la requete
               //var_dump($requeteprod);  //la fonction est bien executer
                    $requeteprod -> bindValue('id', $produit->id);
                    $requeteprod -> bindValue('nom', $produit->nom);
                    $requeteprod -> bindValue('prixht', $produit->prixht);
                    $requeteprod -> bindValue('descriptions', $produit->descriptions);
                    $requeteprod -> bindValue('images', $produit->images);
                    $requeteprod -> closeCursor();  //closeCursor() libère la connexion au serveur, permettant ainsi à d'autres requêtes SQL d'être exécutées, mais laisse la requête dans un état lui permettant d'être de nouveau exécutée.
                    $requeteprod -> execute();
     
            }
     
     
    ?>
    est-ce que quelqu'un aurait une idée de comment faire ? Merci d'avance.

  2. #2
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 313
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 313
    Billets dans le blog
    17
    Par défaut
    et mon but et de pouvoir lié mes produits à mes catégories tout en évitant les doublons
    Tu n'as pas collé la section de code à ce propos.

    la seul parti du code qui fonctionne est celle-ci
    Montre-nous surtout ce qui ne fonctionne pas.




    En attendant. Ton script est mal indenté. J'apporte quelques corrections et commentaires.

    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
    <?php
     
    session_start();
     
    include('ConnectDBnew.php');
     
    // Ceci est inutile
    // global $connect;
     
    $api = file_get_contents('produits.json');
    $produits = json_decode($api);
     
    // Que fais-tu ici ? Pas très clair
    $sql = file_get_contents('DB.sql');
    $requete = $connect->prepare($sql);
    $requete->execute();
     
    // On utilise [] plutôt que array() pour les tableaux
    $categories = [];
     
    // On ne prépare pas la requête dans la boucle !!
    // Autrement elle perd tout son intérêt
     
    // Syntaxe Heredoc, pour du SQL plus clair
    $sql = <<<SQL 
       INSERT INTO Produits (id, nom, prixht, descriptions, images)
       VALUES (:id, :nom, :prixht, :descriptions, :images)
       SQL;
     
    $insert_product = $connect->prepare($sql);
     
    foreach ($produits as $produit) {
     
       // Ceci suffit, pas besoin de $insert_product->bindValue()
       $insert_product->execute([
          'id' => $produit->id,
          'nom' => $produit->nom,
          'prixht' => $produit->prixht,
          'descriptions' => $produit->descriptions,
          'images' => $produit->images,
       ]);
    }
     
    // Le tag de fermeture est déconseillé en fin de script s'il n'y a pas de HTML qui suit
    // ?>

Discussions similaires

  1. Problème avec Sauvegarde/restauration base de données via php
    Par jmsch dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 07/04/2016, 23h54
  2. problème de connexion à une base de donnée via jsp
    Par mirinda dans le forum Servlets/JSP
    Réponses: 7
    Dernier message: 17/01/2010, 16h40
  3. Réponses: 3
    Dernier message: 08/06/2008, 21h08

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