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

  1. #1
    Futur Membre du Club 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
    Points : 7
    Points
    7
    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 émérite
    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
    Points : 2 522
    Points
    2 522
    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 ' '.
    Cela ne sert à rien d'optimiser quelque chose qui ne fonctionne pas.

    Mon site : www.emmella.fr

    Je recherche le manuel de l'Olivetti Logos 80B.

  3. #3
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    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 858
    Points : 6 556
    Points
    6 556
    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.
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  4. #4
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    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
    Points : 16 545
    Points
    16 545
    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 émérite
    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
    Points : 2 522
    Points
    2 522
    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`
    Cela ne sert à rien d'optimiser quelque chose qui ne fonctionne pas.

    Mon site : www.emmella.fr

    Je recherche le manuel de l'Olivetti Logos 80B.

  6. #6
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    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 858
    Points : 6 556
    Points
    6 556
    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);
    }
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  7. #7
    Futur Membre du Club 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
    Points : 7
    Points
    7
    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.

  8. #8
    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
    Il y a aussi str_​pad (mais on retombe sans doute sur le problème de compatibilité unicode)

    Pour la récupération des informations, il y a la fonction getColumnMeta pour PDO, qui permet de récupérer (entre autres) la longueur d'une colonne, et mysqli_fetch_​fields pour Mysqli, qui remonte les informations de toutes les colonnes retournées par la requête.

    Remarque importante : ton code initial utilise l'API mysql (les fonctions mysql_xxxx) qui est obsolète depuis PHP 5.5 et supprimée depuis PHP 7.0. Il est urgent de modifier ton code et soit de passer à PDO (ce que je recommande fortement), soit de migrer vers mysqli (dans le cas d'une application existante et si tu n'as pas envie de tout réécrire)
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  9. #9
    Membre à l'essai
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Décembre 2018
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2018
    Messages : 13
    Points : 12
    Points
    12
    Par défaut Pourquoi s'embêter... alors qu'avec le CSS...
    Bonsoir,

    Si j'ai bien compris, ce n'est pas le fait que le champs dans la base ne soit par rempli mais la présentation...

    Il y a beaucoup plus simple...

    En passant tout simplement par du CSS. Il suffit de créer une DIV (ou SECTION peu importe) occupant 100 % de la largeur en FLEX. Et de créer une div par colonne occupant chacune 25 % (ici pour 4 colonnes). Non seulement les colonnes seront centrées sur toute la page mais en plus toutes les données seront alignées...

    Après la div principale peut faire moins de 100 %... à ajuster avec les outils de développement des navigateurs...

    Voilà pour le HTML
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <div class="resultat">
       <div class="macolonne">
         ... le contenu de chaque colonne ci
       </div>
    </div>


    Voilà pour le CSS
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    .resultat{
    display: flex; /*flex pour aligner le contenu */
    flex-direction: row;
    justify-content: space-around;
    width: 100%;
    }
     
    .macolonne
    {width: 25%; 
    float: left; 
    font-family: arial;}

  10. #10
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    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 858
    Points : 6 556
    Points
    6 556
    Par défaut
    Citation Envoyé par Stefmeudon Voir le message
    Il y a beaucoup plus simple...

    En passant tout simplement par du CSS.
    Si le but était d'afficher le résultat dans une page web, effectivement le css est la solution, mais là il s'agissait d'écrire un fichier texte.
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  11. #11
    Membre à l'essai
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Décembre 2018
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2018
    Messages : 13
    Points : 12
    Points
    12
    Par défaut
    Citation Envoyé par CosmoKnacki Voir le message
    Si le but était d'afficher le résultat dans une page web, effectivement le css est la solution, mais là il s'agissait d'écrire un fichier texte.
    Effectivement, je suis à côté de la plaque

    Ça me rappelle les problèmes que l'on avait en basic avant le SQL. Il s'agit d'un temps que les moins de 20 ans ne peuvent pas connaître...

    Les choses ont bien évoluées avec la fonction str_pad. Elle complète la chaîne pour atteindre une longueur prédéfinie.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $machaine=str_pad($donneacompleter, 20); //  Ici la chaîne $donneacompleter sera rempli avec des espaces pour faire 20 caractères par la droite
    Il y a aussi STR_PAD_RIGHT (en fait identique à STR_PAD), STR_PAD_LEFT (complète par la gauche), STR_PAD_BOTH (complète de chaque côté).

    J'espère que ça aidera

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