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 :

Entrer une liste de pays dans une base de données


Sujet :

PHP & Base de données

  1. #1
    Membre actif
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Août 2008
    Messages
    557
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2008
    Messages : 557
    Points : 286
    Points
    286
    Par défaut Entrer une liste de pays dans une base de données
    Bonjour,

    Voilà j'aimerais entrer une liste de tous les pays du monde qui sont dans un bloc notes, avec ce format :

    AFGHANISTAN;AF
    AFRIQUE DU SUD;ZA
    ...

    dans une base de données "test".

    Mon but est de m'éviter de rentrer tous les pays un par un dans la bdd.

    Et donc je voudrais faire une fonction php avec une boucle qui à chaque fois fait INSERT ....

    J'ai déjà réussi il y a quelques mois mais j'ai oublié.

    voici mon code

    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
    <?php
     
    $host="localhost";
    $user="root";
    $pass="";
    $db="test";
     
    // connection à la base de données
    $id=mysql_connect($host, $user, $pass) or die ("Impossible de se connecter à la base de données");
     
    // création de la base
    $createDB="CREATE DATABASE IF NOT EXISTS `test`";
    mysql_query($createDB);
     
    // sélection de la base de données
     
    $bdd=mysql_select_db($db);
     
     
    //création d'une table personne
     
    $createTable="CREATE TABLE `PAYS` (`nom` varchar(30), `id` varchar(5))";
    $table=mysql_query($createTable);
     
    // test pour savoir si la création de table n'a pas posé problème
    if(!$table)
    die(mysql_error());
     
     
    // ouverture du fichier en lecture
    $fic = fopen('pays.txt', 'r');
     
    for ($i = 1 ; $i <= 246 ; $i++)
    	{       $texte = explode ( ";", fgets($fic) );
    			$res=$texte[0];
    	        $pays="INSERT INTO `PAYS` (`res`, ``)";
    			mysql_query($pays);
    	}
     
    //$create="CREATE TABLE personne (nom varchar(10) NOT NULL,prenom varchar(10) NOT NULL)";
     
    mysql_close($id);
     
    ?>
    Ca crée la base, la table avec le nom du pays et l'id, mais pas ça ne la remplit pas.

    Et dans phpMyAdmin, ils mettent un triangle danger disant : Aucun index n'est défini !

    Je me demandais si il fallait que je mette un "include pays.txt"

    mais comme ce n'est pas du code php (pays.txt), je ne pense pas.

    (je suis encore un peu débutant en php)

    J'utilise wampServer pour tout gérer.

    (Merci)

  2. #2
    Membre expérimenté

    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 060
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 060
    Points : 1 357
    Points
    1 357
    Par défaut
    Bonjour,

    Essaie avec ça :
    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
    <?php
      $createTable = 'CREATE TABLE `PAYS` (`
                        `id_pays` int(11) unsigned NOT NULL ,
                        `nom` varchar(30), 
                        `code_iso` varchar(5))
                        PRIMARY KEY  (`id_pays`)
                      )';
      $table = mysql_query($createTable)
        or die(mysql_error());
     
      $sql = 'LOAD DATA INFILE \'pays.txt\'
              INTO TABLE `PAYS`
              FIELDS TERMINATED BY \';\' OPTIONALLY ENCLOSED BY \'"\'
              LINES TERMINATED BY \'\r\n\'
              nom, code_iso';
    ?>

  3. #3
    Membre actif
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Août 2008
    Messages
    557
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2008
    Messages : 557
    Points : 286
    Points
    286
    Par défaut
    Bonsoir et merci pour ton aide.

    j'ai essayé en remplaçant, donc voici le nouveau code
    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
    <?php
     
    $host="localhost";
    $user="root";
    $pass="";
    $db="test";
     
    // connection à la base de données
    $id=mysql_connect($host, $user, $pass) or die ("Impossible de se connecter à la base de données");
     
    // création de la base
    $createDB="CREATE DATABASE IF NOT EXISTS `test`";
    mysql_query($createDB);
     
    // sélection de la base de données
     
    $bdd=mysql_select_db($db);
     
     
    //création d'une table personne
     $createTable = 'CREATE TABLE `PAYS` (
                        `id_pays` int(11) unsigned NOT NULL ,
                        `nom` varchar(30), 
                        `code_iso` varchar(5))
                        PRIMARY KEY  (`id_pays`)
                      )';
      $table = mysql_query($createTable)
        or die(mysql_error());
     
      $sql = 'LOAD DATA INFILE \'pays.txt\'
              INTO TABLE `PAYS`
              FIELDS TERMINATED BY \';\' OPTIONALLY ENCLOSED BY \'"\'
              LINES TERMINATED BY \'\r\n\'
              nom, code_iso';
     
     
    // test pour savoir si la création de table n'a pas posé problème
    if(!$table)
    die(mysql_error());
     
    mysql_close($id);
     
    ?>
    Et j'ai comme erreur au chargement de la page :

    You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'PRIMARY KEY (`id_pays`) )' at line 5
    C'est peut être pas grand chose, j'ai souvent du mal à repérer les erreurs les plus bêtes, j'essaierai de comprendre un peu mieux demain.

  4. #4
    Membre expérimenté

    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 060
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 060
    Points : 1 357
    Points
    1 357
    Par défaut
    Remplace cette ligne :
    par :
    Désolé, j'ai été un peu vite. Problème de copier-coller.

  5. #5
    Membre actif
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Août 2008
    Messages
    557
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2008
    Messages : 557
    Points : 286
    Points
    286
    Par défaut
    ok Merci, ça y est presque je pense, manuellement ça les rentre les pays j'ai essayé (sans passer par le fichier texte);

    ensuite dans ton code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     $sql = 'LOAD DATA INFILE \'pays.txt\'
              INTO TABLE `PAYS`
              FIELDS TERMINATED BY \';\' OPTIONALLY ENCLOSED BY \'"\'
              LINES TERMINATED BY \'\r\n\'
              nom, code_iso';
     
    		  mysql_query($sql);
    c'est bien mysql_query que je dois rajouter à la fin?

    Et je crois que peut être il y a un problème avec les côtes. celles du fichier texte, est ce qu'elles correspondent à celle de la touche 7?

    Et les slash c'est pour éviter l'interprétation?

    Et quelle est la différence de mettre une simple côte plutôt que des doubles comme je l'ai fait pour le "INSERT .... "

    Sur ton code, tu mettais des simples côtes.

    Le problème c'est que sur tous les codes que j'ai trouvé sur le net, il y en a où ils ne mettent pas la table entre côtes, d'autres où ils la mettent, d'autres où ils mettent des doubles, des simples. Et ça m'embrouille un peu.

    Et certains à la fin du insert mettent un point virgule, comme ça :

    $pays='insert ... code_iso`);';

  6. #6
    Membre actif
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Août 2008
    Messages
    557
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2008
    Messages : 557
    Points : 286
    Points
    286
    Par défaut
    Après avoir bien galéré, ça marche pour insérer des valeurs.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $o=mysql_query("INSERT INTO PAYS (`nom`, `code_iso`) VALUES('ao','ae') ;");
    (faut pas faire attention aux noms de variables^^)

    par contre, si à la place des valeurs brutes ao et ae, je tente de mettre une variable style $res et $res2, ça refait comme avant.

    Comment on fait pour la syntaxe des variables? On met le $? un &? Et aussi quelles côtes? Parce que sur ce que j'ai trouvé sur le net, ça varie aussi.

  7. #7
    Membre actif
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Août 2008
    Messages
    557
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2008
    Messages : 557
    Points : 286
    Points
    286
    Par défaut
    Voilà j'ai réussi.

    J'avais oublié de mettre en commentaires des essais situés plus haut.

    Toujours des erreurs bidons.

    Par contre je n'ai pas utilisé ta méthode :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    'LOAD DATA INFILE \'pays.txt\'
              INTO TABLE `PAYS`
              FIELDS TERMINATED BY \';\' OPTIONALLY ENCLOSED BY \'"\'
              LINES TERMINATED BY \'\r\n\'
              nom, code_iso';
    j'ai fait un code un peu sauvage avec une boucle

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    for ($i = 1 ; $i <= 246 ; $i++)
    	{       $texte = explode ( ";", fgets($fic) );
    			$res=$texte[0];
    			$res2=$texte[1];		
     
    	        $pays="INSERT INTO `PAYS` (`nom`, `code_iso`) VALUES ('$res', '$res2');";
    			mysql_query($pays);
    	}
    au lieu d'utiliser des fonctions toutes faites. J'essaierai d'y parvenir par ta façon aussi.

    Donc j'attends si possible tes précisions sur (je me cite)

    Et je crois que peut être il y a un problème avec les côtes. celles du fichier texte, est ce qu'elles correspondent à celle de la touche 7?

    Et les slash c'est pour éviter l'interprétation?

    Et quelle est la différence de mettre une simple côte plutôt que des doubles comme je l'ai fait pour le "INSERT .... "

    Sur ton code, tu mettais des simples côtes.
    Et merci pour tes réponses quotidiennes depuis le début.

Discussions similaires

  1. [AC-2010] Utiliser valeur d'une liste de choix dans une liste déroulante d'un autre formulaire
    Par Sébastien1609 dans le forum Macros Access
    Réponses: 1
    Dernier message: 11/06/2015, 15h31
  2. Réponses: 9
    Dernier message: 21/05/2014, 20h21
  3. [LibreOffice][Base de données] Recuperer une liste de tables et une liste de champs d'une table sur LibreOffice & OpenOffice
    Par gerard.sauvage dans le forum OpenOffice & LibreOffice
    Réponses: 2
    Dernier message: 08/04/2014, 12h35
  4. Réponses: 1
    Dernier message: 26/12/2010, 21h20
  5. Réponses: 0
    Dernier message: 09/11/2010, 15h43

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