Exportation de données mysql via une page en php dans un tab

Eléphanteau du PHP | 24 Messages

05 mars 2007, 17:54

Bonjour,

Voilà mon soucis:

J'ai une BDD mysql et une page PHP qui me retourne le contenu de ma BDD classée suivant mon choix.

J'arrive à exporter ces données en pdf mais elles sont séparées par --- ou par autre chose, bref ...

J'aimerais savoir savoir comment je dois faire pour exporter mes données en PDF mais dans un tableau ...

<?php require_once('../Connexions/ConnexionArchives.php');
mysql_select_db($database_ConnexionArchives, $ConnexionArchives);

$orderby = isset($_GET['orderby']) ? $_GET['orderby'] : 'numaff';
$export = isset($_GET['export']) ? $_GET['export'] : '';

$query_rsDossiers = "SELECT Archives.Numaff, Archives.Client, Archives.Nomaff, Archives.Resprojet, Archives.Annee, Archives.Numcd FROM Archives ORDER BY $orderby";
$rsDossiers = mysql_query($query_rsDossiers, $ConnexionArchives) or die(mysql_error());
$totalRows_rsDossiers = mysql_num_rows($rsDossiers);

if ($export == 'excel') {
header("Content-Type: text/x-csv");
header('Content-Disposition: attachement; filename="Exportexcel.csv"');
$list = "\"N° affaires\"; \"Clients\"; \"Noms d'affaires\"; \"Responsables projets\"; \"Années\"; \"N° CD/DVD\";\r\n";
while ($row_rsDossiers = mysql_fetch_assoc($rsDossiers)) {
$list .= $row_rsDossiers['Numaff'] .";". $row_rsDossiers['Client'] .";"
. $row_rsDossiers['Nomaff'] .";". $row_rsDossiers['Resprojet'] .";"
. $row_rsDossiers['Annee'] .";". $row_rsDossiers['Numcd'] ."\r\n";
}
echo $list;
} else if ($export == 'pdf') {
require('fpdf.php');
$pdf=new FPDF();
$pdf->AliasNbPages();
$pdf->AddPage('P','mm','A4');
$pdf->SetFont('Times','BIU',20);
$pdf->Cell(127,10,'Exportation de la liste des affaires en PDF',1);
$pdf->SetFont('Times', '', 10);
$pdf->Write(20, "\r\n");
while ($row_rsDossiers = mysql_fetch_assoc($rsDossiers)) {
$pdf->Write(5,
$row_rsDossiers['Numaff'] ."---".
$row_rsDossiers['Client'] ."---".
$row_rsDossiers['Nomaff'] ."---".
$row_rsDossiers['Resprojet'] ."---".
$row_rsDossiers['Annee'] ."---".
$row_rsDossiers['Numcd'] ."\r\n");
}
$pdf->Output();
} else {
?>

Je suis allez voir chez fdpf.org mais je n'ai rien trouvé ...

D'avance merci ...

Modérateur PHPfrance
Modérateur PHPfrance | 6037 Messages

05 mars 2007, 18:04

Règle n°2 du webmaster : Toujours commencer par le HTML qu'on veut obtenir....toujours ! :priere:
J'aime apprendre de nouvelles choses.

Eléphanteau du PHP | 24 Messages

05 mars 2007, 18:08

C'est justement tout ça que j'ai récupéré mais je n'arrive pas à l'exploiter correctement ...

Au lieu de me générer un fichier pdf il me retourne tout le temps ma recherche précédente ....

Je précise que je débute en prog et que j'ai récupéré la plupart des pages qu'un collègue avaient faits pour les mettrent à mon gout ...

Merci quand même ...

Modérateur PHPfrance
Modérateur PHPfrance | 6037 Messages

05 mars 2007, 18:11

Désolée, mais tu n'avais pas précisé que tu avais déjà le script. La problématique est que ce sont à chaque fois des fonctions à modifier, et qu'il faut bien comprendre le mécanisme des fonctions :)

Si tu sais faire un tableau en HTML, tu peux aller voir HTML2FPDF : cela te permet de construire le tableau HTML, puis de générer le PDF :)
Règle n°2 du webmaster : Toujours commencer par le HTML qu'on veut obtenir....toujours ! :priere:
J'aime apprendre de nouvelles choses.

Eléphanteau du PHP | 24 Messages

06 mars 2007, 11:55

On m'a conseillé d'utiliser ce code :

<?php

require_once('../Connexions/ConnexionArchives.php');
mysql_select_db($database_ConnexionArchives, $ConnexionArchives);

$orderby = isset($_GET['orderby']) ? $_GET['orderby'] : 'numaff';
$export = isset($_GET['export']) ? $_GET['export'] : '';

$query_rsDossiers = "SELECT Archives.Numaff, Archives.Client, Archives.Nomaff, Archives.Resprojet, Archives.Annee, Archives.Numcd FROM Archives ORDER BY $orderby";
$rsDossiers = mysql_query($query_rsDossiers, $ConnexionArchives) or die(mysql_error());
$totalRows_rsDossiers = mysql_num_rows($rsDossiers);

if ($export === 'excel') {
	header("Content-Type: text/x-csv");
	header('Content-Disposition: attachement; filename="Exportexcel.csv"');
 $list = "\"N° affaires\"; \"Clients\"; \"Noms d'affaires\"; \"Responsables projets\"; \"Années\"; \"N° CD/DVD\";\r\n";
  while ($row_rsDossiers = mysql_fetch_assoc($rsDossiers)) {
    $list .= $row_rsDossiers['Numaff'] .";". $row_rsDossiers['Client'] .";"
	  	  .  $row_rsDossiers['Nomaff'] .";". $row_rsDossiers['Resprojet'] .";"
		  .  $row_rsDossiers['Annee'] .";". $row_rsDossiers['Numcd'] ."\r\n";
  }
  echo $list;
} else if ( $export === 'pdf' ) {

  require('fpdf.php');

$x = '10';
$y = '10';

$pdf=new FPDF();
$pdf->AliasNbPages();
$pdf->AddPage('P','mm','A4');

$pdf->SetXY($x, $y);
$pdf->SetFont('Times','BIU',20);
$pdf->Cell(127,10,'Exportation de la liste des affaires en PDF',1);

// calcul de chaque colonne
$nb_col = 7;
$largeur_total_page = 210;
$largeure_colonne = ($largeur_total_page - 20) / $nb_col

$pdf->SetXY($x, $y+10);   // LIGNE 43
$pdf->SetFont('Times', '', 10);
while ($row_rsDossiers = mysql_fetch_assoc($rsDossiers)) {
$pdf->Cell($largeure_colonne, 5, $row_rsDossiers['Numaff'], 1, 0, 'C', 0);
$pdf->Cell($largeure_colonne, 5, $row_rsDossiers['Client'], 1, 0, 'C', 0);
$pdf->Cell($largeure_colonne, 5, $row_rsDossiers['Nomaff'], 1, 0, 'C', 0);
$pdf->Cell($largeure_colonne, 5, $row_rsDossiers['Resprojet'], 1, 0, 'C', 0);
$pdf->Cell($largeure_colonne, 5, $row_rsDossiers['Resprojet'], 1, 0, 'C', 0);
$pdf->Cell($largeure_colonne, 5, $row_rsDossiers['Annee'], 1, 0, 'C', 0);
$pdf->Cell($largeure_colonne, 5, $row_rsDossiers['Numcd'], 1, 1, 'C', 0);
}

$pdf->Output();
}

?>
Mais il me retourne cette erreur:

Parse error: syntax error, unexpected T_VARIABLE in C:\wamp\www\Archives\Listes\liste.php on line 43

Et la ligne 43 correspond à celle-ci:
$pdf->SetXY($x, $y+10);
Sauriez-vous me dire de quoi cela vient ???

Eléphanteau du PHP | 24 Messages

06 mars 2007, 14:44

Bon problème résolu ...

Par contre j'aimerais savoir comment je peux modifier ce code pour qu'il ajuste la taille des cellules de mon tableau aux nombres MAX de caractères étant présent dans ma BDD ???

Car là j'ai des cellules trop grandes pour ce qu'il y a dedans et d'autre beaucoup trop petites !!!

Comment modifier le code pour y arriver ???

Le revoilà:
<?php

require_once('../Connexions/ConnexionArchives.php');
mysql_select_db($database_ConnexionArchives, $ConnexionArchives);

$orderby = isset($_GET['orderby']) ? $_GET['orderby'] : 'numaff';
$export = isset($_GET['export']) ? $_GET['export'] : '';

$query_rsDossiers = "SELECT Archives.Numaff, Archives.Client, Archives.Nomaff, Archives.Resprojet, Archives.Annee, Archives.Numcd FROM Archives ORDER BY $orderby";
$rsDossiers = mysql_query($query_rsDossiers, $ConnexionArchives) or die(mysql_error());
$totalRows_rsDossiers = mysql_num_rows($rsDossiers);

if ($export === 'excel') {
	header("Content-Type: text/x-csv");
	header('Content-Disposition: attachement; filename="Exportexcel.csv"');
 $list = "\"N° affaires\"; \"Clients\"; \"Noms d'affaires\"; \"Responsables projets\"; \"Années\"; \"N° CD/DVD\";\r\n";
  while ($row_rsDossiers = mysql_fetch_assoc($rsDossiers)) {
    $list .= $row_rsDossiers['Numaff'] .";". $row_rsDossiers['Client'] .";"
	  	  .  $row_rsDossiers['Nomaff'] .";". $row_rsDossiers['Resprojet'] .";"
		  .  $row_rsDossiers['Annee'] .";". $row_rsDossiers['Numcd'] ."\r\n";
  }
  echo $list;
} elseif ( $export === 'pdf' ) {

  require('fpdf.php');

$x = '10';
$y = '10';

$pdf=new FPDF();
$pdf->AliasNbPages();
$pdf->AddPage('P','mm','A4');

$pdf->SetXY($x, $y);
$pdf->SetFont('Times','BIU',20);
$pdf->Cell(127,10,'Exportation de la liste des affaires en PDF',1);

// calcul de chaque colonne
$nb_col = 7;
$largeur_total_page = 210;
$largeure_colonne = ($largeur_total_page - 20) / $nb_col;

$pdf->SetXY($x, $y+10);
$pdf->SetFont('Times', '', 7);
while ($row_rsDossiers = mysql_fetch_assoc($rsDossiers)) {
$pdf->Cell($largeure_colonne, 5, $row_rsDossiers['Numaff'], 1, 0, 'C', 0);
$pdf->Cell($largeure_colonne, 5, $row_rsDossiers['Client'], 1, 0, 'C', 0);
$pdf->Cell($largeure_colonne, 5, $row_rsDossiers['Nomaff'], 1, 0, 'C', 0);
$pdf->Cell($largeure_colonne, 5, $row_rsDossiers['Resprojet'], 1, 0, 'C', 0);
$pdf->Cell($largeure_colonne, 5, $row_rsDossiers['Resprojet'], 1, 0, 'C', 0);
$pdf->Cell($largeure_colonne, 5, $row_rsDossiers['Annee'], 1, 0, 'C', 0);
$pdf->Cell($largeure_colonne, 5, $row_rsDossiers['Numcd'], 1, 1, 'C', 0);
}

$pdf->Output();
}

?>
---------------------

J'aimerais aussi pouvoir mettre en début de page le nom de chaque cellules ... Nom affaire, nom client, etc ...

J'ai essayé ce code:
//En-tête
function Header()
{
    //Logo
    $this->Image('logo_pb.png',10,8,33);
    //Police Arial gras 15
    $this->SetFont('Arial','B',15);
    //Décalage à droite
    $this->Cell(80);
    //Titre
    $this->Cell(30,10,'Titre',1,0,'C');
    //Saut de ligne
    $this->Ln(20);
}

//Pied de page
function Footer()
{
    //Positionnement à 1,5 cm du bas
    $this->SetY(-15);
    //Police Arial italique 8
    $this->SetFont('Arial','I',8);
    //Numéro de page
    $this->Cell(0,10,'Page '.$this->PageNo().'/{nb}',0,0,'C');
}
}
Mais il me dit :

Fatal error: Cannot redeclare header() in C:\wamp\www\Archives\Listes\liste.php on line 31

La ligne 31 est celle-ci:
function Header()
Et voilà où j'ai insérer ce bout de code ...
<?php

require_once('../Connexions/ConnexionArchives.php');
mysql_select_db($database_ConnexionArchives, $ConnexionArchives);

$orderby = isset($_GET['orderby']) ? $_GET['orderby'] : 'numaff';
$export = isset($_GET['export']) ? $_GET['export'] : '';

$query_rsDossiers = "SELECT Archives.Numaff, Archives.Client, Archives.Nomaff, Archives.Resprojet, Archives.Annee, Archives.Numcd FROM Archives ORDER BY $orderby";
$rsDossiers = mysql_query($query_rsDossiers, $ConnexionArchives) or die(mysql_error());
$totalRows_rsDossiers = mysql_num_rows($rsDossiers);

if ($export === 'excel') {
	header("Content-Type: text/x-csv");
	header('Content-Disposition: attachement; filename="Exportexcel.csv"');
 $list = "\"N° affaires\"; \"Clients\"; \"Noms d'affaires\"; \"Responsables projets\"; \"Années\"; \"N° CD/DVD\";\r\n";
  while ($row_rsDossiers = mysql_fetch_assoc($rsDossiers)) {
    $list .= $row_rsDossiers['Numaff'] .";". $row_rsDossiers['Client'] .";"
	  	  .  $row_rsDossiers['Nomaff'] .";". $row_rsDossiers['Resprojet'] .";"
		  .  $row_rsDossiers['Annee'] .";". $row_rsDossiers['Numcd'] ."\r\n";
  }
  echo $list;
} elseif ( $export === 'pdf' ) {

  require('fpdf.php');

$x = '10';
$y = '10';

//En-tête
function Header()
{
    //Logo
    $this->Image('logo_pb.png',10,8,33);
    //Police Arial gras 15
    $this->SetFont('Arial','B',15);
    //Décalage à droite
    $this->Cell(80);
    //Titre
    $this->Cell(30,10,'Titre',1,0,'C');
    //Saut de ligne
    $this->Ln(20);
}

//Pied de page
function Footer()
{
    //Positionnement à 1,5 cm du bas
    $this->SetY(-15);
    //Police Arial italique 8
    $this->SetFont('Arial','I',8);
    //Numéro de page
    $this->Cell(0,10,'Page '.$this->PageNo().'/{nb}',0,0,'C');
}

$pdf=new FPDF();

$pdf->AliasNbPages();
$pdf->AddPage('P','mm','A4');

$pdf->SetXY($x, $y);
$pdf->SetFont('Times','BIU',20);
$pdf->Cell(190,10,'Exportation de la liste des affaires en PDF',1);

// calcul de chaque colonne
$nb_col = 6;
$largeur_total_page = 210;
$largeure_colonne = ($largeur_total_page -20) / $nb_col;

$pdf->SetXY($x, $y+10);
$pdf->SetFont('Times', '', 7);
while ($row_rsDossiers = mysql_fetch_assoc($rsDossiers)) {
$pdf->Cell($largeure_colonne, 5, $row_rsDossiers['Numaff'], 1, 0, 'C', 0);
$pdf->Cell($largeure_colonne, 5, $row_rsDossiers['Client'], 1, 0, 'C', 0);
$pdf->Cell($largeure_colonne, 5, $row_rsDossiers['Nomaff'], 1, 0, 'C', 0);
$pdf->Cell($largeure_colonne, 5, $row_rsDossiers['Resprojet'], 1, 0, 'C', 0);
$pdf->Cell($largeure_colonne, 5, $row_rsDossiers['Annee'], 1, 0, 'C', 0);
$pdf->Cell($largeure_colonne, 5, $row_rsDossiers['Numcd'], 1, 1, 'C', 0);
}

$pdf->Output();
}

?>
Pour le logo_pb.png ce n'est pas un oubli ... j'ai laissé la ligne telle qu'elle mais je l'enleverrai après ...

Modérateur PHPfrance
Modérateur PHPfrance | 6037 Messages

06 mars 2007, 16:09

Fatal error: Cannot redeclare header() in C:\wamp\www\Archives\Listes\liste.php on line 31
Ta fonction est déjà incluse, ne la recopie pas.
Règle n°2 du webmaster : Toujours commencer par le HTML qu'on veut obtenir....toujours ! :priere:
J'aime apprendre de nouvelles choses.

Eléphanteau du PHP | 24 Messages

06 mars 2007, 16:12

Oui mais quand je ne la redéclare pas ça ne fonctionne pas mieux ....

Eléphant du PHP | 82 Messages

06 mars 2007, 16:22

Bonjour,

C'est normal la fonction header existe déjà :

Code : Tout sélectionner

header('Location:index.php');
J'ai pas trop d'idées pour t'aider (je connais pas trop fpdf).

Bon courage pour la suite :D

Edit : On ne peut pas rédéfinir les fonctions natives de PHP :(