Page 1 sur 1

Récupération de données

Posté : 02 août 2007, 19:31
par ju3979
Bonsoir

Je cherche une solution pour récupérer les données qui sont dans ma base sql et les mettre dans un tableau excel
J'aimerais que l'utilisateur ait la possiblité d'extraire uniquement les enregistrements d'une date précise

Est ce que cela est possible

Merci pour votre aide

Posté : 03 août 2007, 07:24
par jpaul
Bonjour,

Oui c'est possible. On peut :
1) récupérer des données d'une base sql (en général MySql) à partir de PHP avec select
2) n'en sélectionner qu'une partie avec where
3) en faire un tableau excel.

Pour le tableau excel, il y a différentes solutions :
a) le format sylk (fichier texte lisible par excel)
b) une solution évoquée par Tictac : http://www.phpfrance.com/forums/voir_re ... php#139926
c) php_writeexcel (une bibliothèque spécifique pour générer des tableaux excel)
d) si tu as installé excel sur le serveur où tu as php tu peux aussi utiliser cela : http://www.phpfrance.com/forums/voir_re ... php#192746

Il y a probablement encore d'autres méthodes, mais je n'ai pas poussé plus loin ce sujet.

Posté : 03 août 2007, 10:29
par ju3979
Voici le script que j'ai essayé de faire mais il ne fonctionne pas il me met l'erreur :

Parse error: parse error, unexpected T_VARIABLE in c:\program files\easyphp1-7\www\export.php on line 78

<?php
// Connection à la base de donnée.
mysql_connect("localhost","root","");
mysql_select_db("base1");

// Sélection des données.
$result=mysql_query("select * from livraisons");

// Functions d'exportation vers Excell.
function xlsBOF() {
echo pack("ssssss", 0x809, 0x8, 0x0, 0x10, 0x0, 0x0);
return;
}

function xlsEOF() {
echo pack("ss", 0x0A, 0x00);
return;
}

function xlsWriteNumber($Row, $Col, $Value) {
echo pack("sssss", 0x203, 14, $Row, $Col, 0x0);
echo pack("d", $Value);
return;
}

function xlsWriteLabel($Row, $Col, $Value ) {
$L = strlen($Value);
echo pack("ssssss", 0x204, 8 + $L, $Row, $Col, 0x0, $L);
echo $Value;
return;
}

header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Content-Type: application/force-download");
header("Content-Type: application/octet-stream");
header("Content-Type: application/download");;
header("Content-Disposition: attachment;filename=orderlist.xls ");
header("Content-Transfer-Encoding: binary ");

xlsBOF();

// Insertion de la ligne 1 : Titre de la feuille.
xlsWriteLabel(0,0,"Livraisons conseiller Cofidis.");

// Insertion des entêtes de colonnes.
xlsWriteLabel(2,0,"Civilite.");
xlsWriteLabel(2,1,"Nom");
xlsWriteLabel(2,2,"Prenom");
xlsWriteLabel(2,3,"Adresse");
xlsWriteLabel(2,4,"Ville");
xlsWriteLabel(2,5,"Code postal");
xlsWriteLabel(2,6,"Telephone");
xlsWriteLabel(2,7,"Doucments à fournir");
xlsWriteLabel(2,8,"Conseiller");
xlsWriteLabel(2,9,"Rendez vous");
xlsWriteLabel(2,10,"Remarque");
xlsWriteLabel(2,11,"Date");

$xlsRow = 3;

// Insertion des données dans chaque ligne
while($row=mysql_fetch_array($result)){
xlsWriteLabel($xlsRow,0,$row['civilite']);
xlsWriteLabel($xlsRow,1,$row['nom']);
xlsWriteLabel($xlsRow,2,$row['prenom']);
xlsWriteLabel($xlsRow,3,$row['adresse']);
xlsWriteLabel($xlsRow,4,$row['ville']);
xlsWriteLabel($xlsRow,5,$row['codepostal']);
xlsWriteLabel($xlsRow,6,$row['telephone']);
xlsWriteLabel($xlsRow,7,$row['documentsafournir']);
xlsWriteLabel($xlsRow,8,$row['conseiller']);
xlsWriteLabel($xlsRow,9,$row['rendezvousr']);
xlsWriteLabel($xlsRow,10,$row['remarque']);
xlsWriteLabel($xlsRow,11,$row['date']);

$xlsRow++;
}
xlsEOF();
exit();

?>

Pouve vous m'aider

D'avance merci

Posté : 03 août 2007, 10:49
par Ryle
Modération :
ju3979, afin d'améliorer la lisibilité de ton message,
pense à utiliser les balises [code] ou [php] (selon le langage utilisé).

Elles sont disponibles au-dessus de la zone de saisie de ton message
lorsque tu postes un nouveau message.

Des indications sont disponibles sur la manière de mettre en forme vos messages dans la FAQ


Merci également d'isoler le code autour de la ligne 78 et d'indiquer celle-ci puisque c'est elle qui pose problème.

Une parse error est une erreur de syntaxe : point-virgule absent sur la ligne précédente, paretnhèses ou accolades mal équilibrés, guillemets non fermées, etc.

Posté : 03 août 2007, 11:14
par ju3979
oui apparemment c'est un erreur de syntaxe mais je ne vois vraiment pas laquelle !!!

voici les lignes aux alentours de la ligne 78
while($row=mysql_fetch_array($result)){
        xlsWriteLabel($xlsRow,0,$row['civilite']);
        xlsWriteLabel($xlsRow,1,$row['nom']);
        xlsWriteLabel($xlsRow,2,$row['prenom']);
        xlsWriteLabel($xlsRow,3,$row['adresse']);
        xlsWriteLabel($xlsRow,4,$row['ville']);
        xlsWriteLabel($xlsRow,5,$row['codepostal']);
        xlsWriteLabel($xlsRow,6,$row['telephone']);
        xlsWriteLabel($xlsRow,7,$row['documentsafournir']);
        xlsWriteLabel($xlsRow,8,$row['conseiller']);
        xlsWriteLabel($xlsRow,9,$row['rendezvousr']);
        xlsWriteLabel($xlsRow,10,$row['remarque']);
        xlsWriteLabel($xlsRow,11,$row['date']); 
    
     $xlsRow ;
    }
    xlsEOF();
    exit(); 

?> 
D'avance merci pour votre aide


En appelant le scritpt php via une page html ça fonctionne il m'exporte bien un fichier xls

Par contre quand j'essaye de l'ouvrir avec excel il me met "impossible de lire le fichier"

POuvez vous m'aider je pense qu'on est pas loin de résoudre le problème

D'avance merci

Posté : 03 août 2007, 11:51
par d0m
essaie par exemple de debugguer en mettant toutes les lignes de ta boucle en commentaire // et d'enlever les // de commentaire ligne par ligne pour voir laquelle pose problème.

Posté : 03 août 2007, 11:54
par ju3979
C'est bon ça fonction maintenant il y avit une erreur de saisie dans le label "rendezvous"

Maintenant ce que je souhaiterais c'est que l'utilisateur puisse extraire les données de la base mais qui correspondant à une date précise
Ou éventuellement si c'est moin compliqué à faire à extraire uniquement les données de la base qui correspondent à la date du jour

Merci pour votre aide

Posté : 03 août 2007, 13:24
par d0m
Apparement tu as un champ 'date' dans ta table, alors il suffit d'inclure une close WHERE dans la requête de selection SQL avec la condition dégalité sur la date.

Je te donne pas le code, ca te feras voir en cherchant comment marchent les requetes SQL.

Posté : 03 août 2007, 15:06
par ju3979
super ça marche

un grand merci pour votre aide !!!!!!!

Posté : 03 août 2007, 23:47
par Truc
Modération :
ju3979, si ta question est résolue, pense à ajouter le tag [Résolu]
pour indiquer aux personnes qui voudront consulter ce sujet qu'il contient une solution.
Tu peux réaliser cette opération en cliquant sur le bouton Image en haut à gauche de ce sujet.