Exporter en csv [Résolu/Fermé]

Signaler
Messages postés
125
Date d'inscription
jeudi 26 mai 2005
Statut
Membre
Dernière intervention
22 septembre 2019
-
Messages postés
14785
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
18 avril 2021
-
salut
je suis débutant en programmation php et je voudrais exporter le résultat d'une recherche en csv.
En fait, l'utilisateur fait une recherche(recherche.php) ensuite j'affiche le résultat dans une autre page(resultat.php). Mon objectif est d'exporter ce résultat en fichier csv.
Merci pour votre aide!

16 réponses

Messages postés
493
Date d'inscription
jeudi 7 juillet 2005
Statut
Membre
Dernière intervention
24 mai 2017
2
Salut,

Sur la page recherche, là ou tu affiches le résultat.
Tu crées un lien qui redirige vers le script ci-dessous.

Je t'ai créé un exemple, tu devras l'adapter à tes besoins.

<?php
ini_set('memory_limit','512M');
header("content-type: application/octet-stream");
header('Content-Type: text/csv; charset=utf-8');
header("Content-Disposition: attachment; filename=user.csv");
flush();

$arrayUser = array(
0 => array('Toto','fr'),
1 => array('Stay','en')
);

echo "SPEUDO;LANGUAGE\n";
foreach ($arrayUser as $items) {
echo join(';',$items)."\n";
}
?>

Et oui, c'est pas plus difficile que ça :).
Messages postés
1309
Date d'inscription
samedi 31 janvier 2009
Statut
Membre
Dernière intervention
5 juin 2013
12
Salut,

Et oui, c'est pas plus difficile que ça :)

Et bien si c'est plus dur que ça. Pourquoi ? Simplement parce que ton script ne gère pas le cas où les données contiennent le caractère de séparation (ici le point-virgule). Quand on veux faire els choses correctement on utilise fputcsv() au lieux de réinventer la roue carrée.

Pour reprendre ton exemple (la flemme de remettre les headers) :
<?php

$arrayUser = array(array('Toto', 'fr'),
                   array('John,;', 'en'));

$fp = fopen('php://output', 'w');
if ($fp === false)
  die();

foreach($arrayUser as $user)
{
  fputcsv($fp, $user);
}

fclose($fp);

?>
Messages postés
493
Date d'inscription
jeudi 7 juillet 2005
Statut
Membre
Dernière intervention
24 mai 2017
2
Par rapport à ton niveau en informatique.

Tu sais ou est là différence entre toi et moi.
C'est la motivation à vouloir aider les autres.

Toi me disant :
1. Et bien si, c'est plus dur que ça
2. Quand on veux faire els choses correctement on utilise
3. au lieux de réinventer la roue
4. la roue carrée
6. la flemme de remettre les headers

Tout çà, en deux phrases.

C'est sur, tu as optimisé mon code.
Car elle avait une faille.
De plus il y a bien une fonction PHP qui gère cela.

Mais voila ce que je vais faire pour toi.
Je vais te donner une leçon de vie devant toute la communauté phpcs.
Tu crois qu'une personne voulant travailler, partager ou simplement dialoguer, voudrait le faire avec une personne comme toi.
Non, car tu es insultant.

Plusieurs collègues qui on voulu ce mettre en compétition avec moi, ce sont toujours cassé les dents.
Au final, des gentils toutou réprimandé par leurs supérieurs à cause de leurs grande gueule.
La majorité des gens comme toi, sont toujours en compétions, alors qu'ils ont suffisamment prouvé comme les codes que tu proposes sur ce site.

J'espère que cela t'a plus ! :)
Messages postés
14785
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
18 avril 2021
154
Bonjour,

stay, quand tu vois le nombre de questions postées sans recherches, le nombre de fois où l'on voit des réponses incomplète ou réinventant tout une machinerie déjà existante, il est normal que certains messages soit un peu plus incisifs que d'autres.

Donc, ça ne sert à rien de répondre de la sorte, de plus, quand tu auras l'expérience de TychoBrahe sur les forums CS, tu comprendras mieux.

Calmes-toi, et essayes d'apprendre des autres aussi.

Messages postés
493
Date d'inscription
jeudi 7 juillet 2005
Statut
Membre
Dernière intervention
24 mai 2017
2
Bonjour,

@NHenry : "Calmes-toi, et essayes d'apprendre des autres aussi."

Je crois avoir dit à mon dernier post :
C'est sur, tu as optimisé mon code.
Car elle avait une faille.
De plus il y a bien une fonction PHP qui gère cela.

Mon problème, c'est l’arrogance de ce garçon sur sa façon de communiquer.
-----------


On fait un petit jeu ? Et remplaçons le mot forum par bureau.

Exemple :
-----------
Donc, tu veux dire que si je suis sous tentions au bureau
et que, un de mes collègues me pose une question du genre,
pourquoi mon pc ne fonctionne plus ?
Et que je constate que la prise n'est pas branchée.
Je pourrais être agressif ?

Donc lui répondre (en reprenant quelques termes et fautes d’orthographe) de notre ami :
1. Tu aurais du voir cela par toi même !
2. Quand on veux faire els choses correctement on branche la prise !
3. Rebranche cette prise par toi même, la flemme de remettre la prise !

----------------------

De plus, l'agressivité ne sert à rien car elle se retournera contre toi :).

Pour l'exemple, j'aurai pu prendre l'exemple d'un professeur à l'école avec ses élèves.
On essaye ?
Messages postés
493
Date d'inscription
jeudi 7 juillet 2005
Statut
Membre
Dernière intervention
24 mai 2017
2
@NHenry

J'ai oublié une phrase, car tu as essayé de retourner la situation.

Donc, ça ne sert à rien de l'aidée, de plus, quand tu auras ma patience (car je ne suis pas grossier) sur les forums CS, tu comprendras mieux.
Messages postés
125
Date d'inscription
jeudi 26 mai 2005
Statut
Membre
Dernière intervention
22 septembre 2019

Merci pour le code!
Mais nous sommes une communauté alors vous vous faites quelques remarques et on evolue ok?
Je jveux pouvoir récuperer(exporter) de ma base de donnée mysql seulement les données dont l'utilisateur aura definit l'intervalle de date dans ma page de recherche.
Messages postés
125
Date d'inscription
jeudi 26 mai 2005
Statut
Membre
Dernière intervention
22 septembre 2019

J'ai fait mon code mais j'arrive a générer un fichier mais il est vide. Je vous met mon code/
recherche.php
<?php
//MX Widgets3 include
require_once('includes/wdg/WDG.php');
?><!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" xmlns:wdg="http://ns.adobe.com/addt">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Document sans titre</title>
<script type="text/javascript" src="includes/common/js/sigslot_core.js"></script>
<script src="includes/common/js/base.js" type="text/javascript"></script>
<script src="includes/common/js/utility.js" type="text/javascript"></script>
<script type="text/javascript" src="includes/wdg/classes/MXWidgets.js"></script>
<script type="text/javascript" src="includes/wdg/classes/MXWidgets.js.php"></script>
<script type="text/javascript" src="includes/wdg/classes/Calendar.js"></script>
<script type="text/javascript" src="includes/wdg/classes/SmartDate.js"></script>
<script type="text/javascript" src="includes/wdg/calendar/calendar_stripped.js"></script>
<script type="text/javascript" src="includes/wdg/calendar/calendar-setup_stripped.js"></script>
<script src="includes/resources/calendar.js"></script>
<link href="includes/skins/mxkollection3.css" rel="stylesheet" type="text/css" media="all" />
</head>


<form action="dl.php" method="get" enctype="multipart/form-data" name="form1" id="form1">
  Date début,
<label>
" wdg:mondayfirst="true" wdg:type="widget" wdg:singleclick="false" wdg:restricttomask="no" />
</label>,

----

Date fin,
<label>
" wdg:mondayfirst="true" wdg:type="widget" wdg:singleclick="false" wdg:restricttomask="no" />
</label>,

----

,
<label>

</label>

   


</form>

</html>



resultat.php
<?php
include ("connexion.php");
$connect= mysql_connect($host,$login,$pass);
mysql_select_db($base, $connect);

// Liste les données de la table
// Script permettant d'exporter une table Mysql au format CSV (séparateur
$debut='';
$fin='';

$resQuery = mysql_query("SELECT date_creat AS DATE_DE_CERATION, heure_d AS HEURE_CREATION, creation AS STATUS1, date_upd AS DATE_MODIFICATION, heure_up AS HEURE_MODIFICATION, modification AS STATUS2, societe AS SOCIETE, nom_navire AS NOM_NAVIRE, call_sign AS CALL_SIGN, type_navire AS TYPE_NAVIRE, comment AS COMMENTAIRES FROM navires WHERE date_creat BETWEEN '$debut' AND '$fin' ");

/*
$resQuery = mysql_query("SELECT date_creat, heure_d, creation, date_upd, heure_up, modification, societe, nom_navire, call_sign, type_navire, comment FROM navires WHERE date_creat='09052011'");

$resQuery = mysql_query("SELECT
nom_adherent,prenom_adherent,adresse_adherent,codepostal_adherent,ville_adhe
rent FROM mysite_adherents WHERE annee_echange_adherent = 2006");*/

header("Content-Type: application/csv-tab-delimited-table");
header("Content-disposition: filename=export.csv");

if (mysql_num_rows($resQuery) != 0) {
// titre des colonnes
$fields = mysql_num_fields($resQuery);
$i = 0;
while ($i < $fields) {
echo mysql_field_name($resQuery, $i).";";
$i++;
}
echo "\n";

// données de la table
while ($arrSelect = mysql_fetch_array($resQuery, MYSQL_ASSOC)) {
foreach($arrSelect as $elem) {
echo "$elem;";
}
echo "\n";
}
}
?>
Messages postés
125
Date d'inscription
jeudi 26 mai 2005
Statut
Membre
Dernière intervention
22 septembre 2019

lORSQUE JE TEST LA PAGE RESULTAT SIMPLEMENT EN RENSEIGNANT LES VARIABLES PAR DES VALEUR COM:
$resQuery = mysql_query("SELECT date_creat AS DATE_DE_CERATION, heure_d AS HEURE_CREATION, creation AS STATUS1, date_upd AS DATE_MODIFICATION, heure_up AS HEURE_MODIFICATION, modification AS STATUS2, societe AS SOCIETE, nom_navire AS NOM_NAVIRE, call_sign AS CALL_SIGN, type_navire AS TYPE_NAVIRE, comment AS COMMENTAIRES FROM navires WHERE date_creat BETWEEN '2011-07-01' AND '2011-07-31' ");

LE FICHIER EST GENERE CORRECTEMENT AVEC LES VALEURS. JE PENSE QUE LE PROBLEME DOIT VENIR DE MON DE MA PAGE RECHERCHE.PHP
Messages postés
125
Date d'inscription
jeudi 26 mai 2005
Statut
Membre
Dernière intervention
22 septembre 2019

Non c'est pas vrai! c'étais si facile !
En tout cas merci pour tout et vive le PHP!
Messages postés
493
Date d'inscription
jeudi 7 juillet 2005
Statut
Membre
Dernière intervention
24 mai 2017
2
Je vois que tu ne t'es toujours pas remis en question.
Tu aurais dit désolé ou, ...

Je vais te rafraichir la mémoire :
Toi me disant :
1. Et bien si, c'est plus dur que ça
2. Quand on veux faire els choses correctement on utilise
3. au lieux de réinventer la roue
4. la roue carrée
6. la flemme de remettre les headers

Tout çà, en deux phrases.


Exactement. Et tu sais, si tu refuse de prendre en compte les remarques que l'on te fais on risque de ne plus en faire du tout.


Le conseil est (bien adapté) aussi bon pour toi.

---------------

Tu n'ais pas obligé de répondre.
De toute façon, ce forum est un forum commerciale.
Il y a aucun administrateur qui n'a réagi devant ce genre de comportement.
Mais, je crois que @NHenry a raison, il est normal que certains messages soit un peu plus incisifs.
Donc, continue, fait toi plaisir :).
Messages postés
1309
Date d'inscription
samedi 31 janvier 2009
Statut
Membre
Dernière intervention
5 juin 2013
12
De toute façon, ce forum est un forum commerciale.

... ou pas. C'est un forum d'entraide, il n'a rien de commercial.

Il y a aucun administrateur qui n'a réagi devant ce genre de comportement.

Encore faux, NHenry est administrateur. Tu devrais regarder son profil, il contient un petit logo Administrateur CS.

Si j'ai répondu à ces deux points précis c'est pour éviter que des visiteurs soient induits en erreur par tes propos, si tu as quelque chose à me dire à moi et qui ne concerne pas tout le monde (et par extension le sujet de ce thread) je t'invite à m'en faire part via message privé.
Messages postés
14785
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
18 avril 2021
154
Bonjour,

En reprenant les 2 points marquants de la dernière partie de ton message :
1) "De toute façon, ce forum est un forum commerciale."
2) "Il y a aucun administrateur qui n'a réagi devant ce genre de comportement. "

1) Ce forum n'est pas commercial, les admins (qui sont surtout des modérateurs) ne sont pas rémunérés, seule la publicité (et/ou être membre du club) permet de maintenir en ligne ce (formidable) ensemble de sites.

Ensuite,
2) les admins sont plus présents que tu ne le penses, il y a eu un recrutement récemment, et même si on ne répond pas toujours, on regardes ce qui se passent sur les différents sites.
Même si c'est vrai que certains sites sont plus surveillés que d'autres.

J'espère que ces éclaircissements te seront utiles pour comprendre la philosophie de ce site.

Messages postés
493
Date d'inscription
jeudi 7 juillet 2005
Statut
Membre
Dernière intervention
24 mai 2017
2
Non mais je rêve.

Je vois que vous êtes très précis sur tout les points que j'ai écrits.
Deux tête valent mieux qu'une.
Là dessus, vous allez me répondre, mais non, tu as tort, car TychoBrahe ne s'est pas justifié.
Et oui, il est normal que certains messages soit un peu plus incisifs.
Vous avez la mémoire courte :)

çà c'est pour le comportement.

Là on va discuté de ce qui est commercial :
http://photos.codes-sources.com/photo.aspx?id=xEiEAA
http://www.codes-sources.com/livres/livre-php-ateliers-web-professionnels-avec-php-mysql-javascript-6.aspx

------------------------------------------

Vous essayez de détourner la réalité.
Mais bon, c'est votre choix, (de prendre les gens pour des c..s)

------------------------------------------

C'était la dernière fois pour moi.
Je ne posterais plus rien sur ce forum.
Et oui, ?fsrf!kvf.

Pour les amateurs de cs, bonne chance.
Messages postés
14785
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
18 avril 2021
154
Bonjour,

Le sujet dérive trop, je le clos donc, si tu le conteste, ouvres un sujet sur le bar.

Je pense que tu confond avec une possibilité pour les personnes de mettre en avant leurs produits sur CS, rien ne t'oblige à acheter quoi que ce soit.

Messages postés
1309
Date d'inscription
samedi 31 janvier 2009
Statut
Membre
Dernière intervention
5 juin 2013
12
Mais nous sommes une communauté alors vous vous faites quelques remarques et on evolue ok?

Exactement. Et tu sais, si tu refuse de prendre en compte les remarques que l'on te fais on risque de ne plus en faire du tout.

Je en répèterais pas ma remarque sur l'utilisation de fputcsv(), si tu ne l'utilise toujours pas tu cours aux devants de potentiels bugs que tu vas mettre très longtemps à corriger.

Pour ton problème présent, à première vue cela proviendrais du fait que tu initialise tes variables avec une chaine vide :
$debut='';
$fin='';

Si tu veux récupérer les donnés du formulaire, il te faut faire comme suit :
$debut = mysql_real_escape_string($_GET['debut'], $connect);
$fin = mysql_real_escape_string($_GET['fin'], $connect);