[RESOLU] Mise en forme fichier CSV sur excel via PHP

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [RESOLU] Mise en forme fichier CSV sur excel via PHP

Re: Mise en forme fichier CSV sur excel via PHP

par mateo2996 » 04 déc. 2013, 11:10

C'EST BON !! J'avais oublier de rentrer un code dans la ligne de commande ><

Merci encore pour ton aide ORENX et xTG :) je met sujet résolue pour les gens qui auraient le même problème que moi !

Re: Mise en forme fichier CSV sur excel via PHP

par mateo2996 » 03 déc. 2013, 22:12

Personne ?
Je suis toujours en galère :/

Re: Mise en forme fichier CSV sur excel via PHP

par mateo2996 » 03 déc. 2013, 17:42

Tu peux détailler s'il te plais ? xD (désoler je suis pas doué)

Au passage je fait en plus des miennes tes lignes de commandes une par une et je suis plutôt bien partit je pense par contre je ne comprend pas quoi mettre précisement à la place de cette ligne :

$file = "id;val;date\n";

A la place de "id;val;date\n";

(j'ai renommer "Fichier" En "File" j'espère que çà ne change rien)

J'ai vue aussi que tu avait "éditer" plusieurs fois ton message avec les lignes de commandes que tu m'avais donné, et donc par apport a :
$sql = "SELECT id,col1,col2 FROM maTable WHERE filtre = ?" ;
$req = $database-> prepare( $sql );
$req-> execute( array( $filtre ) );

Il y'a des chose à modifier à part le "?" et : col1,col2 ? car je ne sais pas quoi mettre à la place de ceux là.

Re: Mise en forme fichier CSV sur excel via PHP

par orenx22 » 03 déc. 2013, 17:34

Ce qui est en rouge est a changer en fonction de tes configurations serveur et tes besoins de résultats SQL :

$dsn = "mysql:dbname=maBaseDeDonnees;host=127.0.0.1;port=3306;" ;

$database = new PDO( $dsn, 'root', 'mdp' );

$fichier = "id;col1;col2\n"; // libelle des colonnes de ton csv
$filtre = 'unFiltre' ;

$sql = "SELECT id,col1,col2 FROM maTable WHERE filtre = ?" ;
$req = $database-> prepare( $sql );
$req-> execute( array( $filtre ) );

foreach( $req-> fetchAll( PDO::FETCH_ASSOC ) as $row )
{
$fichier .= implode( ';', $row )."\n" ;
}

header( "Content-type: application/vnd.ms-excel" );
header( "Content-disposition: attachment; filename=fichier.csv" );
print $fichier ;
exit ;

Pourrais-tu indiquer quelle est ta requête SQL pour obtenir ton tableau CSV

Re: Mise en forme fichier CSV sur excel via PHP

par mateo2996 » 03 déc. 2013, 17:13

Donc voici ce que j'ai modifier :

<?php

<?php

$dsn = "mysql:dbname=maBaseDeDonnees;host=L'ip de la base de donée ;port=3306 (J'ai laisser avec et sans pour voir);" ;

$database = new PDO( $dsn, 'Administrateur', 'Le mot de passe' );

$fichier = "id;val;date\n"; (Là je ne sais pas trop quoi modifier, mes 7 filtres deffilent sont : Semaine/Année/Matricule/Secteur/Site/Fournisseur/Cloturer cette semaine.)

$sql = "SELECT * FROM maTable" ; La rien modifier

foreach( $database-> query( $sql ) as $row ) Non plus
{

$fichier .= implode( ';', $row )."\n" ; Non plus
}

header( "Content-type: application/vnd.ms-excel" ); Non plus
header( "Content-disposition: attachment; filename=Nom de mon fichier.csv" );
print $fichier ;
exit ;

Re: Mise en forme fichier CSV sur excel via PHP

par mateo2996 » 03 déc. 2013, 17:04

Donc j'ai bien fait comme tu à dit et je l'ai remplacer à la place de :
<?php

$file = 'Relevé heures intérimaires.csv';
header('Content-disposition: '.$file);
header('Content-type: application/octetstream');
header('Content-Type: text/csv');

header('Content-Disposition: attachment; filename="Relevé heures intérimaires.csv"');

readfile($file);

Mais la sa m'enmêne sur une nouvelle onglet mais c'est tout rien ne se passe.

Re: Mise en forme fichier CSV sur excel via PHP

par mateo2996 » 03 déc. 2013, 16:47

Tu dois changer dans le script :

maBaseDeDonnees par le nom de la tienne.
dans l'objet PDO, remplacer 'root' et null par le bon login et mot de passe de la base de données.
dans la premier variable $fichier, tu dois donner les noms des différentes colonnes que tu veux récupérer dans ton fichier CSV.
changer la requête SQL dans la variable $sql en fonction de tes filtres souhaité.

Pour le reste rien ne changera.

Après si tu ne comprends pas, je te peux pas plus t'aider. Commence par le commencement pour te lancer dans la programmation PHP. Apprends ce qu'est une variable, un pointeur, une condition, une boucle, une fonction, un objet.. et tout le reste avant de ce lancer dans le développement de quelque chose ;)

Donc le port et l'ip je ne change pas ? et pour les colonnes je met en gros, à la place, les rubriques defillente ? car si c'est çà j'en ai 7 (critère)
ou bien c'est à la ligne sql

Oui t'inquiète pas ! :) j'ai des tones de bouquins à coter de moi ^^

Re: Mise en forme fichier CSV sur excel via PHP

par mateo2996 » 03 déc. 2013, 16:43

Donc j'ai bien modifier certaines info' :

<?php

$dsn = "mysql:dbname=(NomDeMaBaseDeDonnée);host=(L'IP de La base de donnée;" ; par contre je n'ai pas de port j'ai quand même demander à mon collègue il m'a répondu la même chose.

$database = new PDO( $dsn, 'root', null ); (rien toucher ici)

$fichier = "id; col1; col2 \n"; (rien toucher ici non plus)

$sql = "SELECT id, val, date FROM maTable" ; (rien toucher ici non plus)

foreach( $database-> query( $sql ) as $row ) (ici non plus)
{
$fichier .= implode( '; ', $row ).' \n' ; (ici non plus)
}

header( "Content-type: application/vnd.ms-excel" ); (ici non plus)
header( "Content-disposition: attachment; filename=(Nom de mon fichier).csv" );
print $fichier ;
exit ;

Re: Mise en forme fichier CSV sur excel via PHP

par orenx22 » 03 déc. 2013, 16:42

Tu dois changer dans le script :

maBaseDeDonnees par le nom de la tienne.
dans l'objet PDO, remplacer 'root' et null par le bon login et mot de passe de la base de données.
dans la premier variable $fichier, tu dois donner les noms des différentes colonnes que tu veux récupérer dans ton fichier CSV.
changer la requête SQL dans la variable $sql en fonction de tes filtres souhaité.

Pour le reste rien ne changera.

Après si tu ne comprends pas, je te peux pas plus t'aider. Commence par le commencement pour te lancer dans la programmation PHP. Apprends ce qu'est une variable, un pointeur, une condition, une boucle, une fonction, un objet.. et tout le reste avant de ce lancer dans le développement de quelque chose ;)

Re: Mise en forme fichier CSV sur excel via PHP

par mateo2996 » 03 déc. 2013, 16:32

Oui,

Re: Mise en forme fichier CSV sur excel via PHP

par orenx22 » 03 déc. 2013, 16:31

Utilises-tu une base de données ?

Re: Mise en forme fichier CSV sur excel via PHP

par mateo2996 » 03 déc. 2013, 16:27

Ok, j'ai compris mais là tu parle à un novice/débutant ^^

Tu pourrais m'expliquer en vitesse ce que tu entend par modifier en fonction de mes besoin SQL ? Quelle ligne précisement je dois modifier ?
Au passage désoler de t'ennuyer :/

Re: Mise en forme fichier CSV sur excel via PHP

par orenx22 » 03 déc. 2013, 16:24

Quelles sont les étapes :

1ère : formulaire de sélection des différents filtre.
2ème : Affichage du résultat de la requête SQL en HTML lisible dans ton navigateur. Sur cette page un lien pour récupérer le même résultat en format CSV.
3ème : Au cliquant sur lien, tu es redirigé vers un script comme celui que j'ai fait dans le post plus haut. Automatiquement un téléchargement va être proposé avec le contenu de ta requête en CSV cette fois.

Il est clair que le script que j'ai fournis doit être modifié en fonction des tes besoins SQL.

Re: Mise en forme fichier CSV sur excel via PHP

par mateo2996 » 03 déc. 2013, 16:20

Et donc j'ai juste à copie/coller le lien ?

A la place d'autre chose ou en plus ?

Re: Mise en forme fichier CSV sur excel via PHP

par orenx22 » 03 déc. 2013, 16:17

Tu veux donc faire un export d'une requête SQL en fichier CSV.

Avec la manipulation que tu fais, tu enregistre en fait la page web complète. Il est claire que ton tableur va donc en faire une mauvaise lecture. Pour moi tu dois donc afficher ta requête SQL par les moyens classique (html) et proposé un lien de téléchargement en CSV. Ce lien renverrait à un script de ce genre :
<?php

$dsn = "mysql:dbname=maBaseDeDonnees;host=127.0.0.1;port=3306;" ;

$database = new PDO( $dsn, 'root', '' );

$fichier = "id;col1;col2\n";
$filtre = 'unFiltre' ;

$sql = "SELECT id,col1,col2 FROM maTable WHERE filtre = ?" ;
$req = $database-> prepare( $sql );
$req-> execute( array( $filtre ) );

foreach( $req-> fetchAll( PDO::FETCH_ASSOC ) as $row )
{
    $fichier .= implode( ';', $row )."\n" ;
}

header( "Content-type: application/vnd.ms-excel" );
header( "Content-disposition: attachment; filename=fichier.csv" );
print $fichier ;
exit ;
Ciao