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 confirmé
    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
    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 confirmé
    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
    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 confirmé
    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
    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 confirmé
    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
    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
    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
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  6. #6
    Membre confirmé
    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
    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
    Par défaut
    J'ai complété ma réponse.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  8. #8
    Membre confirmé
    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
    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