Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & ODBC
PHP & ODBC Forum d'entraide sur ODBC avec PHP. Avant de poster -> FAQ ODBC
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 26/04/2007, 11h38   #1
Nouveau Membre du Club
 
Inscription : avril 2006
Messages : 122
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 122
Points : 32
Points : 32
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 :
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 :
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
maraly est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/04/2007, 11h54   #2
Membre chevronné
 
Avatar de buzzkaido
 
Homme
Ingénieur développement logiciels
Inscription : juillet 2004
Messages : 817
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 31
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 : 817
Points : 636
Points : 636
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.
buzzkaido est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/04/2007, 14h13   #3
Nouveau Membre du Club
 
Inscription : avril 2006
Messages : 122
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 122
Points : 32
Points : 32
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?
maraly est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/04/2007, 14h14   #4
Membre chevronné
 
Avatar de buzzkaido
 
Homme
Ingénieur développement logiciels
Inscription : juillet 2004
Messages : 817
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 31
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 : 817
Points : 636
Points : 636
Si tu fait en PHP, l'usage de str_replace devrait le faire
buzzkaido est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/04/2007, 17h01   #5
Nouveau Membre du Club
 
Inscription : avril 2006
Messages : 122
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 122
Points : 32
Points : 32
Je ne m'en sort pas

je récupère l'adresse (rue)
Code :
1
2
 
$rue=$_POST['rue'];
puis je fais
Code :
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.
maraly est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/04/2007, 17h13   #6
Membre chevronné
 
Avatar de buzzkaido
 
Homme
Ingénieur développement logiciels
Inscription : juillet 2004
Messages : 817
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 31
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 : 817
Points : 636
Points : 636
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....
buzzkaido est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/04/2007, 17h21   #7
Nouveau Membre du Club
 
Inscription : avril 2006
Messages : 122
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 122
Points : 32
Points : 32
ça ne marche toujours pas!
maraly est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/04/2007, 17h24   #8
Membre chevronné
 
Avatar de buzzkaido
 
Homme
Ingénieur développement logiciels
Inscription : juillet 2004
Messages : 817
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 31
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 : 817
Points : 636
Points : 636
Essaie alors :

Dans le script où tu fais

Code :
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
buzzkaido est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/04/2007, 17h50   #9
Nouveau Membre du Club
 
Inscription : avril 2006
Messages : 122
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 122
Points : 32
Points : 32
ouiii!!!!

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

Code :
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
maraly est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/04/2007, 09h14   #10
Nouveau Membre du Club
 
Inscription : avril 2006
Messages : 122
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 122
Points : 32
Points : 32
J'ai oublié de vous remercier, quel imploli.

Merci à tous
maraly est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 02h02.


 
 
 
 
Partenaires

Hébergement Web