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 :

Ecrire dans plusieurs fichiers txt


Sujet :

PHP & Base de données

  1. #1
    Membre du Club
    Inscrit en
    Août 2010
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 72
    Points : 52
    Points
    52
    Par défaut Ecrire dans plusieurs fichiers txt
    Bonjour,
    J'ai une base avec deux tables. Dans la première table il y a deux colonnes , une colonne "identifiant" et une autre "libelle".
    Il y a une dizaine d'identifiants et chaque identifiant a plusieurs libelles. Je souhaite créer un fichier txt par identifiant et le remplir avec les libellés correspondants. La deuxième table ne contient que des identifiants.
    J'arrive à créer mes fichiers, mais chacun n'est rempli qu'avec un seul enregistrement.
    Voilà le code, auriez-vous une idée ?
    Merci
    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
    <?php
    //variables de connexion ?a base
     //$host="localhost";
     $dbhost = 'localhost';
    $dbuser = 'root';
    $dbpass = '';
    $conn = mysql_connect($dbhost, $dbuser, $dbpass) or die                      ('Error connecting to mysql');
    $dbname = 'intrade';
    mysql_select_db($dbname);
    $query = mysql_query("SELECT DISTINCT agcepo FROM structure ORDER by agcepo") or die (mysql_error()); 
    while($array = mysql_fetch_assoc($query)){
    	 $po=$array['agcepo'];
    	$query1 = mysql_query("SELECT DISTINCT libelle, po FROM mails WHERE po='$po' ORDER by po") or die (mysql_error()); 
    	 	while($array1 = mysql_fetch_assoc($query1)){
    	 		print $array1['po']." - ";
          print $array1['libelle'];
          echo ";";
          echo "<br>";
    	 $departement_file = fopen("mails_".$po.".txt", "w");
    	 fputs($departement_file,$array1['libelle'].";");
    }
    }
    ?>

  2. #2
    Invité
    Invité(e)
    Par défaut
    Le problème est ici:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $departement_file = fopen("mails_".$po.".txt", "w");
    'w' : Ouvre en écriture seule ; place le pointeur de fichier au début du fichier et réduit la taille du fichier à 0. Si le fichier n'existe pas, on tente de le créer.
    Ca écrase ton fichier à chaque boucle du while.
    Met la ligne juste avant le while et ça devrait mieux marcher.

  3. #3
    Membre expérimenté
    Homme Profil pro
    Développeur C++
    Inscrit en
    Avril 2012
    Messages
    771
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2012
    Messages : 771
    Points : 1 631
    Points
    1 631
    Par défaut
    Bonsoir,

    il est possible de tout faire en une seul requête, cela permet de ne pas surcharger le réseau avec n requête, ce qui améliorera les performances de votre script.

    Faire une jointure :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT DISTINCT agcepo, libelle
    FROM structure s
    INNER JOIN mails m ON s.agcepo = m.po;

    Ensuite il faut créer un tableau dont l'index serait l'identifiant (agcepo) et la valeur de chaque ligne du tableau serait un tableau contenant la liste des libelles.

    Ensuite il suffit de traiter le tableau avec deux boucles foreach pour faire la sauvegarde dans les différents fichiers.

    De plus il est préférable d'utiliser les API mysqli_ ou PDO pour l'utilisation d'une BDD, l'API mysql_ étant supprimer des prochaines version de PHP.

    Donc pour le script cela donnerait :
    Code php : 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
    <?php
    	//La connexion à la BDD avec PDO
    	$db = new PDO('mysql:dbname=intrade;host=localhost', 'dbuser', 'dbpass');
     
    	//Le texte de la requête SQL
    	$sql = 'SELECT DISTINCT agcepo, libelle
    			FROM structure s
    			INNER JOIN mails m ON s.agcepo = m.po';
     
    	//Execution de la requête SQL
    	$requete = $db->query($sql);
     
    	//Tableau qui contient tous les identifiant avec leur liste de libelle
    	$listeLibelle = array();
     
    	//Traitement du résultat de la requête SQL
    	while($date = $requete->fetch(PDO::FETCH_ASSOC)){
    		$listeLibelle[$data['agcepo']][] = $data['libelle'];
    	}
     
    	//Parcour du tableau pour insérer les données dans les différents fichiers
    	foreach($listeLibelle as $agcepo => $libelles){
    		$departement_file = fopen('mails_' . $agcepo . '.txt', 'w');
     
    		foreach ($libelles as $libelle) {
    			fputs($departement_file, $libelle . ';');
    		}
     
    		fclose($departement_file);
    	}

  4. #4
    Membre du Club
    Inscrit en
    Août 2010
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 72
    Points : 52
    Points
    52
    Par défaut
    Merci de vos réponses. En m'inspirant de tout ça , j'ai réécris ces lignes (est-ce bien rigoureux ?), mais ça marche.
    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
    <?php
    //variables de connexion ?a base
     //$host="localhost";
     $dbhost = 'localhost';
    $dbuser = 'root';
    $dbpass = '';
    $conn = mysql_connect($dbhost, $dbuser, $dbpass) or die                      ('Error connecting to mysql');
    $dbname = 'intrade';
    mysql_select_db($dbname);
    $query = mysql_query("SELECT DISTINCT agcepo FROM structure ORDER by agcepo") or die (mysql_error()); 
    while($array = mysql_fetch_assoc($query)){
    	 $agcepo=$array['agcepo'];
    	 $departement_file = fopen("mails_".$agcepo.".txt", "w");
    	$query1 = mysql_query("SELECT DISTINCT libelle, agcepo FROM mails WHERE agcepo='$agcepo' ORDER by agcepo") or die (mysql_error()); 
    	 	while($array1 = mysql_fetch_assoc($query1)){
    	 		print $array1['agcepo']." - ";
          print $array1['libelle'];
          echo ";";
          echo "<br>";
    	 	 fputs($departement_file,$array1['libelle'].";");
    	 //fclose($departement_file);
    }
    }
    ?>

Discussions similaires

  1. Ecrire dans un fichier txt en 4gl
    Par patriceguic dans le forum Informix
    Réponses: 2
    Dernier message: 07/05/2007, 20h44
  2. Ecrire dans un fichier .txt
    Par chabRRR dans le forum Langage
    Réponses: 3
    Dernier message: 13/03/2007, 19h30
  3. Ecrire dans un fichier .txt
    Par yinyann86 dans le forum Pascal
    Réponses: 17
    Dernier message: 24/11/2006, 13h36
  4. ecrire dans plusieur fichier
    Par Rocket2005 dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 11/01/2006, 21h19
  5. Ecrire dans un fichier txt sans en effacer le contenu
    Par cari dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 14/12/2005, 18h11

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