Rechercher : dans
Par :

[PHP] Export d'un fichier en CSV

Dernière réponse le 11 jun 2009 à 08:35:29 LeHigh, le 10 jun 2009 à 10:31:42 
 Signaler ce message aux modérateurs

Bonjour tout le monde ^^,

J'ai un script qui me permet d'exporter les données dans un fichier csv, le problème est que les données sont issues d'un tableau, qui lui même est issu du filtre d'un formulaire afin de n'afficher que certaines données dans ce dernier.
J'arrive à ne sélectionner que certains champs à exporter, mais pas pour les données, ca me renvoie absolument toute la ligne d'enregistrements, alors que je 'ai besoin que de 7 champs.


voici le fichier pour exporter en csv

 <?php
header('Content-Type: application/octet-stream; charset=iso-8859-1');
header("Content-disposition: filename=table.csv");

include('../pages/connect.php');

$hostname = $hote; // nom du serveur
$database = $base; // nom de la base de données
$username = $user; // nom de l'utilisateur
$password = $mdp; // mot de passe
$db = mysql_pconnect($hostname, $username, $password) or trigger_error(mysql_error(),E_USER_ERROR);

// Sélection de la base
mysql_select_db($database,$db);

$myfile = "table.csv";
	 $resQuery = mysql_query($req);


	 if (mysql_num_rows($resQuery) != 0) {
 	   // titre des colonnes
 	   //$fields = mysql_num_fields($resQuery);
 	   //$i = 0;
 	   //while ($i < $fields) {
 	     echo mysql_field_name($resQuery, 1).";";
		 echo mysql_field_name($resQuery, 17).";";
		 echo mysql_field_name($resQuery, 16).";";
		 echo mysql_field_name($resQuery, 4).";";
		 echo mysql_field_name($resQuery, 2).";";
		 echo mysql_field_name($resQuery, 3).";";
		 echo mysql_field_name($resQuery, 9).";";

 	     //$i++;
 	   //}
	   echo "\n";

	   // données de la table
 	   while ($arrSelect = mysql_fetch_array($resQuery, MYSQL_ASSOC)) {
 	    foreach($arrSelect as $elem) {
 	     echo "$elem;";
 	    }
 	    echo "\n";
	   }

 	 } else{
		echo 'Aucune fiche trouvé';
		echo '<a href="../body.php">Retour</a>';
		exit;
	 }

	mysql_close();
?>


Et le tableau (vu la longueur j'ai enlever ce qui sert a rien) :



<HTML>
<HEAD>
<LINK REL="stylesheet" HREF="../styles/dde53.css" TYPE="text/css">
</HEAD>
<BODY>
<?php
include ('date.php');
include ('connect.php');
$idconnect = bddconnect();

if ($idconnect) {

error_reporting(E_ALL);

	if ($_REQUEST['p'] == n) {
		if (isset ($_REQUEST['t'])) {
			$tri = $_REQUEST['t'];
			$o = $_REQUEST['o'];
		} else {
			$tri = 'micro.num_uc';
			$o = 'ASC';
		}

	$ok = false;
	$ip = false;
	$name = $nom_util;
 	if ($num_uc != "") { 		$num_uc = "AND micro.num_uc LIKE '%".$num_uc."%' "; $ok = true; }
	if ($garantie_uc != "") { 	$garantie_uc = "AND uc.garantie_uc LIKE '".$garantie_uc."' "; $ok = true; }
	if ($marque_uc != "") { 	$marque_uc = "AND uc.marque_uc LIKE '".$marque_uc."' "; $ok = true; }
	if ($date_ach_uc != "") { 	$date_ach_uc = "AND uc.date_ach_uc LIKE '".$date_ach_uc."' "; $ok = true; }
	if ($type_uc != "") { 		$type_uc = "AND uc.type_uc LIKE '".$type_uc."' "; $ok = true; }
	if ($date_affect_uc != "") { 	$date_affect_uc = "AND uc.date_affect_uc LIKE '".$date_affect_uc."' "; $ok = true; }
	if ($num_inv_uc != "") { 	$num_inv_uc = "AND uc.num_inv_uc LIKE '".$num_inv_uc."' "; $ok = true; }
	if ($num_serie_uc != "") { 	$num_serie_uc = "AND uc.num_serie_uc LIKE '".$num_serie_uc."' "; $ok = true; }
	if ($materiel != "") { 		$materiel = "AND micro.materiel LIKE '".$materiel."' "; $ok = true; }
	if ($nom_util != "") { 		$nom_user = "AND micro.nom_util LIKE '%".$nom_util."%'"; $ok = true; }
	if ($service != "") { 		$service = "AND micro.service LIKE '".$service."' "; $ok = true; }
	if ($unite != "") { 		$unite = "AND micro.unite LIKE '".$unite."' "; $ok = true; }

	if ($marque_ecran != "") { 	$marque_ecran = "AND ecran.marque_ecran LIKE '".$marque_ecran."' "; $ok = true; $ecr = true; }
	if ($garantie_ecran != "") { 	$garantie_ecran = "AND ecran.garantie_ecran LIKE '".$garantie_ecran."' "; $ok = true; $ecr = true; }
	if ($type_ecran != "") { 	$type_ecran = "AND ecran.type_ecran = '".$type_ecran."' "; $ok = true; $ecr = true; }
	if ($date_ach_ecran != "") {	$date_ach_ecran = "AND ecran.date_ach_ecran LIKE '".$date_ach_ecran."' "; $ok = true; $ecr = true; }
	if ($num_inv_ecran != "") { 	$num_inv_ecran = "AND ecran.num_inv_ecran LIKE '".$num_inv_ecran."' "; $ok = true; $ecr = true; }
	if ($date_affect_ecran != "") { $date_affect_ecran = "AND ecran.date_affect_ecran LIKE  '".$date_affect_ecran."' "; $ok = true; $ecr = true; }
	if ($num_serie_ecran != "") { 	$num_serie_ecran = "AND ecran.num_serie_ecran LIKE '".$num_serie_ecran."' "; $ok = true; $ecr = true; }

	if ($cpu != "") { 		$cpu = "AND uc.cpu LIKE '".$cpu."' "; $ok = true; }
	if ($cad_cpu != "") { 		$cad_cpu = "AND uc.cad_cpu LIKE ' ".$cad_cpu."' "; $ok = true; }
	if ($ram != "") { 		$ram = "AND uc.ram LIKE '".$ram."' "; $ok = true; }
	if ($dram != "") { 		$dram = "AND uc.dram_uc LIKE ' ".$dram."' "; $ok = true; }
	if ($dd != "") { 		$dd = "AND uc.dd LIKE '".$dd."' "; $ok = true; }
	if ($se != "") { 		$se = "AND uc.se LIKE '".$se."' "; $ok = true; }
	if ($lecteur != "") { 		$lecteur = "AND uc.lecteur LIKE ' ".$lecteur."' "; $ok = true; }
	if ($dao != "") { 		$dao = "AND uc.dao LIKE '".$dao."' "; $ok = true; }
	if ($adr_ip != "") { 		$adr_ip = "AND ip.ip LIKE ' ".$adr_ip."' "; $ok = true; $ip=true; }
	if ($dns != "") { 		$dns = "AND ip.dns LIKE '".$dns."' "; $ok = true; $ip=true; }
	if ($masque != "") { 		$masque = "AND ip.masque LIKE ' ".$masque."' "; $ok = true; $ip=true; }
	if ($wins != "") { 		$wins = "AND ip.wins LIKE '".$wins."' "; $ok = true; $ip=true; }
	if ($passerelle != "") { 	$passerelle = "AND ip.passerelle LIKE ' ".$passerelle."' "; $ok = true; $ip=true; }
	if ($date_d = "") { 		$date_d = "%"; }
	if ($date_f = "") { 		$date_f = "%"; }

	
	if ($ok == true ) { // Si au moins un des critères a été renseigné

		$req = "SELECT * FROM micro, uc, ip "; // Création de la requête avec les table micro, uc et ecran

		if ($ip == true) { // Ajout de la table IP dans la requête
			$req .= ", ip ";
		}
		if ($ecr == true) {
			$req .= ", ecran ";
		}

		$req .=	"WHERE micro.ref_uc = uc.ref_uc AND micro.ref_ip = ip.ref_ip "; // Joitures
	
		if ($ip == true) { // Ajout des champs IP, DNS, PSRL, DNS et WINS de la table IP dans la requête + joiture avec la table IP
			$req .= "AND micro.ref_ip = ip.ref_ip ";	
			$req .= $adr_ip." ";
			$req .= $masque." ";
			$req .= $passerelle." ";
			$req .= $dns." ";
			$req .= $wins." ";
		}

		if ($ecr == true) {
			$req .= "AND micro.ref_ecran = ecran.ref_ecran ";
			$req .= $marque_ecran." ";
			$req .= $type_ecran." ";
			$req .= $garantie_ecran." ";
			$req .= $num_inv_ecran." ";
			$req .= $num_serie_ecran." ";
			$req .= $date_ach_ecran." ";
			$req .= $date_affect_ecran." ";
		}

		$req .= $num_uc." ";
		$req .= $nom_user." ";
		$req .= $service." ";
		$req .= $unite." ";
		$req .= $materiel." ";
		$req .= $marque_uc." ";
		$req .= $type_uc." ";
		$req .= $num_inv_uc." ";
		$req .= $num_serie_uc." ";
		$req .= $date_ach_uc." ";
		$req .= $date_affect_uc." ";
		$req .= $garantie_uc." ";
		$req .= $cpu." ";
		$req .= $cad_cpu." ";
		$req .= $dd." ";
		$req .= $ram." ";
		$req .= $dram." ";
		$req .= $lecteur." ";
		$req .= $se." ";
		$req .= $dao." ";
		$req .= "ORDER BY ".$tri." ".$o;
	
	} else { // Sinon, sélection de l'ensemble des micros
		$req = "SELECT * FROM micro, uc, ip WHERE micro.ref_uc = uc.ref_uc AND micro.ref_ip = ip.ref_ip ORDER BY ".$tri." ".$o;
	}

	$res = mysql_query($req) or die ('erreur MySQL : '.mysql_error());
	$num = mysql_num_rows($res);

	if ($res) {
		if ($num == 0) {
			echo 'Aucune fiche trouvée !!<p>';
			echo '<a href="form_search_fiche.php?p=m">Retour</a>';
		} else {
			echo '<form name="selection" action="caract_micro.php" method="POST">';
			if ($num == 1) {
				echo '<tr><td width="100%" class="fondblanc_txtbleu14g" align="center">'.$num.' fiche trouvée</td></tr>';
			} else {
				echo '<table  align="center" >';
				echo '<tr><td width="100%"class="fondblanc_txtbleu14g" align="center">'.$num.' fiches trouvées</td></tr>';
				echo '<tr><td height="10"></td></tr>';
				echo '</table>';
			}
			echo '<tr><td height="10"></td></tr>';
			echo '<tr><td width="100%">';
				echo '<table class="sortable" id="tableauResultat" width="100%"  border=1 cellspacing=0>';
				echo '<thead>';
					echo '<tr class="fondjaunepale_txtbleu12g">';
						echo '<th width="3%">Choix</th>';
						echo '<th width="13.5%" align="center">N° du micro</th>';
						echo '<th width="13.5%" align="center">Marque</th>';
						echo '<th width="13.5%" align="center">Type</th>';
						echo '<th width="13.5%" align="center">Utilisateur</th>';
						echo '<th width="13.5%" align="center">Service</th>';
						echo '<th width="13.5%" align="center">Unité</th>';
						echo '<th width="13.5%" align="center">Adresse ip</th>';
					echo '</tr>';
				echo '</thead>';
	echo '<tbody>';
		$_SESSION['tab_micro'] = $tab_micro;
		$i=0;
		while ($ligne = mysql_fetch_array ($res)) {
			$ref = $ligne[0];
			$num_m = $ligne[1];
			$marque = $ligne[16];
			$type = $ligne[17];
			$nom = $ligne[4];
			$service = $ligne [2];
			$unite = $ligne[3];
			$adrip = $ligne[9];
			
			$_SESSION['tab_micro'][$i] = $ref;
			
			//Affichage de la ligne correspondant à un micro
			echo '<tr class="fondblanc_txtbleu12">';
				echo '<td align="center" width="3%"><input type="radio" name="select" value="'.$ref.'"></td>';
				echo '<td align="center" width="12.5%">'.$num_m.'</td>';
				echo '<td align="center" width="13.5%">'.$marque.'</td>';
				echo '<td align="center" width="13.5%">'.$type.'</td>';
				echo '<td align="center" width="13.5%">'.$nom.'</td>';
				echo '<td align="center" width="13.5%">'.$service.'</td>';
				echo '<td align="center" width="12.5%">'.$unite.'</td>';
				echo '<td align="center" width="13.5%">'.$adrip.'</td>';
			$i++;
			echo '</tr>';
	
		}
		echo '</tbody>';
		echo '</table>';
		}
		
		echo '<tr><td align="center"><a class="print" href="../exports/export.php?req='.$req.'">Exporter</a></td></tr>';
		echo '</table>';
		echo '</form>';
	}
		}
	} else {
		echo 'ERREUR<p>';
		echo '<a href="body.php" traget="body">Retour</a>';
	}
	
}
?>

</body>
</html>


donc on voit que comparer au tableau afficher, le nombre de champs affiché est beaucoup moins important que ceux contenus dans la requête, donc j'aimerais enlever toutes les données dans le fichier csv qui ne correspondent pas aux champs afficher dans le tableau.

Merci ;)

(Et désolé pour a longueur du code :/)
Configuration: Windows XP
Firefox 2.0.0.16

Meilleures réponses pour « [PHP] Export d'un fichier en CSV » dans :
[Python] Lire et écrire des fichiers CSV VoirLIRE ET ÉCRIRE DES FICHIERS CSV Python www.python.org, dans sa version 2.4 supporte de facto le format CSV (comma-separated values: valeurs séparées par des virgules). La Library Reference est certes très explicative à ce sujet, mais uniquement...
Exporter à coup sûr du CSV VoirExporter des données au format CSV n'est pas si trivial qu'il n'y paraît. Dès que vos données contiennent des virgules ou des guillemets, tout semble partir en vrille. Il y a une astuce. Voici comment procéder pour exporter à coup sûr vos...
Excel - Convertir fichier(s) CSV / XLS VoirComme dit dans le titre, cette application convertit des fichiers CSV en fichiers XLS N’est pas nécessaire pour Excel 2007, ce dernier faisant la conversion automatiquement La conversion n’ayant pas de mise en forme, en cas de modification...
Fichier CSV VoirFormat CSV Un fichier CSV est un fichier tableur, contenant des données sur chaque ligne séparés par un caractère de séparation (généralement une virgule ou un point-virgule). Comment lire un fichier CSV ? Il peut être lu avec un tableur tel que...
PHP - Les fichiers VoirLa gestion des fichiers avec PHP Avec PHP, la création ou la lecture de fichiers est, une fois de plus, assez simple. Il existe une multitude de fonctions dédiées à l'utilisation des fichiers. La communication entre le script PHP et le fichier...

1

LeHigh, le 10 jun 2009 à 14:13:19

Up, personne ne peut m'aider ?

Répondre à LeHigh

2

DarkNeo, le 10 jun 2009 à 16:52:19
  • +1

Déjà un conseil, au lieu de mettre a chaque fois

if ($cpu != "") { $cpu = "AND uc.cpu LIKE '".$cpu."' "; $ok = true; }


mets plutot

$requete ="" // avant tes verifs de champs
if ($cpu != "") { $requete .= " AND uc.cpu LIKE '".$cpu."' "; $ok = true; }


Le coup d'envoyer la requete dans l'adresse directement comme ça c'est pas tip top non plus.
Fais toi un formulaire avec deux bouttons style "Visualiser" et "Exporter". Chaque action utilisera la meme fonction de traitement de champs de formulaire, mais l'affichage sera différent (soit ça affiche de l'html, soit un fichier csv.)
J'ai pas eu le temps de lire tout ton code, et puis ça donne pas vraiment envie. Clarifie ton code, et surtout simplifie le au maximum parce que là ça donne pas envie de poursuivre et de chercher l'erreur

Répondre à DarkNeo

3

 LeHigh, le 11 jun 2009 à 08:35:29

Je vais faire comme tu m'as dit, mais comme c'est pas moi qui ait fait tout ca, j'ai fait comme tel ^^, mais mon vrai problème c'est dans le fichier pour exporter, je vois pas comment arriver à choisir les données que je veux mettre dans mon CSV.

Répondre à LeHigh