Exportation d'une requete vers Excel via PHP

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

17 mai 2006, 14:32

Tout a fait

La méthodologie à suivre est :
- créer un fichier contenant tes données
- ouvrir une page où tu forces le téléchargement de ce fichier
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Ish
Eléphant du PHP | 200 Messages

17 mai 2006, 14:49

Juste, la syntaxe pour le Into Outfile , c'est bien ça ....
Select nom, prenom, age 
INTO OUTFILE c:/.../Mes Documents/result.csv
FROM etudiant
Where sexe="F"
???
La vie est faite d'imprevu, et l'imprevu fait la vie
Gardez la peche !!

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

17 mai 2006, 14:53

avec des ' autour du chemin, oui ;)
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Ish
Eléphant du PHP | 200 Messages

17 mai 2006, 16:27

OK ok j'ai ajouté le "INTO OUFILE" dans ma requete et j'ai un fichier ".csv" qui s'enregistre à la localisation voulu...

Le seul hic dans le truc,c'est que quand j'ouvre mon fichier CSV, au lieu d'avoir "nom;prenom;..;"
J'ai des choses ecrite dans la premiere case seulement ... espacé par des espece de carré...
La vie est faite d'imprevu, et l'imprevu fait la vie
Gardez la peche !!

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

17 mai 2006, 16:33

nouvelle cellule : ,
nouvelle ligne : ;

Tu as regardé dans la doc ? Tout ceci est paramètrable, ce n'est peut-être pas par défaut :
http://dev.mysql.com/doc/refman/5.0/fr/select.html
SELECT ... INTO OUTFILE est le complément de LOAD DATA INFILE; La syntaxe pour la partie export_options de la requête se compose des mêmes clauses FIELDS et LINES que celles utilisées avec la commande LOAD DATA INFILE. See Section 13.1.5, « Syntaxe de LOAD DATA INFILE ».
Cherche un peu tout seul

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

17 mai 2006, 16:43

Effectivement, comme le dit Ouckileou, SELECT INTO OUTFILE n'est pas configuré par défaut sur le format CSV ;)

rappel, en csv, les champs sont séparés par des ;, encadrés par des " et les lignes sont séparées par des \n ;)

Mais comme Ouckileou, je vais juste te dire "a toi de jouer" ;)
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Ish
Eléphant du PHP | 200 Messages

17 mai 2006, 16:50

Ok ok ok ... merci à vous ... je vais voir ça .....
Je vais me débrouiller tout seul et approffondir la chose
La vie est faite d'imprevu, et l'imprevu fait la vie
Gardez la peche !!

Ish
Eléphant du PHP | 200 Messages

18 mai 2006, 12:00

Bonjour à tous,

bon j'ai regardé un peu partout, fouillé les tutaux et mis mon nez dans le code .... et j'ai quelque reponse à mes question, mais un probleme subiste

Ma solution et d'ouvrir un fichier .csv et d'ecrire dedans avec fopen() et fwrite() ... je pense que ca peut etre pas mal !!!

voila mon code
$i=0; $j=0;

    $file = ("fchierText.txt");  // le fichier doit déjà exister
    if(!$myfile = fopen($file, "w")) {    //on ouvre le fichier
        echo "erreur: ";
        echo "'$filename' n'existe pas!\n";
        exit;
    } else {
        $res=mysql_query($query);
        $tab=mysql_fetch_array($res);
        for ($j ; $j<count($tab[$j]) ; $j++) {
          fwrite($file, '\n');
          for ($i ; $i<count($tab) ; $i++) {
            fwrite($file, $tab[$i][$j].';' );
          }
        }
        fclose($file);
    }
Voyez-vous des erreur à vu de nez ???
car il y en a mais je ne comprend pas pourkoi, voici les messages d'erreur

Code : Tout sélectionner

Warning: fwrite(): supplied argument is not a valid stream resource in c:\...\p0.php on line 229 Notice: Undefined offset: 122 in c:\...\p0.php on line 229 Warning: fclose(): supplied argument is not a valid stream resource in c:\...\p0.php on line 232
et l'erreur est géneré bcp de fois ...
bref ... vous avez une idée ??
La vie est faite d'imprevu, et l'imprevu fait la vie
Gardez la peche !!

Ish
Eléphant du PHP | 200 Messages

18 mai 2006, 12:14

Je viens de regler un premier probleme ....;
Car je faisais un fwrite sur le nom du fichier et pas sur son ouverture
fwrite($file, '\n');
au lieu de
fwrite($myfile, '\n'),
pareil pour le fclose() ...
mais reste toujours la Notice :

Code : Tout sélectionner

Notice: Undefined offset: 122 in c:\...\p0.php on line 229
Avez vous une idée ... ?
La vie est faite d'imprevu, et l'imprevu fait la vie
Gardez la peche !!

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

18 mai 2006, 12:18

La cellule 122 de ton tableau n'existe pas, c'est tout
MLais comme on ne sait pas à quelle ligne c'est, on ne peut pas t'aider.
Met des echos de contrôle, des cellules de ton tableau, des compteurs, pour essayer de voir si quelque chose cloche

M'enfin je suis étonné de voir que tu as finalement choisi cette solution alors que l'autre était plus rapide et te faisait ça toute seule, sans boucle et sans erreurs :D

Ish
Eléphant du PHP | 200 Messages

18 mai 2006, 12:21

Pour la solution, fallait explorer l'ensemble du php ...

Apres en fait je fais une requete, et cela me genere un tableau à 2 dimensions (normalement puisque, il ya les lignes et les colonnes)

puis j'ecris dans mon fichier txt

qu'est-ce que t'en pense ??
La vie est faite d'imprevu, et l'imprevu fait la vie
Gardez la peche !!

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

18 mai 2006, 12:32

Ce que je ne comprend pas, c'est ça :
for ($j ; $j<count($tab[$j]) ; $j++)
A mon humble avis, tu tentes de parcourir la seconde dimension avant la 1ere dimension

Essaye dans l'autre sens
for ($i ; $i<count($tab) ; $i++) {
  fwrite($file, '\n');
  for ($j ; $h<count($tab[$i]) ; $j++) {
    fwrite($file, $tab[$i][$j].';' );
  }
}
EDIT :
Je crois que le problème se situe plutôt sur la manière dont tu récupéres les données de ta table.
$tab contient une seule ligne de résultat
Regarde ce tuto :
http://phpdebutant.org/article66.php
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Ish
Eléphant du PHP | 200 Messages

18 mai 2006, 14:23

J'ai écris ce code
$res=mysql_query($query);
while ($tab=mysql_fetch_array($res)) {
    echo "</br>";
    for ($j; $j<count($tab); $j++) {
        fwrite($myfile,$tab[$j].',');
        echo $tab[$j].','; }
}
mais ca ne m'affiche que la premiere ligne alors que j'en ai 10 !!!
le probleme est que j'ai une 20aine de colonne et je veux toutes les affichées ... je ne vais pas m'muser à faire des $tab['nom'] pour toute les colonnes ...
La vie est faite d'imprevu, et l'imprevu fait la vie
Gardez la peche !!

Ish
Eléphant du PHP | 200 Messages

18 mai 2006, 14:27

De plus il ne m'affiche que les cases où il y a des entiers .... hors certain champ sont du varchar(30) ....
La vie est faite d'imprevu, et l'imprevu fait la vie
Gardez la peche !!

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

18 mai 2006, 15:15

plusieurs remarques :
  • la fonction implode() te permet de concatener un tableau en une chaine de caractère. Ca sera plus optimisé que ta boucle for dans la boucle while
  • donnes nous la requete pour voir
  • c'est normal qu'il n'y ai qu'une ligne, jamais tu n'affiche ou n'enregistre de retour à la ligne ;)
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer