[RESOLU] fpdf et données mysql

Petit nouveau ! | 3 Messages

08 juin 2014, 18:53

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 ,
Modifié en dernier par Ryle le 09 juin 2014, 11:08, modifié 1 fois.
Raison : Mise en forme du code php

ViPHP
xTG
ViPHP | 7331 Messages

08 juin 2014, 19:49

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.

Mammouth du PHP | 1339 Messages

08 juin 2014, 20:32

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
Bon sinon tu me fais un message privé et on se fait un TeamViewer

Mammouth du PHP | 2278 Messages

08 juin 2014, 21:03

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....
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

Petit nouveau ! | 3 Messages

09 juin 2014, 10:40

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

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

09 juin 2014, 11:16

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é...
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Petit nouveau ! | 3 Messages

09 juin 2014, 12:58

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,