IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Extraction d'une table dans un CSV [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    86
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 86
    Points : 46
    Points
    46
    Par défaut Extraction d'une table dans un CSV
    bonjour

    jai une table avec 4 valeurs

    jutilise le script suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    // debut du script
    $hostname_gpsevasion = "localhost";
    $database_gpsevasion = "titi";
    $username_gpsevasion = "root";
    $password_gpsevasion = "toto";
     
    $gpsevasion = mysql_pconnect($hostname_gpsevasion, $username_gpsevasion, $password_gpsevasion) or die(mysql_error());
    mysql_select_db($database_gpsevasion, $gpsevasion);
    $query_ov2 = "SELECT * FROM poi_adresse WHERE valid_ad = 1 and cat_ad ='$cat_ad' and pays_ad = '$pays_ad' and suspendre_ad = '0' ORDER BY nom_ad ASC";
    $ov2= mysql_query($query_ov2, $gpsevasion) or die(mysql_error());
    $row_ov2= mysql_fetch_assoc($ov2);
    $totalRows_ov2= mysql_num_rows($ov2);
     
    $nomfichier = "out1.csv";
    $fichier=fopen($nomfichier, 'wb+');
    while($row_ov2= mysql_fetch_assoc($ov2)){  
    $navman = $row_ov2['lon_ad'].",".$row_ov2['la_ad'].",".$row_ov2['nom_ad'];
    fwrite($fichier, $navman);
    }
     
    fclose ($fichier);
    mysql_free_result ($ov2);
    mysql_close ($gpsevasion);
     
    // fin du script
    je ne sais pas si le script est elegant mais bon :

    $totalRows_ov2 est egale à 4

    1er probleme :
    dans le fichier csv il ny a que 3 valeurs alors que j en ai 4
    la premiere valeur n'a pas ete ecrite dans le fichier

    2 eme probleme :

    le resultat dans le csv est le suivant :


    5.775880,50.637910,DATS 243.195640,50.812460,DATS 244.013290,50.838990,DATS 24

    alors que j aimerais avoir :

    5.775880,50.637910,DATS 24
    3.195640,50.812460,DATS 24
    4.013290,50.838990,DATS 24

    merci pour votre aide

  2. #2
    Membre expert Avatar de Amara
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 688
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 688
    Points : 3 115
    Points
    3 115
    Par défaut
    Problème #1 : normal tu fais un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $row_ov2= mysql_fetch_assoc($ov2);
    dans le vide avant ton while, supprime le et ça ira mieux.


    Problème #2 : normal aussi tu écris tout à la suite, il faut ajouter un saut de ligne quand tu écris, peut-être avec "\n"...

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    86
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 86
    Points : 46
    Points
    46
    Par défaut
    Citation Envoyé par JWhite
    Problème #1 : normal tu fais un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $row_ov2= mysql_fetch_assoc($ov2);
    dans le vide avant ton while, supprime le et ça ira mieux.


    Problème #2 : normal aussi tu écris tout à la suite, il faut ajouter un saut de ligne quand tu écris, peut-être avec "\n"...
    pour le probleme numero 1 tu avasi raison merci
    pour le pb numero 2

    j ai modifié la ligne comme cela :

    $navman = $row_ov2['lon_ad'].",".$row_ov2['la_ad'].",".$row_ov2['nom_ad']."\n";

    je n obtiens pas le resultat souhaité quand je l ouvre dans blocnote

    3.306180,50.996750,DATS 24
    5.775880,50.637910,DATS 24
    3.195640,50.812460,DATS 24
    4.013290,50.838990,DATS 24

    mais bon ce nest pas trop bloquant.

    par compte une fois avoir fait ce fichier csv je souhaite rediriger le visiteur vers ce fichier afin qu'il puisse le telecharger sur sont pc et effacer tout de suite apres le telechargement le fichier genéré avez vous une idée car je ne sais pas comment detecté que le fichier est fini de telecharger pour le supprimer aprés

    merci pour votre aide

  4. #4
    Membre expert Avatar de Amara
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 688
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 688
    Points : 3 115
    Points
    3 115
    Par défaut
    Euh c'est quoi le problème c'est exactement ce que tu disais vouloir dans ton premier post

    Pour la destruction du fichier voir ce topic :
    http://www.developpez.net/forums/sho...d.php?t=260577

    Bon courage.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    86
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 86
    Points : 46
    Points
    46
    Par défaut
    non c moi qui me suis mal exprimé : antre les resultat il y a un "rectangle"

    je symbolise le "rectangle " par #

    3.306180,50.996750,DATS 24 # 5.775880,50.637910,DATS 24 #5.195640,50.812460,DATS 24 # 4.013290,50.838990,DATS 24

    et non un afichage du type :

    3.306180,50.996750,DATS 24
    5.775880,50.637910,DATS 24
    3.195640,50.812460,DATS 24
    4.013290,50.838990,DATS 24

    sans les rectangle

    je sais c du pinaillage excuse moi merci pour tes corections

  6. #6
    Membre expert Avatar de Amara
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 688
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 688
    Points : 3 115
    Points
    3 115
    Par défaut
    Ok, il doit y avoir mieux que le \n je ne sais pas...

  7. #7
    Membre averti Avatar de johweb
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    342
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2003
    Messages : 342
    Points : 367
    Points
    367
    Par défaut
    \r\n au lieu de \n ? ^^

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    86
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 86
    Points : 46
    Points
    46
    Par défaut
    Citation Envoyé par johweb
    \r\n au lieu de \n ? ^^
    super ca marche merci

  9. #9
    Membre averti Avatar de johweb
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    342
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2003
    Messages : 342
    Points : 367
    Points
    367
    Par défaut
    ^^

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    86
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 86
    Points : 46
    Points
    46
    Par défaut
    Citation Envoyé par JWhite

    Pour la destruction du fichier voir ce topic :
    http://www.developpez.net/forums/sho...d.php?t=260577

    Bon courage.
    pour le probleme 2 non ce n est pas ce que je ch:

    voila mon pb :explication

    le Visiteur fait une extraction de ma base de donnée en csv (avec le script ci dessus) fichier : out1.csv

    a la fin de cette extraction le script redirige le visiteur vers ce fichier out1.csv (je ne sais pas comment faire)

    le visteur enregiste le fichier sur son ordi

    a la fin de l'enregistrement le script efface sur mon serveur le fichier out1.csv

    car si je garde chaque fichier sur mon serveur je vais rapidement sature l'espace disque

    merci pour votre aide

  11. #11
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 354
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 354
    Points : 15 700
    Points
    15 700
    Par défaut
    il suffit que tu généres ton fichier comme indiqué si dessous et tu n'auras pas besoin de t'occuper de la suppression :
    http://php.developpez.com/faq/?page=..._forcedownload

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    86
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 86
    Points : 46
    Points
    46
    Par défaut
    Citation Envoyé par mathieu
    il suffit que tu généres ton fichier comme indiqué si dessous et tu n'auras pas besoin de t'occuper de la suppression :
    http://php.developpez.com/faq/?page=..._forcedownload
    merci pour ta reponse et ton aide .... mais la honnetement ca me depasse ou plutot ca depasse mes competance...
    je ne suis pas un pro et pas de formation programmeur ... je ne vois donc pas comment faire le lien entre les explications du poste http://php.developpez.com/faq/?page=..._forcedownload et mon script (voir le 1er message)

    peut etre peux tu me faire la transformation ? si tu as du temps a perdre

  13. #13
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 354
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 354
    Points : 15 700
    Points
    15 700
    Par défaut
    Citation Envoyé par gpsevasion
    merci pour ta reponse et ton aide .... mais la honnetement ca me depasse ou plutot ca depasse mes competance...
    je ne suis pas un pro et pas de formation programmeur ... je ne vois donc pas comment faire le lien entre les explications du poste http://php.developpez.com/faq/?page=..._forcedownload et mon script (voir le 1er message)

    peut etre peux tu me faire la transformation ? si tu as du temps a perdre
    déjà dans ton script au lieu d'écrire dans ton fichier au moment de la boucle "while" concatène les information pour mettre tout ton fichier dans une variable $contenu

    ensuite dans le script de la FAQ tu dois renseigner les choses suivantes :
    - tu peux supprimer la création de la constante CFG_SYSTEM_FILENAME
    - CFG_SEND_FILENAME ça sera le nom proposé pour le téléchargement
    - CFG_FILESIZE : taille de ta chaine $contenu à calculer avec la fonction http://php.net/strlen
    - CFG_FILE_MD5 : hachage MD5 de la chaine, à calculer avec http://php.net/md5
    - à la fin, après le dernier "header" tu fais juste "echo $contenu;" et c'est fini

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    86
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 86
    Points : 46
    Points
    46
    Par défaut voila la solution
    Avec ce script vous pouvez donc extraire d'une base de données les differnts champs et les exporter dans un fichier csv sans enregister le fichier sur le serveur de votre hebergeur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    <?
    $contenu = "";
    $hostname_table = "localhost";
    $database_table = "table";
    $username_table = "root";
    $password_table = "";
     
    $table = mysql_pconnect($hostname_table, $username_table, $password_table) or die(mysql_error());
    mysql_select_db($database_table, $table);
    $query_adresse = "SELECT * FROM poi_adresse WHERE valid_ad = 1  ORDER BY nom_ad ASC";
    $adresse= mysql_query($query_adresse, $table) or die(mysql_error());
    $totalRows_adresse= mysql_num_rows($adresse);
     
    $nomfichier = "out.csv";
    while($row_adresse= mysql_fetch_assoc($adresse)){  
    $ligne = $row_adresse['nom_ad']." , ".$row_adresse['ville_ad']."\r\n";
    $contenu = $contenu.$ligne;
    }
    //
    // Constantes de configuration
    //
    define('CFG_SEND_FILENAME', $nomfichier);
    //
    // Constantes à ne pas modifier
    //
    define('CFG_FILESIZE', strlen($contenu));
    define('CFG_FILE_MD5', md5($contenu));
    define('CFG_DATE_FORMAT', 'D, d M Y H:i:s');
    //
    // Quelques éléments nécessaires
    //
    error_reporting(0);
    ini_set('zlib.output_compression', 0);
     
    /*
     *Début de l'envoi
     */
    //
    // Gestion du cache
    //
    header('Pragma: public');
    header('Last-Modified: '.gmdate(CFG_DATE_FORMAT).' GMT');
    header('Cache-Control: must-revalidate, pre-check=0, post-check=0, max-age=0');
    //
    // Informations sur le contenu à envoyer
    //
    header('Content-Tranfer-Encoding: none');
    header('Content-Length: '.CFG_FILESIZE);
    header('Content-MD5: '.base64_encode(CFG_FILE_MD5));
    header('Content-Type: application/octetstream; name="'.CFG_SEND_FILENAME.'"');
    header('Content-Disposition: attachement; filename="'.CFG_SEND_FILENAME.'"');
    //
    // Informations sur la réponse HTTP elle-même
    //
    header('Date: '.gmdate(CFG_DATE_FORMAT, time()).' GMT');
    header('Expires: '.gmdate(CFG_DATE_FORMAT, time()+1).' GMT');
    header('Last-Modified: '.gmdate(CFG_DATE_FORMAT, time()).' GMT');
     
     
    //   
    //fermeture
    mysql_free_result ($adresse);
    mysql_close ($table);
     
    echo "$contenu" ;
     
    ?>

    bravo a vous tous et merci pour votre aide et pistes de reflexions.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 02/04/2013, 09h31
  2. [PHP 4] Exporter une table dans un fichier .csv
    Par silbano85 dans le forum Langage
    Réponses: 7
    Dernier message: 20/07/2011, 11h27
  3. extraction d'une table au format d'un fichier csv
    Par smutmutant2003 dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 06/06/2007, 16h55
  4. décharger une table dans un fichier CSV
    Par shrek7577 dans le forum SQL
    Réponses: 3
    Dernier message: 22/12/2006, 16h44
  5. extraction donnee d'une table dans un fichier
    Par 80stephanie dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 17/03/2006, 10h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo