Problemes de telechargement de résultats de requête

Invité
Invité n'ayant pas de compte PHPfrance

04 févr. 2011, 13:04

Bonour à tous.

J'ai récupérer un script pour pouvoir récupérer ( en téléchargement 'CSV' ) des données renvoyées par une requête PhP/Mysql.
Concrètement, je remplis un formulaire de recherche multicritères, et je voudrais (en fin de processus) récupérer les résultats au sein d'un ficher CSV .

Ce n'est pas le premier forum que je consulte pour ce problème .. http://www.developpez.net/forums/d10336 ... ost5756985

et personne n'est enclin à me répondre, j'espère qu'ici le résultat ne sera pas le même.

je vous remercie de m'avoir lu.
En l'attente d'une réponse de votre part.

Luky

ViPHP
ViPHP | 4039 Messages

04 févr. 2011, 13:14

Je suis sur que Stealth35 pourra t'aider.. :wink:

Sinon, si tu pouvais nous exposer en détail ton problème, et dire à quels endroits du code tu bloque (ainsi qu'un peu d'infos sur tes propres compétences en développement), sans doute qu'on pourra t'aider.
Mais qu'importe. (je suis ici - dernier petit projet)
Berze going social.

Petit nouveau ! | 1 Messages

04 févr. 2011, 13:20

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<link rel="stylesheet" type="text/css" href="css/design.css" />
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>resultats</title>
</head>


<body>
	  <?php 
	
	include('include/connection.php'); ?>

<!-- export en csv -->  

<!-- -->    
    
    <div style="background:#D8D8D8;">
 <?php   
    
	
	  $id = $_GET['ID'];
	  $raison = $_GET['raison_sociale'];
	  $dirige = $_GET['dirigeant'];
	  $adresse = $_GET['adresse'];
	  $cp = $_GET['cp'];
	  $region = $_GET['region'];
	  $ville = $_GET['ville'];
	  $telephone = $_GET['tel'];
	  $telecopie = $_GET['telecopie'];
	  $email = $_GET['email'];
	  $email2 = $_GET['email2'];
	  $code_naf = $_GET['code_naf'];
	  $libelle_naf = $_GET['libelle_naf'];
	  $rubrique_professionnelle = $_GET['rubrique_professionnelle'];
	 
	  
	  
	  echo "<br />
               
			    Raison sociale  recherchée =<b> $raison </b><br />\n
                dirigeant recherché = <b>$dirige</b> <br />\n
				Adresse recherchée = <b>$adresse</b> <br />\n
				Code Postal recherché = <b>$cp</b> <br />\n
				Région recherchée = <b>$region</b> <br />\n
				Ville recherchée = <b>$ville</b> <br />\n
				Téléphone recherché = <b>$telephone</b> <br />\n
				Télécopie recherchée = <b>$telecopie</b> <br />\n
				Email recherché = <b>$email</b> <br />\n
				Email2 recherché = <b>$email2</b> <br />\n
				Code_NAF recherché = <b>$code_naf</b> <br />\n
				Libellé_NAF recherché =<b> $libelle_naf</b> <br />\n
				Rubrique Professionnelle recherché = <b>$rubrique_professionnelle</b> <br />\n
				
				
				
				 </b> <br/>"; ?>
<?php	  
	
	$requete = "
    SELECT raison_sociale, dirigeant, adresse, cp, region, ville, tel, telecopie, email, email2, code_naf, libelle_naf, rubrique_professionnelle
    FROM liste
    WHERE 1 ";
	if ($raison != '')
{
    $requete .= " AND raison_sociale LIKE '%$raison%' ";
}
 
if ($dirige != '')
{
    $requete .= " AND dirigeant LIKE '%$dirige%' ";
}


if ($adresse != '')
{
    $requete .= " AND adresse LIKE '%$adresse%' ";
}
 
 
if ($cp != '')
{
    $requete .= " AND cp LIKE '%$cp%' ";
}


if ($region != '')
{
    $requete .= " AND region LIKE '%$region%' ";
}
 
if ($ville != '')
{
    $requete .= " AND ville LIKE '%$ville%' ";
}

if ($telephone != '')
{
    $requete .= " AND telephone LIKE '%$telephone%' ";
}
 
if ($telecopie != '')
{
    $requete .= " AND telecopie LIKE '%$telecopie%' ";
}

if ($email != '')
{
    $requete .= " AND email LIKE '%$email%' ";
}
 
if ($email2 != '')
{
    $requete .= " AND email2 LIKE '%$email2%' ";
}

if ($code_naf != '')
{
    $requete .= " AND code_naf LIKE '%$code_naf%' ";
}
 
if ($libelle_naf != '')
{
    $requete .= " AND libelle_naf LIKE '%$libelle_naf%' ";
}

if ($rubrique_professionnelle != '')
{
    $requete .= " AND rubrique_professionnelle LIKE '%$rubrique_professionnelle%' ";
}
 
?>
</div>


<?php
						
	//echo $requete, $requete2;
	  
	 $connexion = mysql_pconnect (localhost,Lucas,bonomi);
	  mysql_select_db (lucas, $connexion);
	  
	  $resultat = mysql_query ($requete, $connexion) OR die("<br />
Erreur SQL : $query<br/>".mysql_error());
?>
<div style="background:#D8D8D8; overflow:scroll; margin-top:20px;">
<h2>R&eacute;sultats</h2>
<table style="border:1 red solid">
        <tr >
               
                <th>RAISON SOCIALE</th>
                <th>DIRIGEANT</th>
                <th>ADRESSE</th>
                <th>CP</th>
                <th>REGION</th>
                <th>VILLE</th>
                <th>N°TEL</th>
                <th>N°FAX</th>
                <th>EMAIL</th>
                <th>EMAIL2</th>
                <th>CODE_NAF</th>
                 <th>LIBELLE_NAF</th>
                <th>RUBRIQUE PROFESSIONNELLE</th>
                
        </tr>
<div>     
<?php 
	while ( ($clients = mysql_fetch_array ($resultat)))
	{
		?>
	         <div>  <br />
 
                <td><?php echo $clients['raison_sociale'];?></td>
                <td><?php echo $clients['dirigeant']; ?></td>
                <td><?php echo $clients['adresse']; ?></td>
                <td><?php echo $clients['cp']; ?></td>
                <td><?php echo $clients['ville']; ?></td>
                <td><?php echo $clients['region']; ?></td>
                <td><?php echo $clients['tel']; ?></td>
                <td><?php echo $clients['telecopie']; ?></td>
                <td><?php echo $clients['email']; ?></td>
                <td><?php echo $clients['email2']; ?></td>
                <td><?php echo $clients['code_naf']; ?></td>
                <td><?php echo $clients['libelle_naf']; ?></td>
                <td><?php echo $clients['rubrique_professionnelle']; ?></td>
</table> 
<?php } ?> 
 <br /><br />

  
            
</div> <br />
  
  </div>
<br />
<br />
	 
</body>
</html>

Voici mon code, j'essaie d'implémenter un 'module' de télechargement a chaque nouvel affichage (de chaque nouvelle requete)
que je n'arrive pas a faire, soit a cause d'un 'Warning:header already sent....' ou alors, le script de telechargement me télécharge tout le contenu de ma table (ce que je neveux justement pas.. )

Quand à mes connaissances, je me définirais comme 'initié' je me débrouille plus ou moins bien dans plusieurs languages (jquery, php, mysql, java, html, css ect... )
Si sa vous intéresse : http://www.streaming-addict.com Mon dernier site

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

04 févr. 2011, 15:28

salut,

pour commencer des commentaire sur le code existant
[quote="LuckyVJ">
$connexion = mysql_pconnect (localhost,Lucas,bonomi);
mysql_select_db (lucas, $connexion);
[/quote]
tu a réellement des constante localhost,Lucas, bonomi (définie avec define()) dans ton fichier connection.php ?

Par rien que la ton script doit t'afficher des erreurs comme quoi ces constantes ne sont pas définies. tu va me dire ro ben wé mais ça fonctionne, oui parce que php est très permissif et pas trop con finalement et va se dire tiens c'est p'tet des chaines de caractère je les utilise ainsi mais je balance un warning pour la forme ...

donc je pense que le code serais plutot
$connexion = mysql_connect ('localhost','Lucas','bonomi');
mysql_select_db ('lucas', $connexion);
oui j'ai virer le p dans le connect car tu pas forcément d'une connexion permanente et y a des chances qu'un hébergeur limite ce comportement (parce que la connexion est ouverte une fois pou rune page c'est suffisant et que les hébergeurs limite les connections simultané au sgbd ce qui peut être gênant de les garder ouvert, et contre performant peut être).

WHERE 1 totalement inutile est abérent c'est comme si tu demandais à ton boulanger une baguette mais une baguette ...
$id = $_GET['ID'];
$raison = $_GET['raison_sociale'];
et le paté qui vient, est une source d'erreur potentielle car tu ne peut être certain que le visiteur ai remplis tout les chmps (ne me parle pas de validation JS c'est inutile coté sécurité puisque désactivable coté client c'est juste 'un confort' pour le 'client').
donc il serait bien d'utiliser une série de empty / isset pour sécuriser le tous ;)

Warning:header already sent....' => c'est typique l'erreur quand on n'a pas bien lu la doc de la fonction header (je l'ai faite aussi). ceci est du à l'envoi de quelque chose avant le header.
O_o je pige pas ???
la sortie (envoi vers le navigateur) est commencer dès que php pense avoir un truc à afficher. Ca peut être un echo / print ou n'importe qu'elle fonction qiu affiche, mais aussi du html dans le code (donc en dehors de <?php ?>) et donc par extension tous ce qui est en dehors des tags php, ça peut être un espace en début fin de ligne / fichier, la classique ligue vide en fin de fichier etc. Ah oui l'affichage d'une erreur php dû au point expliquer avant (sur le connect) font aussi afficher ce message puisse qu'au final c'est un affichage et ;)

dans le code que tu a mis php envoie au navigateur dès la 1ère ligne (doctype).

Pour forcer le téléchargement d'un fichier tu utilise la fonction header donc il ne faut rien de tous ce que j'ai mis au dessus avant.

Après pour construire un fichier csv, finalement c'est simple, ce n'est que des champ séparé par des , ou des ; (attention à ne pas en avoir dans les champs) ce qui au final est très simple avec la fonction fputcsv

pour l'envoie du fichier tu a un exemple (le 1er) dans la doc de la fonction header à toi de trouver le bon type mime :)

ensuite tu n'est pas obligé de créer le fichier sur ton disque pour l'envoyer (ce qui au final est une perte de temps et une pollution du disque à mon gout ;))

tu formate tes champs et à la place du readfile un simple echo de la variable qui contient tout :)


essai avec tous ça et si tu buche revient avec ton code qui te pose soucis (parce que celui que tu à mis n'exporte aucun fichier ;) )


@+
Il en faut peu pour être heureux ......