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

Langage PHP Discussion :

Export PHP / csv, xls


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Femme Profil pro
    Webdesigner
    Inscrit en
    Avril 2014
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Webdesigner

    Informations forums :
    Inscription : Avril 2014
    Messages : 92
    Points : 53
    Points
    53
    Par défaut Export PHP / csv, xls
    Bonsoir à tous,

    J'utilise le script suivant pour télécharger données depuis une BDD au format csv :

    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
    <?php 
    require "connect.php";
     
    $csv_output = "N°,nom,prenom"; 
    $csv_output .= "\n"; 
     
    $req = $bdd->query('SELECT * FROM candidats');
    $donnees = $req->fetch();
     
    while ($donnees = $req->fetch()) { 
    $csv_output .= "$donnees[id],$donnees[nom],$donnees[prenom]\n"; 
    } 
     
    header("Content-type: application/vnd.ms-excel"); 
    header("Content-disposition: attachment; filename=AddressBook_" . date("Ymd").".csv"); 
    print $csv_output; 
    exit; 
    ?>
    J'ai 2 problèmes avec ce script :

    1/ Il ignore systématiquement le 1er enregistrement de ma BDD répondant aux critères de ma requête SQL

    2/ Je souhaite le modifier pour export des données au format xls. Pour ce faire je remplace l'extension .csv par .xls (ou .xlsx) mais ça ne fonctionne pas et j'obtiens l'erreur suivante :
    Le format du fichier que vous tentez d'ouvrir, "nom du fichier", est différent de celui spécifié par l'extension de fichier.
    .
    Après avoir cherché il me semble que le type MIME est correct pour export en Excel...?

    Merci par avance pour votre aide.

  2. #2
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Salut,
    Citation Envoyé par E. Nigma Voir le message
    1/ Il ignore systématiquement le 1er enregistrement de ma BDD répondant aux critères de ma requête SQL
    Supprime la ligne 8 : $donnees = $req->fetch();, c'est elle qui lit la première ligne et pousse le curseur sur l'enregistrement suivant.

    Un format .csv est différent d'un format .xls et Excel vérifie à l'ouverture la correspondance entre le contenu en cours d'ouverture et le format attendu, laisse en .csv ou construit carrément un fichier Excel avec PHPExcel

  3. #3
    Membre du Club
    Femme Profil pro
    Webdesigner
    Inscrit en
    Avril 2014
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Webdesigner

    Informations forums :
    Inscription : Avril 2014
    Messages : 92
    Points : 53
    Points
    53
    Par défaut
    Yessss ! Nickel merci pour la suppr de la ligne 8.
    Je vais laisser en csv pour le moment alors ok.
    Merci (again) rawsrc

  4. #4
    Membre du Club
    Femme Profil pro
    Webdesigner
    Inscrit en
    Avril 2014
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Webdesigner

    Informations forums :
    Inscription : Avril 2014
    Messages : 92
    Points : 53
    Points
    53
    Par défaut
    Je reviens sur cette discussion car je constate une nouvelle bizarrerie.

    Lorsque j'utilise le script ci-dessous aucun problème :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    $csv_output = "N°;Hôtel;Nom;Prénom"; 
    $csv_output .= "\n"; 
     
    $req = $bdd->query('SELECT * FROM matable WHERE nomHotel="'.$_POST['nomHotel'].'"');
     
    while ($donnees = $req->fetch()) { 
    $csv_output .= "$donnees[id];$donnees[nomHotel];$donnees[nom];$donnees[prenom]\n"; 
    } 
     
    header("Content-type: application/vnd.ms-excel"); 
    header("Content-disposition: attachment; filename=Export_Chambres_" . date("Ymd").".csv"); 
    print $csv_output; 
    exit;
    Mais lorsque je tente de récupérer le contenu du champ "21mars" comme suit, j'ai l'erreur
    Parse error: syntax error, unexpected T_STRING, expecting ']' " pour la ligne 7 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    $csv_output = "N°;Hôtel;Nom;Prénom;21 mars"; 
    $csv_output .= "\n"; 
     
    $req = $bdd->query('SELECT * FROM matable WHERE nomHotel="'.$_POST['nomHotel'].'"');
     
    while ($donnees = $req->fetch()) { 
    $csv_output .= "$donnees[id];$donnees[nomHotel];$donnees[nom];$donnees[prenom];$donnees[21mars]\n" 
    } 
     
    header("Content-type: application/vnd.ms-excel"); 
    header("Content-disposition: attachment; filename=Export_Chambres_" . date("Ymd").".csv"); 
    print $csv_output; 
    exit;
    il semblerait que le script n'aime pas les chiffres dans le nom des champs...?? Et qu'il faille échapper un caractère ? Mais lequel et comment ?

    Merci par avance

  5. #5
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Il manque un point virgule pour finir la ligne 7.

    Et cite tes colonnes dans la requête, tu peux ainsi les rassemblées directement pour former ta ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $req = $bdd->query('SELECT id, nomHotel, nom, prenom, 21mars FROM matable WHERE nomHotel="'.$_POST['nomHotel'].'"');
     
    while ($donnees = $req->fetch(PDO::FETCH_ASSOC)) { 
         $csv_output .= implode(';', $donnees) . "\n";
    }
    Pour le problème rencontré, PHP est visiblement gêné par les index de tableau commençant par des chiffres quand ils sont dans une syntaxe de guillmets doubles :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    echo "$donnees[a1]"; // ok
    echo "$donnees[1a]"; // pas bon

  6. #6
    Membre du Club
    Femme Profil pro
    Webdesigner
    Inscrit en
    Avril 2014
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Webdesigner

    Informations forums :
    Inscription : Avril 2014
    Messages : 92
    Points : 53
    Points
    53
    Par défaut
    Salut sabotage,

    C'est une erreur de copie de mon code.
    J'ai bien un point virgule à la fin de la ligne 7.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    $csv_output = "N°;Hôtel;Nom;Prénom;21 mars"; 
    $csv_output .= "\n"; 
     
    $req = $bdd->query('SELECT * FROM matable WHERE nomHotel="'.$_POST['nomHotel'].'"');
     
    while ($donnees = $req->fetch()) { 
    $csv_output .= "$donnees[id];$donnees[nomHotel];$donnees[nom];$donnees[prenom];$donnees[21mars]\n";
    } 
     
    header("Content-type: application/vnd.ms-excel"); 
    header("Content-disposition: attachment; filename=Export_Chambres_" . date("Ymd").".csv"); 
    print $csv_output; 
    exit;
    Visiblement l'erreur me dit qu'il manque un ']' ??? je ne vois vraiment pas où placer ce bracket...

  7. #7
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    J'ai complété ma réponse.

  8. #8
    Membre du Club
    Femme Profil pro
    Webdesigner
    Inscrit en
    Avril 2014
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Webdesigner

    Informations forums :
    Inscription : Avril 2014
    Messages : 92
    Points : 53
    Points
    53
    Par défaut
    Salut sabotage,

    Merci ! L'export fonctionne très bien maintenant en rassemblant toutes mes colonnes pour former ma ligne


    Pour le 2e point :
    Pour le problème rencontré, PHP est visiblement gêné par les index de tableau commençant par des chiffres quand ils sont dans une syntaxe de guillmets doubles :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    echo "$donnees[a1]"; // ok
    echo "$donnees[1a]"; // pas bon
    Est-ce qu'il vaut mieux du coup éviter de faire commencer les index par des chiffres ? Ou utiliser plutôt une syntaxe de guillemets simples " ' " (là je suis peut-être en train de dire une grosse bêtise...) ?

Discussions similaires

  1. Exportation en csv php objet/pdo
    Par Jerem1513 dans le forum Langage
    Réponses: 0
    Dernier message: 08/01/2013, 17h40
  2. Formulaire PhP ne s'exporte pas en .xls
    Par Guillaume 134679 dans le forum Langage
    Réponses: 8
    Dernier message: 16/06/2011, 01h49
  3. Export de table/datatable vers csv, xls, etc.
    Par goulmak dans le forum GWT et Vaadin
    Réponses: 1
    Dernier message: 10/11/2009, 14h37
  4. Couleur du texte en export CSV / XLS
    Par afrodje dans le forum ASP
    Réponses: 7
    Dernier message: 17/02/2009, 13h23
  5. [SQL] exportation php vers csv
    Par yveslens dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 10/02/2007, 07h06

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