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 :

problème d'export du contenu de <textarea> vers un fichier csv [ODBC]


Sujet :

PHP & Base de données

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2006
    Messages : 122
    Points : 65
    Points
    65
    Par défaut problème d'export du contenu de <textarea> vers un fichier csv
    Bonjour,

    Je fait une exportation des résultats d'une requête dans un fichier csv.
    Mon problème se trouve au niveau des données issues d'un formulaire <textarea> où on a écrit à la ligne

    ma requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $req="select nomP, prenomP, rue from patient where IdPatient=55 or IdPatient=52";
    $res=odbc_exec($connexion, $req);
    résultats :

    nomP prenomP rue
    abdoul jabar 20 av de la pradel bat B2 apt 66 res la source
    rabe toko 20 r de la brousse bat B4 res la belle vue

    C'est la 'rue' qu'on a saisi dans une zone <textarea> et en allant à la ligne

    Code pour l'exportation

    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
     
    header("Content-Type: application/csv-tab-delimited-table");   
    header("Content-disposition: filename=ResultatExtraction.csv");   
     
    //s'il existe des résultats 
    if (odbc_num_rows($res) != 0)
    {   
    	// titre des colonnes   	
    	$fields = odbc_num_fields($res);
    	$i = 1;   
    	while ($i <= $fields)
    	{  
    		//les noms des champs comme titre		
    		print odbc_field_name($res, $i).";"; 		  
    		$i++;   
    	}	
    	print "\n";
     
    	// données de la table
    	while ($arrSelect = odbc_fetch_array($res))
    	{  
    		foreach($arrSelect as $elem)
    		{  	
    			print "$elem;";		
    		}			
    		print "\n";
    	}   	
    }
    résultats dans le fichier csv, dans une table excel, ça donne ça:

    nomP prenomP rue
    abdoul jabar 20 av de la pradel
    bat B2 apt 66 res la source
    rabe toko 20 r de la brousse
    bat B4
    res la belle vue


    pourtant dans internet expolrer, cela donne bien


    nomP;prenomP;rue; abdoul;jabar;20 av de la pradel bat B2 apt 66 res la source; rabe;toko;20 r de la brousse bat B4 res la belle vue;

    Je ne comprend pas pourquoi quand on va à la ligne dans un <textarea>, il va directement à la ligne dans une autre case dans le fichier csv.

    Merci de votre aide

  2. #2
    Membre éclairé
    Avatar de buzzkaido
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2004
    Messages
    821
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2004
    Messages : 821
    Points : 734
    Points
    734
    Par défaut
    Lorsque du texte est sais dans un textarea, il est transmis tel quel au serveur.

    Du coup, si tu reviens à la ligne dans un textarea, le navigateur transmet au serveur un caractere de retour à la ligne : \n

    Or, les retours à la ligne ne sont pas interpretés par les navigateurs lors de l'affichage d'informations. Donc, dans IE, tu vois tout sur une meme ligne

    Par contre, Excel les interprete, donc il y a un retour à la ligne.

    Plusieurs solutions :

    Lors de l'export vers le CSV, tu remplace tous les \n par des espaces = plus de retour à la ligne

    Ou alors

    Lors de l'affichage dans le navigateur, tu affiche entre les balises <pre> et </pre> afin d'interpreter tous les caracteres et donc les retours à la lignes.

    Tu verra que le meme probleme se pase avec les espaces : si tu saisi plusieurs espace à la suite dans le textarea, seul excel les affichera.

    En gros, un <textarea> envoit un texte "brut" et non pas formaté en HTML

    Pour mémoire, un retour à la ligne en HTML s'ecrit <br> un espace s'écrit &nbsp; et ainsi de suite...


    PS : je ne suis plus sûr, mais il est possible que tu doive remplacer non seulement le caractere \n mais aussi le caractere \r, l'un est le retour chariot, l'autre le retour à la ligne.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2006
    Messages : 122
    Points : 65
    Points
    65
    Par défaut
    Merci de ces explication.

    Lors de l'export vers le CSV, tu remplace tous les \n par des espaces = plus de retour à la ligne

    Comment faire ça sur les données provenant de la requete?

  4. #4
    Membre éclairé
    Avatar de buzzkaido
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2004
    Messages
    821
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2004
    Messages : 821
    Points : 734
    Points
    734
    Par défaut
    Si tu fait en PHP, l'usage de str_replace devrait le faire

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2006
    Messages : 122
    Points : 65
    Points
    65
    Par défaut
    Je ne m'en sort pas

    je récupère l'adresse (rue)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $rue=$_POST['rue'];
    puis je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $espace = array("\n", "\r", "\s", "\t");	
    $Ruebase=str_replace($espace, " ", "$rue");
    $_SESSION['rue']=$RueBase;
    puis dans une autre page de script d'insertion dans la base, je fais
    $rue=$_SESSION['rue']

    et c'est $rue que j'insert dans la base. Et il gadre quand même les retours chariot!!!

    pourtant quand j'affiche $RueBase même entre balise <pre></pre>, il m'a bien enlevé le retour chariot.

  6. #6
    Membre éclairé
    Avatar de buzzkaido
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2004
    Messages
    821
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2004
    Messages : 821
    Points : 734
    Points
    734
    Par défaut
    Essaie en faisant

    $rueInsertion = $_SESSION['rue'];

    Si ca marche, c'est que tu as register_globals = ON dans la config de ton serveur, sinon je vois pas trop....

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2006
    Messages : 122
    Points : 65
    Points
    65
    Par défaut
    ça ne marche toujours pas!

  8. #8
    Membre éclairé
    Avatar de buzzkaido
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2004
    Messages
    821
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2004
    Messages : 821
    Points : 734
    Points
    734
    Par défaut
    Essaie alors :

    Dans le script où tu fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $espace = array("\n", "\r", "\s", "\t");	
    $Ruebase=str_replace($espace, " ", "$rue");
    $_SESSION['rue']=$RueBase;
    Fais aussi l'insertion en base de données, en insérant la variable $Ruebase

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2006
    Messages : 122
    Points : 65
    Points
    65
    Par défaut
    ouiii!!!!

    ce n'est qu'à la derniere page (page d'insertion) que j'ai enlevé les retours chariot.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $rue=$_SESSION['rue'];
     
    $espace = array("\n", "\r", "\s", "\t");		
    $rueB=str_replace($espace, " ", "$rue");
    et j'insert $rueB.

    J'ai donc laisser $rue dans les autres pages tel qu'il est.
    ça marche mais je n'ai pas très bien compris d'où venait le problème vu que si j'ai enlevé les retours chariot avant, j'ai garder la nouvelle variable en session.

    Mais c'est résolu

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2006
    Messages : 122
    Points : 65
    Points
    65
    Par défaut
    J'ai oublié de vous remercier, quel imploli.

    Merci à tous

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [2008] Problème d'export vers un fichier .csv
    Par Aeltith dans le forum SSIS
    Réponses: 3
    Dernier message: 09/03/2011, 11h20
  2. Exporter le contenu d’une zone de liste vers excel
    Par manguigs dans le forum VBA Access
    Réponses: 1
    Dernier message: 08/02/2010, 16h41
  3. [MySQL] Exporter le contenu d'un champ email dans un fichier csv
    Par thamis dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 12/01/2010, 16h17
  4. [TinyMCE] Problème pour récupérer le contenu d'un textarea
    Par oneTime dans le forum Bibliothèques & Frameworks
    Réponses: 1
    Dernier message: 28/08/2008, 11h19
  5. Exportation du contenu d'un Quick Report vers PDF
    Par sillycoder dans le forum Bases de données
    Réponses: 1
    Dernier message: 05/07/2005, 14h48

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