crée une fonction en php

Eléphanteau du PHP | 37 Messages

25 mai 2011, 20:38

Bonsoir je veux crée une fonction en php qui ce trouve dans un fichier qui va généré un pdf. Voila j'ai une erreur que je comprend pas

Fatal error: Call to a member function Line() on a non-object in /volume1/web/cra/compte_rendu_activite_pdf.php on line 4
<?php
include("config_cra.php");
function crer_case($x,$y,$n) {
$pdf->Line($x,$y,$x,$y-3);
$pdf->Line($x,$y,$x+(4*$n),$y);
for($i=1;$i<$n;$i++) {$pdf->Line($x+(4*$i),$y,$x+(4*$i),$y-3);}
$pdf->Line($x+(4*$n),$y,$x+(4*$n),$y-3);}
$annee_s = "2011";
$semaine_s = "08";
$requete_cra = mysql_query("select * from calendrier_$annee_s where semaine='$semaine_s'");
while($ligne = mysql_fetch_array($requete_cra))
{extract($ligne);}

define('FPDF_FONTPATH','./font/');
require('fpdf.php');

class PDF extends FPDF
{
function Header() {}
function Footer()
{$this->SetY(-15);
$this->SetFont('Arial','I',8);
$this->Cell(0,10,'Page '.$this->PageNo().'/{nb}',0,0,'C');}
}

$pdf=new PDF();
$pdf->AliasNbPages();
$pdf->AddPage('L','A3');

$pdf->Image('./image/apave.png',10,7,35,14,'','');

$pdf->SetXY(85,18);
$pdf->SetFont('arial','',15);
$pdf->Cell(90,10,'COMPTE-RENDU D ACTIVITE',1,0,'C');

$pdf->SetXY(10,30);
$pdf->SetFont('arial','',10);
$pdf->Cell(40,10,'FEUILLET N°          de',0,0,'C');
$pdf->Line(36,33.5,36,36.5);
$pdf->Line(36,36.5,40,36.5);
$pdf->Line(40,33.5,40,36.5);

$pdf->Line(51,33.5,51,36.5);
$pdf->Line(51,36.5,55,36.5);
$pdf->Line(55,33.5,55,36.5);

$pdf->SetXY(320,25);
$pdf->SetFont('arial','',10);
$pdf->Cell(30,5,'ANNEE',0,0,'L');
$pdf->Line(338,25.5,338,28.5);
$pdf->Line(338,28.5,346,28.5);
$pdf->Line(346,25.5,346,28.5);
$pdf->Line(342,25.5,342,28.5);
$pdf->Cell(25,5,'MOIS',0,0,'L');
$pdf->Line(365,25.5,365,28.5);
$pdf->Line(365,28.5,373,28.5);
$pdf->Line(373,25.5,373,28.5);
$pdf->Line(369,25.5,369,28.5);
$pdf->Cell(25,5,'SEMAINE',0,0,'L');
$pdf->Line(396,25.5,396,28.5);
$pdf->Line(396,28.5,404,28.5);
$pdf->Line(400,25.5,400,28.5);
$pdf->Line(404,25.5,404,28.5);

crer_case(200,150,5);

$pdf->Output();
?> 


ViPHP
ViPHP | 3607 Messages

25 mai 2011, 21:03

Bonjour,
Le message d'erreur indique que tu essayes d'utiliser $pdf comme un objet alors qu'il ne l'est pas...
En fait $pdf n'existe même pas dans ta fonction crer_case()...
Pour celà il faudrait lui passer en paramètre...
Mais ensuite il faudrait également que ton instance de FPDF puisse récupérer les modifications faites...

Du coup le plus simple c'est de créer une méthode à l’intérieur de ta classe PDF, et de l'appeler comme ceci:
$pdf->creer_case(200,150,5);

Essayes de t'inspirer des exemples sur fpdf.org, par exemple : http://www.fpdf.org/en/tutorial/tuto3.htm
Et N'hésite pas à indenter ton code, sinon il est complètement illisible!
<?php
include("config_cra.php");

$annee_s = "2011";
$semaine_s = "08";
$requete_cra = mysql_query("select * from calendrier_".$annee_s." where semaine='".$semaine_s."'");

while($ligne = mysql_fetch_array($requete_cra)){
    
    extract($ligne);
}

define('FPDF_FONTPATH','./font/');
require('fpdf.php');

class PDF extends FPDF
{
    function Header() {}
    
    function Footer(){
        $this->SetY(-15);
        $this->SetFont('Arial','I',8);
        $this->Cell(0,10,'Page '.$this->PageNo().'/{nb}',0,0,'C');
    }
    
    function creer_case($x,$y,$n) {
    
        $this->Line($x,$y,$x,$y-3);
        $this->Line($x,$y,$x+(4*$n),$y);
        
        for($i=1;$i<$n;$i++) {
            $this->Line($x+(4*$i),$y,$x+(4*$i),$y-3);
        }
        $this->Line($x+(4*$n),$y,$x+(4*$n),$y-3);
    }
}

$pdf=new PDF();
$pdf->AliasNbPages();
$pdf->AddPage('L','A3');

$pdf->Image('./image/apave.png',10,7,35,14,'','');

$pdf->SetXY(85,18);
$pdf->SetFont('arial','',15);
$pdf->Cell(90,10,'COMPTE-RENDU D ACTIVITE',1,0,'C');

$pdf->SetXY(10,30);
$pdf->SetFont('arial','',10);
$pdf->Cell(40,10,'FEUILLET N°          de',0,0,'C');
$pdf->Line(36,33.5,36,36.5);
$pdf->Line(36,36.5,40,36.5);
$pdf->Line(40,33.5,40,36.5);

$pdf->Line(51,33.5,51,36.5);
$pdf->Line(51,36.5,55,36.5);
$pdf->Line(55,33.5,55,36.5);

$pdf->SetXY(320,25);
$pdf->SetFont('arial','',10);
$pdf->Cell(30,5,'ANNEE',0,0,'L');
$pdf->Line(338,25.5,338,28.5);
$pdf->Line(338,28.5,346,28.5);
$pdf->Line(346,25.5,346,28.5);
$pdf->Line(342,25.5,342,28.5);
$pdf->Cell(25,5,'MOIS',0,0,'L');
$pdf->Line(365,25.5,365,28.5);
$pdf->Line(365,28.5,373,28.5);
$pdf->Line(373,25.5,373,28.5);
$pdf->Line(369,25.5,369,28.5);
$pdf->Cell(25,5,'SEMAINE',0,0,'L');
$pdf->Line(396,25.5,396,28.5);
$pdf->Line(396,28.5,404,28.5);
$pdf->Line(400,25.5,400,28.5);
$pdf->Line(404,25.5,404,28.5);

$pdf->creer_case(200,150,5);

$pdf->Output();
 

Eléphanteau du PHP | 37 Messages

25 mai 2011, 21:10

Merci pour ta réponse, désolé pour ne pas indenter mon code mais j'aime pas cette façon de faire sa me parle pas.

Je me demandé a quoi serve $this en faite c'est pour sa que j'ai pas testé avec ?

et pour l’appel de ma fonction c'est bête mais je savais pas si je devais mettre $pdf devant

ViPHP
ViPHP | 3607 Messages

25 mai 2011, 21:18

Bonsoir,

Si tu ne sais pas à quoi correspond $this, et que tu sembles avoir du mal avec la portée des variables, je te conseil fortement de commencer par lire ce tutoriel : http://www.siteduzero.com/tutoriel-3-14 ... mysql.html

Ensuite pour ce qui est de l'indentation, c'est ton affaire, mais sache que ça demande un gros effort à toutes les personnes à qui tu voudrais demander de l'aide...
En gros tu décourages les personnes à venir t'aider.
Et je pense que tu te décourage toi-même à relire ton script par exemple.

Sincèrement dans cette portion de code :
function crer_case($x,$y,$n) {
$pdf->Line($x,$y,$x,$y-3);
$pdf->Line($x,$y,$x+(4*$n),$y);
for($i=1;$i<$n;$i++) {$pdf->Line($x+(4*$i),$y,$x+(4*$i),$y-3);}
$pdf->Line($x+(4*$n),$y,$x+(4*$n),$y-3);}
$annee_s = "2011";
$semaine_s = "08";
$requete_cra = mysql_query("select * from calendrier_$annee_s where semaine='$semaine_s'");
while($ligne = mysql_fetch_array($requete_cra))
{extract($ligne);}
Comment peux-tu clairement savoir où commence et où finit ta fonction crer_case() ?

Eléphanteau du PHP | 37 Messages

25 mai 2011, 21:24

je vais lire sa alors, je comprend que sa soit dure a lire mais je mis retrouve moi. Je ferais un effort pour la prochaine fois dans ce cas

Merci encore a toi