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 :

Comment enregistrer dans un fichier texte des champs contenant des caractères ou vides en gardant des espaces


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué Avatar de proraf
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mai 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mai 2007
    Messages : 9
    Par défaut Comment enregistrer dans un fichier texte des champs contenant des caractères ou vides en gardant des espaces
    Bonjour.
    Je demande de savoir comment enregistre dans un fichier texte des champs contenant des caractère ou vide en gardon des espaces.
    C'est à dire que un champ de nome "Prenom" et de type char(10) et que j'ai rempli ce champ et j'ai tapé "Rafik"; et de même pour le deuxième champ "Nom" de type char(20) ... rempli ... "Ghariani".
    dans le fichier texte je veux que ce soit :

    Rafik-----Ghariani------------.

    et non
    Rafik,Ghariani

    N.B : le trait (-) en réalité c'est un espace vide ( )

    Exemple 1 :
    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
    <?php
        $fh = fopen('data13.txt', 'w');
        $con = mysql_connect("localhost","root","motdepasse");
        mysql_select_db("database", $con);
     
        /* insert field values into data13.txt */
     
        $result = mysql_query("SELECT Nom, Prenom FROM utilisateurs");   
        while ($row = mysql_fetch_array($result)) {          
            $last = end($row);          
            $num = mysql_num_fields($result) ;    
            for($i = 0; $i < $num; $i++) {            
                fwrite($fh, $row[$i]);                      
                if ($row[$i] != $last)
                   fwrite($fh, "");
            }                                                                 
            fwrite($fh, "\r\n");
        }
        fclose($fh);
    ?>
    Résultat :
    RafikGhariani
    SkanderAbidi

  2. #2
    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
    Tu peux faire comme ça.

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <?php
    $nom     = 'Rafik';
    $prenom  = 'Ghariani';
    $nom1    = $nom.str_repeat( '-', 10-strlen($nom));
    $prenom1 = $prenom.str_repeat( '-', 20-strlen($prenom));
    print "$nom1$prenom1";

    Remplace '-' par ' '.

  3. #3
    Expert confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 986
    Par défaut
    Tu peux utiliser une chaîne formatée exploitable avec toute une famille de fonctions (printf, sprintf, vprintf, vsprintf, fscanf, sscanf). Par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    printf("[%-10s%-20s]", 'Rafik', 'Ghariani');
    // [Rafik     Ghariani            ]
    Dans ton exemple vsprintf me semble la mieux appropriée car elle prend un tableau en paramètre (donc ici directement la variable $row):
    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
    $fh = fopen('data13.txt', 'w');
    $con = mysql_connect("localhost","root","motdepasse");
    mysql_select_db("emi", $con);
     
    /* insert field values into data13.txt */
     
    $result = mysql_query("SELECT Nom, Prenom FROM utilisateurs");   
    $format = "%-10s%-20s\r\n";
     
    while ($row = mysql_fetch_array($result)) {          
        fwrite($fh, vsprintf($format, $row));
    }
     
    fclose($fh);

    Pour une description de la syntaxe d'une chaîne formatée, voir la page de sprintf.

    Les fonctions mysql_*** sont obsolètes depuis un bon moment, à la place tu peux utiliser soit les fonctions mysqli_ soit PDO.

  4. #4
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Attention : toutes ces fonctions ne sont pas compatibles unicode.
    Pour vous éviter des nœuds au cerveau

  5. #5
    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
    Possible de le faire directement depuis SQL

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SELECT CONCAT(`nom`,REPEAT(' ',20-LENGTH(`nom`)),`prenom`,REPEAT(' ',10-LENGTH(`prenom`))) AS nom_prenom
    FROM `utilisateurs`

  6. #6
    Expert confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 986
    Par défaut
    Attention : toutes ces fonctions ne sont pas compatibles unicode.
    C'est pas faux.

    Dans ce cas, on peut utiliser les fonctions grapheme_*** de l'extension intl (qui géreront correctement les caractères combinants contrairement aux fonctions mb_***):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $sp10 = '          ';
    $sp20 = $sp10 . $sp10;
     
    while ($row = mysql_fetch_array($result)) {
        $line = grapheme_substr($row[0] . $sp10, 0, 10) . grapheme_substr($row[1] . $sp20, 0, 20) . "\r\n";
        fwrite($fh, $line);
    }

  7. #7
    Membre habitué Avatar de proraf
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mai 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mai 2007
    Messages : 9
    Par défaut
    bon ...
    Structure de la table `utilisateurs`
    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
     
    CREATE TABLE IF NOT EXISTS `utilisateurs` (
      `id` int(12) NOT NULL auto_increment,
      `Nom` varchar(20) default '',
      `Prenom` varchar(20) default '',
      `Login` varchar(20) default '',
      `Pass` varchar(30) default '',
      PRIMARY KEY  (`id`),
      UNIQUE KEY `id` (`id`),
    ) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ;
    INSERT INTO `utilisateurs` (`id`, `Nom`, `Prenom`, `Login`, `Pass`) VALUES
    (1, 'admin', 'admine', 'admin', '123456'),
    (2, 'utiser1', 'users1', 'user1', 'mdp12345'),
    (3, 'utiser2', 'users2', 'user2', 'mp123'),
    (4, 'utiser3', 'users3', 'user3', 'mdp5432');
    Je veux une résultat comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    1           admin               admine              admin               123456              
    2           utiser1             users1              user1               mdp12345            
    3           utiser2             users2              user2               mp123               
    4           utiser3             users3              user3               mdp5432
    -------------------------------
    C.A.D, comment PHP peux lire la longueur du champ dans une table MySQL.
    comme exemple le champ `Nom` varchar(20), mais contient que cinq caractère (admin) mais dans le fichier texte.txt j'obtient
    sans que je défini dans php la longueur du champ,
    je veux que "php" lise (varchar(20)) dans les tables MySQL.

    Merci.

Discussions similaires

  1. Copier des enregistrements dans un fichier texte
    Par chekkal dans le forum SQL
    Réponses: 6
    Dernier message: 12/11/2018, 12h12
  2. Réponses: 5
    Dernier message: 02/05/2011, 13h22
  3. Réponses: 0
    Dernier message: 09/11/2010, 09h56
  4. Réponses: 4
    Dernier message: 22/07/2010, 15h46
  5. Enregistrer dans un fichier text
    Par elhani dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 02/07/2009, 12h35

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