Page 1 sur 1

fpdf et données mysql

Posté : 08 juin 2014, 18:53
par nicolaskunt
Bonjour,

Je suis en formation de developpeur logiciel et j'apprends le php.
Je souhaite créer des cartes de visites depuis une liste de contact avec FPDF. J'ai lu la documentation sur leur site.
J'ai donc essayer de créer une fonction, mais j'obtiens le message d'erreur suivant:
"FPDF error: Some data has already been output, can't send PDF file"

Pourriez-vous m'aider SVP.
Voici mon code:
<?php
function carte($id){
global $connexion_bd;
require_once '../inc/fpdf/fpdf.php';
require_once '../inc/configuration.php';
require_once '../inc/connexion_db.php';

$sql = "SELECT * FROM entreprises, contacts WHERE entreprises.id = contacts.id_entreprise AND id=$id";
$req = mysqli_query($connexion_bd, $sql);
$data = mysqli_fetch_array($req);

$pdf = new FPDF();
$pdf->AddPage("L", [145,110]);
$pdf->SetFillColor(127);
$pdf->Rect(30, 55, 85, 3, 'F');
$pdf->SetFillColor(210);
$pdf->Rect(30, 58, 85, 21, 'F');

//$photo =  "../..".$data['photo'];   

        $pdf->image("../contacts/photos/bouteille_bateau.jpg",32,27, -2200);
        
        $pdf->setXY(63,28);
        $pdf->SetFont('Arial','B',14);
        $pdf->SetTextColor(0);
	$pdf->MultiCell(35,5, $data['raison_sociale'] . "\n" ,0,'L');
        
         $pdf->setXY(63,33);
         $pdf->SetFont('Arial','',12);
        $pdf->MultiCell(43,5,"\n" . $data['adresse'] ,0,'L');	
 
	$pdf->setXY(35,66);
	$pdf->SetFont('Arial','',12);
	$pdf->Cell(24,6,$data['nom'] . " " . $data['prenom'],0,0,'L');
        
        $pdf->setXY(35,71);
        $pdf->SetFont('Arial','',9);
	$pdf->SetTextColor(255,0,0);
	$pdf->Cell(18,6,$data['email'],0,0,'L');
        
        $pdf->setXY(35,58);
	$pdf->SetTextColor(0);
	$pdf->Cell(18,6,$data['observations'],0,0,'L');
       
        $pdf->setXY(95,58);
	$pdf->SetTextColor(0);
	$pdf->Cell(18,6,$data['telephone'],0,0,'L');
 
	$pdf->setXY(30,25);
	$pdf->Cell(85,54,'',1,1,'L');

$pdf->SetDisplayMode('fullpage');
$pdf->Output(time().'carte_de_visite.pdf','I');

}
Merci ,

Re: fpdf et données mysql

Posté : 08 juin 2014, 19:49
par xTG
As-tu des affichages avant l'appel à cette fonction ?
La librairie ne peut proposer le pdf au téléchargement car il y a déjà eu des données envoyées dans la réponse HTTP.

Re: fpdf et données mysql

Posté : 08 juin 2014, 20:32
par Elie
Oui a mon avis, des choses sont écrites avant le lancement de la fonction carte();

Généralement quand on génére un fichier PHP, on fait une page PHP a part entiere et dur coup en appellant la page .php ca lance le téléchargement du fichier .pdf

Re: fpdf et données mysql

Posté : 08 juin 2014, 21:03
par sirakawa
Si je réduis le début ainsi:
<?php
function carte($id){
require_once 'fpdf/fpdf.php';
$pdf = new FPDF();
$pdf->AddPage("L", [145,110]);
$pdf->SetFillColor(127);
$pdf->Rect(30, 55, 85, 3, 'F');
$pdf->SetFillColor(210);
$pdf->Rect(30, 58, 85, 21, 'F');
ça fonctionne correctement....

Re: fpdf et données mysql

Posté : 09 juin 2014, 10:40
par nicolaskunt
Merci de vos réponses,
Cette fonction est appelée depuis un fichier php (qui appel juste la fonction) qui est lui même appelé depuis une page de liste de contact (je suis en train de faire un carnet d'adresse pour apprendre) soit: liste_contacts.php -> appel_fonction.php -> fichier_fonction.php. Donc je ne pense pas qu'il y ait d'affichage avant l'appel de la fonction.
Lorsque j’enlève dans la requête "AND id=$id" la carte de visite s'affiche avec les infos du 1er champ de la table .
Depuis la liste de contact je dois pourvoir générer la carte de visite du contact sélectionné.
Comment puis-je générer l'affichage des infos d'un contact en particulier ?
Merci

Re: fpdf et données mysql

Posté : 09 juin 2014, 11:16
par Ryle
Est-ce que par hasard tu n'aurais pas une erreur sql ? Du genre ambiguous column ?

J'imagine que dans ta base, tu as une colonne "id" dans ta table "entreprises" et une colonne "id" dans ta table "contacts", ce qui fait que ta base de données est incapable de savoir auquel des deux tu fais référence quand tu lui demandes de tester " AND id=$id " :)

A mon avis, il te faut un " contacts.id = $id " si tu veux les infos d'un contact en particulier, ou un " entreprises.id = $id " si tu veux toutes les infos des contacts d'une société...

Re: fpdf et données mysql

Posté : 09 juin 2014, 12:58
par nicolaskunt
Merci beaucoup,

J'ai ajouter "or die('Erreur SQL !'.$req.'<br>'.mysql_error());" apres mysqli_query et j'avais bien une erreur sql.
Ça fonctionne avec contacts.id = $id et en appelant la fonction carte($id) depuis un autre fichier que la liste de contacts.

Encore merci,