[PHP] Export d'un fichier en CSV

Fermé
LeHigh Messages postés 109 Date d'inscription mardi 12 mai 2009 Statut Membre Dernière intervention 6 septembre 2013 - 10 juin 2009 à 10:31
LeHigh Messages postés 109 Date d'inscription mardi 12 mai 2009 Statut Membre Dernière intervention 6 septembre 2013 - 11 juin 2009 à 08:35
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 :/)
A voir également:

3 réponses

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
1
LeHigh Messages postés 109 Date d'inscription mardi 12 mai 2009 Statut Membre Dernière intervention 6 septembre 2013 1
10 juin 2009 à 14:13
up, personne ne peut m'aider ?
0
LeHigh Messages postés 109 Date d'inscription mardi 12 mai 2009 Statut Membre Dernière intervention 6 septembre 2013 1
11 juin 2009 à 08:35
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.
0