Page 1 sur 1

probleme avec Fpdf

Posté : 08 mai 2019, 04:12
par legrausdebutant
Bonjour,

Je souhaite créer des pdf grâce à Fpdf.
En local tout fonctionne parfaitement, mais lorsque j'upload le tout en ligne, et que je génère un pdf, j’obtiens une page blanche.
Je ne comprends pas d’où ça peut venir, en même temps je suis débutant, donc bon... =)

Merci d'avance pour votre aide!

Re: probleme avec Fpdf

Posté : 08 mai 2019, 10:16
par @rthur
Bonjour,

Le syndrome de la page blanche en PHP c'est dans 99% des cas que tu as une erreur quelque part mais que ton serveur est configuré pour masquer les erreurs par défaut.
On a un tuto là dessus :
faq-tutoriels/page-blanche-script-php-c ... 73178.html

Re: probleme avec Fpdf

Posté : 08 mai 2019, 14:05
par legrosdebutant
Bonjour @rthur,

Je suis sur un serveur ovh mutualisé, j'ai tenté en plaçant le htaccess dans le même dossier mais ça n'a pas fonctionné.
J'ai pu consulter le log des erreurs de mes pages en me connectant sur mon compte OVH mais je ne vois aucune erreur à la date ou j'ai tenté de générer mes pdf.
La seule erreur que je vois c'est :

Code : Tout sélectionner

aborted: error parsing headers: malformed header 'login.php', referer: https://mondomaine/crm/login.php
cette erreur date d'hier. je corrigé ce probleme, enfin, je crois.

Dans mon generateur_de_pdf.php, faut-il d'autre dépendances que
require('fpdf/fpdf.php');
?

Re: probleme avec Fpdf

Posté : 08 mai 2019, 14:49
par Spols
si tu veux t'assure que les erreurs s'affiche, il suffit d'oublier un ; délibèrement.

si tu as accés aux logs c'est aussi très utiles si tu n'a pas d'erreur après avoir éxécuter ton script c'est qu'il n'en génère pas et qu'il faut chercher ailleur.

vérifie le code source produit avec ctrl+U mais si tu ne produit qu'un fichier pdf dans ton script il est possible de ne pas avoir de retour.

montre nous une peu plus de code pour plus d'aide.

Re: probleme avec Fpdf

Posté : 08 mai 2019, 15:12
par legrosdebutant
Bonjour Spols,

J'ai suivi ton conseil, mes erreurs ne s'affichent pas.

Concernant le code source, j'ai une page blanche aussi.

Je vous joins 2 pages:
-editeur.php C'est le formulaire qui me permet de remplir les champs de mes pdfs.
-generateurdevis.php C'est la page qui génère les pdfs.

J'ai placé Fpdf dans un dossier du même nom, au même niveau que les 2 pages ci-dessus.

editeur.php
<?php 


session_start();
if ($_SESSION['auth'] == FALSE) {
	header('location:login.php');
}


$base = mysqli_connect("***info de connexion***");

// RECHERCHE ID EN BDD
if (isset($_GET['id'])) {
	$sql = "SELECT nom,prenom,tel,mail,adresse1,postal1,adresse2,postal2,date_dem,volume from client WHERE id = $_GET[id]";
	$requete_devis = mysqli_query($base,$sql);
	$ligne = mysqli_fetch_assoc($requete_devis);
}


?>


<!DOCTYPE html>
<html lang="fr" class="editeur">
<head>
	<meta charset="UTF-8">
	<title>Editeur de devis et facture</title>
	<link rel="stylesheet" href="crm.css">
</head>
<body class="editeur">

	<nav>
		<h3>MENU</h3>
		<ul>
			<li><a href="dashboard.php">Acceuil</a></li>
			<li><a href="calendar.php">Planning</a></li>
		</ul>
	</nav>


	<div class="editeur_main">



		<div style="height: 50px;margin: 50px auto;">
			<h1>EDITION DEVIS/FACTURE</h1>
		</div>
		
		
		<div class="form_editeur">
			<form action="generateurdevis.php" method="POST" TARGET=_BLANK>
				<label for="nom">Nom</label>
				<input type="text" name="nom" value="<?php if (isset($ligne)) {echo $ligne['nom'];}?>">
				
				<label for="prenom">Prenom</label>
				<input type="text" name="prenom" value="<?php if (isset($ligne)) {echo $ligne['prenom'];}?>">
				
				<label for="tel">Tel</label>
				<input type="text" name="tel"value="<?php if (isset($ligne)) {echo $ligne['tel'];}?>">
				
				<label for="tel">Mail</label>
				<input style="width: 325px" type="text" name="mail" value="<?php if (isset($ligne)) {echo $ligne['mail'];}?>">
				
				<label for="tel">Départ</label>
				
				<div>
					
					<input type="text" name="adresse1" placeholder="N° Voie, Rue, avenue" value="<?php if (isset($ligne)) {echo $ligne['adresse1'];}?>">
					<input class="petit_input" type="text" name="postal1" placeholder="Dep." value="<?php if (isset($ligne)) {echo $ligne['postal1'];}?>">
					
				</div>
				
				
				<label for="tel">Arrivée</label>
				
				<div>
					
					<input type="text" name="adresse2" placeholder="N° Voie, Rue, avenue" value="<?php if (isset($ligne)) {echo $ligne['adresse2'];}?>">
					<input class="petit_input" type="text" name="postal2" placeholder="Dep." value="<?php if (isset($ligne)) {echo $ligne['postal2'];}?>">
					
				</div>
				
				<label for="date_dem">Date du déménagement</label>
				<input type="date" name="date_dem" value="<?php if (isset($ligne)) {echo $ligne['date_dem'];}?>">
				
				<label for="volume">volume</label>
				<input style="width:35px;  justify-self: start; margin-left: 20px;" type="text" name="volume" value="<?php if (isset($ligne)) {echo $ligne['volume'];}?>">
				<label for="formule">Formule</label>
				<select name="formule">
					<option value="Eco">Eco</option>
					<option value="Eco+">Eco+</option>
					<option value="Standart">Standart</option>
					<option value="Luxe">Luxe</option>
				</select>
				
				<label for="Demontage">Demontage</label>
				<select name="demontage" size="" id="">
					<option value="1">Oui</option>
					<option value="0">Non</option>	
				</select>
				
				<label for="Penderies">Penderies</label>
				<select name="penderies" size="1" id="">
					<option value="1">Oui</option>
					<option value="0">Non</option>	
				</select>
				
				<label for="nb_cartons">Prix des penderies:</label>
				<input class="petit_input" type="int" name="prix_penderies" value="">
				
				<label for="Cartons">Cartons</label>
				<select name="cartons" size="1" id="">
					<option value="1">Oui</option>
					<option value="0">Non</option>	
				</select>
				
				
				<label for="nb_cartons">Prix des cartons:</label>
				<input class="petit_input" type="int" name="prix_cartons" value="">

				<label for="nb_cartons">Prix du dem:</label>
				<input class="petit_input" type="int" name="prix_dem" value="">
				
				
				
				
				<input class="envoyer_devis" style="text-align: center;" type="submit" name="demande_devis" value="Creer le DEVIS">
			</div>


		</form>
		
		

	</div>

	
</body>
</html>
-generateurdevis.php
<?php


//DATE

$validite = date('d-m-Y');
$validite4 = strtotime(date("d-m-Y", strtotime($validite)) . " +4 day");
$nouvelle_date = date('d-m-Y', $validite4);
if (isset($_POST['date_dem'])) {
	$date_dem = date('d-m-Y', strtotime($_POST['date_dem']));
}

// AUTRES VARIABLES

if (($_POST['cartons']) == 0) {
	$_POST['prix_cartons'] = '';
}
if (($_POST['penderies']) == 0) {
	$_POST['prix_penderies'] = '';
}
//MES TABLEAUX

$liste = array();

if ((isset($_POST['demontage'])) AND ($_POST['demontage'] == 1)) {
	array_push($liste, "Démontage et remontage du mobilier");
}
if (isset($_POST['fragile'])) {
	array_push($liste, "Emballage du fragile");
}
if ((isset($_POST['cartons'])) AND ($_POST['cartons'] == 1)) {
	array_push($liste, "Cartons mis à disposition");
}
if ((isset($_POST['penderies'])) AND ($_POST['penderies'] == 1)) {
	array_push($liste, "Penderies mise à disposition");
}
if (isset($_POST['luxe'])) {
	array_push($liste, $_POST['luxe']);
}


// PRIX PENDERIES CARTONS

if (isset($_POST['prix_cartons'])) {
	$prix_cartons = $_POST['prix_cartons'];
	}
	else
	{
		$prix_cartons = '';
	}


if (isset($_POST['prix_penderies'])) {
	$prix_penderies = $_POST['prix_penderies'];
	}
	else
	{
		$prix_penderie = '';
	}



require('fpdf/fpdf.php');



$pdf = new FPDF();


$pdf->AddPage();


// En-tete

$pdf->SetFont('arial','B',14);
$pdf->Cell(190,5,utf8_decode('CONSEIL'),0,1,);
$pdf->Ln(2);
$pdf->SetFont('arial','',10);
$pdf->Cell(190,5,utf8_decode('Lyon'),0,1,);
$pdf->Cell(190,5,utf8_decode('France'),0,1,);
$pdf->Cell(190,5,utf8_decode('Tél:'),0,1,);
$pdf->Cell(190,5,utf8_decode('Email:'),0,1,);
$pdf->Cell(190,5,utf8_decode('lyon'),0,1,);
$pdf->image('petit.png',160,10,35,35);
//Facturé A

$pdf->Ln(20);

$pdf->SetFont('arial','B',14);
$pdf->Cell(95,5,utf8_decode('FACTURÉ À'),0,0,);

//DEVIS N°

$pdf->Cell(43,5,utf8_decode('DEVIS N°:'),0,0,'R',);
$pdf->SetFont('arial','',10);
$pdf->Cell(42,5,utf8_decode('186492'),0,1,'R',);

$pdf->Ln(2);
$pdf->Cell(95,5,utf8_decode(strtoupper($_POST['nom']).' '.$_POST['prenom']),0,0,);

// DATE DU DEVIS

$pdf->SetFont('arial','B',14);
$pdf->Cell(43,5,utf8_decode('DATE D\'ÉDITION:'),0,0,);
$pdf->SetFont('arial','',10);
$pdf->Cell(42,5,utf8_decode($validite),0,1,'R',);

$pdf->SetFont('arial','',10);
$pdf->Cell(95,5,utf8_decode($_POST['adresse1']),0,1,);
$pdf->Cell(95,5,utf8_decode($_POST['postal1']),0,1,);
$pdf->Cell(95,5,utf8_decode('Tél: '.$_POST['tel']),0,1,);
$pdf->Cell(95,5,utf8_decode('Email: '.$_POST['mail']),0,1,);

//TOTAL PRIX
$pdf->SetLineWidth(1.5);
$pdf->Line(10,105,200,105);

$pdf->SetFont('arial','B',30);
$pdf->Cell(95,50,utf8_decode('Total du devis'),0,0,);
$pdf->Cell(95,50,$_POST['prix_dem'].chr(128),0,0,'R');

$pdf->Line(10,132,200,132);
$pdf->ln(50);


//DESIGNATION

$pdf->SetFont('arial','B',14);
$pdf->Cell(95,5,utf8_decode('DÉSIGNATION'),0,0,);			$pdf->Cell(95,5,utf8_decode('MONTANT HT'),0,1,'R');


$pdf->ln(5);
$pdf->SetFont('arial','',10);
$pdf->Cell(95,5,utf8_decode('Dménagement de '.$_POST['volume'].' m³'),0,1,);
$pdf->Cell(95,5,utf8_decode('Départ: '.$_POST['adresse1'].' ' .$_POST['postal1']),0,1,);
$pdf->Cell(95,5,utf8_decode('Arrivée: '.$_POST['adresse2'].' ' .$_POST['postal2']),0,1,);
$pdf->Cell(95,5,utf8_decode('Formule: '.$_POST['formule']),0,1,);

//INSERER MA $LISTE ICI
foreach ($liste as $ligne) {
	$pdf->Cell(40,5,utf8_decode($ligne),0,1);
}



$pdf->Cell(95,5,utf8_decode('Assurance offerte'),0,0,); $pdf->Cell(95,5,utf8_decode('0,00'),0,1,'R');
$pdf->setX(0);

//CONDITIONS ET MODALITES DE PAIEMENT

$pdf->setY(-46);
$pdf->SetFont('arial','B',14);
$pdf->Cell(95,5,utf8_decode('CONDITIONS ET MODALITES DE PAIEMENT'),0,1,);
$pdf->SetFont('arial','',10);
$pdf->Cell(95,5,utf8_decode('TVA non applicable article 293B du CGI'),0,1,);
$pdf->Cell(95,5,utf8_decode('Déménagement le: '.$date_dem),0,1,);
$pdf->Cell(95,5,utf8_decode('Validité du devis: '.$nouvelle_date),0,1,);
$pdf->Cell(95,5,utf8_decode('Solde à la livraison'),0,1,);

 if (($_POST['cartons']) == 0) {
 	$y_penderies = 180;
 }
 else {
 	$y_penderies = 184.5;
 }



$pdf->setXY(185,180);
$pdf->Cell(15,5,utf8_decode($prix_cartons),0,1,'R');
$pdf->setXY(185,$y_penderies);
$pdf->Cell(15,5,utf8_decode($prix_penderies),0,1,'R');

$pdf->Output();




?>

Re: probleme avec Fpdf

Posté : 08 mai 2019, 16:00
par Spols
tu devrais probablement ajouté une entête en php dans ton second fichier. ceci afin d'indiquer au navigateur que tu lui envoie un pdf et pas une page classique html.

une autre solution est de partir des exemples de fpdf et voir si il fonctionne sur ton serveur distant.

Re: probleme avec Fpdf

Posté : 08 mai 2019, 18:28
par legrosdebutant
J'ai rajouté une entête PHP:
header('Content-Type: application/pdf');
Ça n'a rien changé.

Par contre, comme tu me l'as conseillé, j'ai remplacé mon code situé entre:
$pdf->AddPage();
et
$pdf->Output();
Par:
$pdf->SetFont('Arial','B',16);
$pdf->Cell(40,10,'Hello World !');
Et là ça fonctionne, j’obtiens bien un PDF avec "Hello World!"

Ca droit être une erreur de synthax non?

Re: probleme avec Fpdf

Posté : 08 mai 2019, 18:50
par legrosdebutant
Ça y est ça marche!

J'avais fait une erreur sur chaque ligne:
$pdf->Cell(95,5,utf8_decode('FACTURÉ À'),0,0,);
il y a une virgule en trop après chaque 0 ou 1 à la fin de mes Cell().

Fonctionne comme ça:
$pdf->Cell(95,5,utf8_decode('FACTURÉ À'),0,0);
bizarre que ça marchait en local avec ces erreurs mais pas en ligne.

En tout cas merci beaucoup pour votre aide!
Merci bcp Spols! :D