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

Langage PHP Discussion :

Ajouter caractere dans un Foreach


Sujet :

Langage PHP

  1. #1
    Membre habitué Avatar de spawns
    Homme Profil pro
    Inscrit en
    Juillet 2004
    Messages
    558
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 558
    Points : 193
    Points
    193
    Par défaut Ajouter caractere dans un Foreach
    Salut à tous,
    j'ai un petit bout de code que exporte un bdd dans un fichier csv.
    Jusqu’à la pas de blem.
    par contre j'aurai besoin d'ajouter un ";" a la fain de chaque email dans le fichier exporter.

    Comment je peux inclure cela dans ma boucle Foreach

    voila un bout de 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
     
    $requete = "SELECT   mail,nom,adresse,cp,ville,tph  FROM user WHERE lvl=1 ORDER BY nom ASC";
    $sql = mysql_query($requete);
    if(mysql_num_rows($sql) > 0)
    {
        $i = 0;
     
        while($Row = mysql_fetch_assoc($sql))
        {
            $i++;
     
            if($i == 1)
            {
    			$outputCsv = "Mail;Nom;Adresse;Code_Postal;Ville;Telephone";
    			$outputCsv .= "\n";
            }
     
            foreach($Row as $clef => $valeur)
     
     
                $outputCsv .= trim(utf8_decode($valeur=str_replace(array(''',"\n","<br />"),array('\''," "," "),$valeur))).';';
     
            // Suppression du ; qui traine à la fin
            $outputCsv = rtrim($outputCsv, ';');
     
            // Saut de ligne
            $outputCsv .= "\n";
     
        }
    Merci d'avance de votre aide

  2. #2
    Futur Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Octobre 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Octobre 2013
    Messages : 3
    Points : 6
    Points
    6
    Par défaut
    Bonjour,

    En ajoutant un bloc "if" ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    foreach($Row as $clef => $valeur) {
         $outputCsv .= trim(utf8_decode($valeur=str_replace(array(''',"\n","<br />"),array('\''," "," "),$valeur))).';';
    	 if('mail' == $clef) $outputCsv .= ';';
    }
    Cdt

  3. #3
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 201
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 201
    Points : 4 665
    Points
    4 665
    Par défaut
    ajouter avant la boucle (que si valeur)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $Row['mail']= empty($Row['mail']) ? '' : $Row['mail'].';';
    foreach($Row as $clef => $valeur) ...

  4. #4
    Membre habitué Avatar de spawns
    Homme Profil pro
    Inscrit en
    Juillet 2004
    Messages
    558
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 558
    Points : 193
    Points
    193
    Par défaut
    oui,
    pas bête le if
    par contre cela ne fonction pas.
    cela n'ajoute pas le ";" apres le mail dans le csv

  5. #5
    Membre habitué Avatar de spawns
    Homme Profil pro
    Inscrit en
    Juillet 2004
    Messages
    558
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 558
    Points : 193
    Points
    193
    Par défaut
    Citation Envoyé par papajoker Voir le message
    ajouter avant la boucle (que si valeur)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $Row['mail']= empty($Row['mail']) ? '' : $Row['mail'].';';
    foreach($Row as $clef => $valeur) ...
    C'est bon ça.....
    sauf qui faut que j'échappe ce ";" car lors de l'export ca merde.il le prends pour un délimiteur
    comment on échappe un ";"
    j'ai essayé '\;' ça le fait pas

  6. #6
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 201
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 201
    Points : 4 665
    Points
    4 665
    Par défaut
    non pas d'échap
    mais tu peux utiliser la tabulation "\t" entre tes champs (a la place du ; ) pour ton csv ?

  7. #7
    Membre habitué Avatar de spawns
    Homme Profil pro
    Inscrit en
    Juillet 2004
    Messages
    558
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 558
    Points : 193
    Points
    193
    Par défaut
    je ne connais pas le \t
    cela s'utilise comment ? ???

    dans mon code par exemple

    j'ai essayé ca mais cela ne fonctionne pas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
                $outputCsv .= trim(utf8_decode($valeur=str_replace(array(''',"\n","<br />"),array('\''," "," "),$valeur)))."\t";
     
            // Suppression du ; qui traine à la fin
            $outputCsv = rtrim($outputCsv, "\t");

  8. #8
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 201
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 201
    Points : 4 665
    Points
    4 665
    Par défaut
    "\t" est le caractère tabulation
    je te propose de changer ton séparateur ; par une tabulation

    marche pas quoi ? ca devrais générer un csv valide
    ps: penser a modifier aussi l'entete

  9. #9
    Membre habitué Avatar de spawns
    Homme Profil pro
    Inscrit en
    Juillet 2004
    Messages
    558
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 558
    Points : 193
    Points
    193
    Par défaut
    non cela ne marche pas .
    quand je met le "\t" cela ne me prends pas les tabulations dans le csv.
    tous ce met dans la deuxième colonne car dans la premiere le fameux";" lui fait office de separateur que je ne veux pas ... le gag

    voici mes entêtes, que faut il changer au cas ou ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    header("Content-disposition: attachment; filename=".$fileName);
    header("Content-Type: application/force-download");
    header("Content-Transfer-Encoding: application/vnd.ms-excel\n");
    header("Pragma: no-cache");
    header("Cache-Control: must-revalidate, post-check=0, pre-check=0, public");
    header("Expires: 0");

  10. #10
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 201
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 201
    Points : 4 665
    Points
    4 665
    Par défaut
    si c'est de l'excel tu peux "encadrer" chaque cellule par des doubles cotes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $outputCsv = '"Mail";"Nom";"Adresse";"Code_Postal";"Ville";"Telephone"';
    ps: par defaut excel prend comme séparateur le ;
    mais si tu fais importer csv alors tu peux choisir tabulation comme séparateur

  11. #11
    Membre habitué Avatar de spawns
    Homme Profil pro
    Inscrit en
    Juillet 2004
    Messages
    558
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 558
    Points : 193
    Points
    193
    Par défaut
    desolé mais cela ne fonctionne pas pour export en csv.
    voila le code avec les modif
    Dis moi si tu vois le probleme

    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
    // la variable qui va contenir les données CSV
    $outputCsv = '';
     
    // Nom du fichier final
    $fileName = 'export-liste-partenaire.csv';
     
    $requete = "SELECT   mail,nom,adresse,cp,ville,tph  FROM user WHERE lvl=1 ORDER BY nom ASC";
    $sql = mysql_query($requete);
    if(mysql_num_rows($sql) > 0)
    {
        $i = 0;
     
        while($Row = mysql_fetch_assoc($sql))
        {
            $i++;
     
            // Si c'est la 1er boucle, on affiche le nom des champs pour avoir un titre pour chaque colonne
            if($i == 1)
            {
    			$outputCsv = "Mail;Nom;Adresse;Code_Postal;Ville;Telephone";
    			$outputCsv .= "\n";
            }
    		$Row["mail"]= empty($Row["mail"]) ? "" : $Row["mail"].";";
     
     
            foreach($Row as $clef => $valeur)
     
     
     
                $outputCsv .= trim(utf8_decode($valeur=str_replace(array(''',"\n","<br />"),array('\''," "," "),$valeur)))."\t";
    			/*if('mail' == $clef) {
    			$outputCsv .= ";";
    			}*/
            // Suppression du ; qui traine à la fin
            $outputCsv = rtrim($outputCsv, "\t");
     
            // Saut de ligne
            $outputCsv .= "\n";
     
        }

  12. #12
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 201
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 201
    Points : 4 665
    Points
    4 665
    Par défaut
    Citation Envoyé par papajoker Voir le message
    si c'est de l'excel tu peux "encadrer" chaque cellule par des doubles cotes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $outputCsv = '"Mail";"Nom";"Adresse";"Code_Postal";"Ville";"Telephone"';
    ps: par defaut excel prend comme séparateur le ;
    mais si tu fais importer csv alors tu peux choisir tabulation comme séparateur
    la j'ai mis ; comme séparateur et "" en +, a faire aussi dans l'entete

    http://fr.wikipedia.org/wiki/Comma-separated_values
    Si un champ contient un signe utilisé comme séparateur (virgule, point-virgule, etc.), les guillemets sont obligatoires afin que ce signe ne soit pas confondu avec un séparateur.

  13. #13
    Membre habitué Avatar de spawns
    Homme Profil pro
    Inscrit en
    Juillet 2004
    Messages
    558
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 558
    Points : 193
    Points
    193
    Par défaut
    Citation Envoyé par papajoker Voir le message
    si c'est de l'excel tu peux "encadrer" chaque cellule par des doubles cotes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $outputCsv = '"Mail";"Nom";"Adresse";"Code_Postal";"Ville";"Telephone"';
    ps: par defaut excel prend comme séparateur le ;
    mais si tu fais importer csv alors tu peux choisir tabulation comme séparateur
    le faite de mettre des "" sur cette ligne n'apporte rien car c'est le titre des colonnes.
    la collecte des donnée se fait dans le foreach, donc c'est la éventuellement ou il faut encadrer avec les "" mais je ne vois pas comment...

Discussions similaires

  1. Réponses: 4
    Dernier message: 21/10/2007, 20h55
  2. Ajout d'une chaine de caracteres dans la clause where
    Par mambe74 dans le forum MS SQL Server
    Réponses: 9
    Dernier message: 19/07/2007, 16h43
  3. shell ajout chaine de caractere dans un fichier
    Par cubepiege dans le forum Linux
    Réponses: 5
    Dernier message: 09/07/2007, 10h22
  4. VB.net Ajout de caractere dans une textbox
    Par TIREUR dans le forum Windows Forms
    Réponses: 1
    Dernier message: 14/06/2006, 20h16
  5. [Unix KSH] Ajout caractère fin de ligne dans fichier
    Par -COil- dans le forum Autres langages
    Réponses: 1
    Dernier message: 04/05/2006, 16h06

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