Avatar billede straszek Praktikant
11. oktober 2004 - 12:29 Der er 8 kommentarer og
1 løsning

hjælp til fpdf

Jeg er stødt på et problem med fpdf, som jeg ikke kan genneskue hvodan jeg skal løse.

Jeg bruger nedenstående kode, til at hente alle de brugere de skal have udskrevet et velkomstbrev, den del virker fint nok. Efter at medlemsbrevet er udskrevet, så skal medlemstabellen opdateres, der indsætte en dato i medlem_info_udsendt. Og det er her problemet opstår.

Når jeg bruger min sql update sætning, så bliver alle de korrekte poster opdateret men der bliver ikke udskrevet noget fra pfd!

Min lommeteori er at posterne bliver opdateret inden de bliver hentet, og så er det jo rigtigt nok at der ikke er noget at udskrive. eller er det placeringen af update sætingen der er problemet? - fjerner jeg denne blive alt der skal laves til pdf lavet, men jeg få så ikke opdateret min tabel


Gode råd modtages gerne!

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


        $dagsdato=time();
          $datoinfo =" D.";
          $datoinfo .= date(" d.m.y", $dagsda);

$opinfo="J.nr.:/$PHP_AUTH_USER";

$brevtekst = mysql_query("select * from tekster where id='3'") or die(mysql_error());
$rowtekst = mysql_fetch_array($brevtekst);



$pdf=new FPDF('P','mm','A4');
$pdf->SetMargins(18,35,20);
$resultat = mysql_query("select id as tid, medlem_fornavn, medlem_efternavn, medlem_adresse, medlem_postnr, medlem_by, medlem_indmeldt, medlem_nummer from medlemmer2
where medlem_info_sendt='' and medlem_status='aktiv'") or die(mysql_error());
while ($raekke = mysql_fetch_array($resultat)) {
  extract($raekke);


        $navn = "$medlem_fornavn ";
        $navn .= "$medlem_efternavn";
        $adr = "$medlem_postnr ";
        $adr .="$medlem_by";

$pdf->AddPage();
$pdf->Image('logo_pb.jpg',156,18,33);
$pdf->Ln();
$pdf->SetFont('Arial','',10);
$pdf->Cell(140,4,$navn);
$pdf->Ln();
$pdf->Cell(140,4,$medlem_adresse);
$pdf->Ln();
$pdf->Cell(140,4,$adr);
$pdf->Ln();
$pdf->SetXY(156,60);
$pdf->SetFont('Arial','B',7);
$pdf->Cell(140,4,$datoinfo);
$pdf->Ln();
$pdf->SetXY(156,66);
$pdf->Cell(140,4,$opinfo);

$pdf->SetXY(80,90);


$pdf->SetFont('Arial','B',10);
$pdf->Ln();
$pdf->SetXY(18,90);
$pdf->Cell(140,7,$rowtekst[overskrift]);
$pdf->Ln();
$pdf->SetFont('Arial','',10);
$pdf->MultiCell(0,5,$rowtekst[tekst]);
$pdf->Ln();
$pdf->Cell(140,7,$medinfo);

Mysql_query ("UPDATE medlemmer2 set medlem_info_sendt='$dagsdato' where id='$tid'") or die(mysql_error());

}
$pdf->Output();
?>
Avatar billede Slettet bruger
11. oktober 2004 - 19:43 #1
Jeg tror ikke helt på din lommeteori, og mener at det er et ganske passende sted, du laver din update, men da du siger, at du kan få outputtet korrekt ved at fjerne den, så prøv med denne udgave i stedet:


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


        $dagsdato=time();
          $datoinfo =" D.";
          $datoinfo .= date(" d.m.y", $dagsda);

$opinfo="J.nr.:/$PHP_AUTH_USER";

$brevtekst = mysql_query("select * from tekster where id='3'") or die(mysql_error());
$rowtekst = mysql_fetch_array($brevtekst);



$pdf=new FPDF('P','mm','A4');
$pdf->SetMargins(18,35,20);
$resultat = mysql_query("select id as tid, medlem_fornavn, medlem_efternavn, medlem_adresse, medlem_postnr, medlem_by, medlem_indmeldt, medlem_nummer from medlemmer2
where medlem_info_sendt='' and medlem_status='aktiv'") or die(mysql_error());

while ($raekker[] = mysql_fetch_assoc($resultat));

foreach($raekker as $raekke)  {
  extract($raekke);


        $navn = "$medlem_fornavn ";
        $navn .= "$medlem_efternavn";
        $adr = "$medlem_postnr ";
        $adr .="$medlem_by";

$pdf->AddPage();
$pdf->Image('logo_pb.jpg',156,18,33);
$pdf->Ln();
$pdf->SetFont('Arial','',10);
$pdf->Cell(140,4,$navn);
$pdf->Ln();
$pdf->Cell(140,4,$medlem_adresse);
$pdf->Ln();
$pdf->Cell(140,4,$adr);
$pdf->Ln();
$pdf->SetXY(156,60);
$pdf->SetFont('Arial','B',7);
$pdf->Cell(140,4,$datoinfo);
$pdf->Ln();
$pdf->SetXY(156,66);
$pdf->Cell(140,4,$opinfo);

$pdf->SetXY(80,90);


$pdf->SetFont('Arial','B',10);
$pdf->Ln();
$pdf->SetXY(18,90);
$pdf->Cell(140,7,$rowtekst[overskrift]);
$pdf->Ln();
$pdf->SetFont('Arial','',10);
$pdf->MultiCell(0,5,$rowtekst[tekst]);
$pdf->Ln();
$pdf->Cell(140,7,$medinfo);

mysql_query("UPDATE medlemmer2 set medlem_info_sendt='$dagsdato' where id='$tid'") or die(mysql_error());

}
$pdf->Output();
?>

Der er kun 2 ændringer:

1) Først gennemkøres en løkke, der henter alle de relevanter medlemmer fra databasen - derefter gennemkøres en ny løkke på alle de hentede medlemmer. På den måde kan du være HELT sikker på at hentningen fra databasen er helt færdig, når du opdaterer. (NB! Jeg tror ikke, det vil gøre nogen forskel - men så er din teori da afprøvet.) Jeg bruger forresten mysql_fetch_assoc i stedet for _array, der er jo ingen grund til at PHP skal lave numerisk indeks, når vi alligevel kun bruger tekst-indeks i arrayet.

2) Har rettet "Mysql_query (" til "mysql_query(" - dvs. med lille og uden mellemrum.
Avatar billede straszek Praktikant
12. oktober 2004 - 09:29 #2
Tak for forslaget.

Jeg få nu denne fejl:
Warning: extract(): First argument should be an array in /home/.sites/75/site8/web/dbadmin/system/pdf/medbrevepdf.php on line 31

hvor line 31 er :
extract($raekke);
Avatar billede Slettet bruger
12. oktober 2004 - 15:36 #3
Ok, så laver vi lidt mere forsøg. Lav pdfudskrivningen til en kommentar, så vi kun får debug-udskrifter:

// $pdf->Output();

Og ret dette stykke:

while ($raekker[] = mysql_fetch_assoc($resultat));

foreach($raekker as $raekke)  {
  extract($raekke);

til:

while ($raekker[] = mysql_fetch_assoc($resultat));

print_r($raekker);
echo "\n\nStart på udtræk\n\n";

foreach($raekker as $raekke)  {
  print_r($raekke);
  extract($raekke);
Avatar billede straszek Praktikant
12. oktober 2004 - 16:14 #4
Hej

Jeg har rodet med det det meste af dagen, og har lavet en simplere opstilling( det virker dog stadig ikke):

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

$pdf=new FPDF();

$resultat = mysql_query("select id as tid, medlem_fornavn from medlemmer2 WHERE medlem_info_sendt=''");
while ($raekker[] = mysql_fetch_assoc($resultat));

print_r($raekker);
echo "\n\nStart på udtræk\n\n";

foreach($raekker as $raekke)  {
  print_r($raekke);
  extract($raekke);


$pdf->AddPage();
$pdf->SetFont('Arial','B',16);
$pdf->Cell(40,10,$medlem_fornavn);
mysql_query("UPDATE medlemmer2 set medlem_info_sendt='done' where id='$tid'") or die(mysql_error());

    }   

//$pdf->Output();


Det giver et output der ser sådan ud (Det er ikke fejl at alle medlemmerne hedder søren)

Array ( [0] => Array ( [tid] => 460 [medlem_fornavn] => søren ) [1] => Array ( [tid] => 459 [medlem_fornavn] => søren ) [2] => Array ( [tid] => 462 [medlem_fornavn] => søren ) [3] => Array ( [tid] => 465 [medlem_fornavn] => søren ) [4] => Array ( [tid] => 466 [medlem_fornavn] => søren ) [5] => Array ( [tid] => 467 [medlem_fornavn] => søren ) [6] => Array ( [tid] => 468 [medlem_fornavn] => søren ) [7] => Array ( [tid] => 469 [medlem_fornavn] => søren ) [8] => Array ( [tid] => 470 [medlem_fornavn] => søren ) [9] => Array ( [tid] => 471 [medlem_fornavn] => søren ) [10] => Array ( [tid] => 472 [medlem_fornavn] => søren ) [11] => Array ( [tid] => 473 [medlem_fornavn] => søren ) [12] => Array ( [tid] => 474 [medlem_fornavn] => søren ) [13] => Array ( [tid] => 475 [medlem_fornavn] => søren ) [14] => Array ( [tid] => 476 [medlem_fornavn] => søren ) [15] => Array ( [tid] => 477 [medlem_fornavn] => søren ) [16] => Array ( [tid] => 478 [medlem_fornavn] => søren ) [17] => Array ( [tid] => 479 [medlem_fornavn] => søren ) [18] => Array ( [tid] => 480 [medlem_fornavn] => søren ) [19] => Array ( [tid] => 481 [medlem_fornavn] => søren ) [20] => Array ( [tid] => 482 [medlem_fornavn] => søren ) [21] => Array ( [tid] => 483 [medlem_fornavn] => søren ) [22] => Array ( [tid] => 484 [medlem_fornavn] => søren ) [23] => Array ( [tid] => 485 [medlem_fornavn] => søren ) [24] => Array ( [tid] => 486 [medlem_fornavn] => søren ) [25] => ) Start på udtræk Array ( [tid] => 460 [medlem_fornavn] => søren ) Array ( [tid] => 459 [medlem_fornavn] => søren ) Array ( [tid] => 462 [medlem_fornavn] => søren ) Array ( [tid] => 465 [medlem_fornavn] => søren ) Array ( [tid] => 466 [medlem_fornavn] => søren ) Array ( [tid] => 467 [medlem_fornavn] => søren ) Array ( [tid] => 468 [medlem_fornavn] => søren ) Array ( [tid] => 469 [medlem_fornavn] => søren ) Array ( [tid] => 470 [medlem_fornavn] => søren ) Array ( [tid] => 471 [medlem_fornavn] => søren ) Array ( [tid] => 472 [medlem_fornavn] => søren ) Array ( [tid] => 473 [medlem_fornavn] => søren ) Array ( [tid] => 474 [medlem_fornavn] => søren ) Array ( [tid] => 475 [medlem_fornavn] => søren ) Array ( [tid] => 476 [medlem_fornavn] => søren ) Array ( [tid] => 477 [medlem_fornavn] => søren ) Array ( [tid] => 478 [medlem_fornavn] => søren ) Array ( [tid] => 479 [medlem_fornavn] => søren ) Array ( [tid] => 480 [medlem_fornavn] => søren ) Array ( [tid] => 481 [medlem_fornavn] => søren ) Array ( [tid] => 482 [medlem_fornavn] => søren ) Array ( [tid] => 483 [medlem_fornavn] => søren ) Array ( [tid] => 484 [medlem_fornavn] => søren ) Array ( [tid] => 485 [medlem_fornavn] => søren ) Array ( [tid] => 486 [medlem_fornavn] => søren )
Warning: extract(): First argument should be an array in /home/.sites/75/site8/web/dbadmin/system/pdf/medbrevepdf.php on line 21
Avatar billede Slettet bruger
12. oktober 2004 - 22:10 #5
Den fejl, var min skyld så. Når der ikke er flere rækker, vil mysql_fetch-funktionerne returnerne værdien false, og den bliver også puttet i arrayet. Når det array bagefter bliver gennemløbet, vil der derfor komme den Warning efter at alle de almindelige rækker er klaret.

Løsning: Ret

while ($raekker[] = mysql_fetch_assoc($resultat));

til

while ($row = mysql_fetch_assoc($resultat)){
  $raekker[]=$row;
}

Og så skulle du kunne fjerne print_r og echo-linierne, og så burde det virke.
Avatar billede straszek Praktikant
18. oktober 2004 - 09:52 #6
Det virker sådan set fint nok, bortset fra at det ikke virker :-)

Det ovenstående virker fint i ren php/html, ligesom mit udgangspunkt. Problemet er når det bliver koblet sammen med fpdf, så går det galt.

De rigtig tabeller bliver opdateret, men der bliver ikke udskrevet nogen pdf-fil. Jeg har forsøgt at skrive til udviklere af fpdf, med det har ikke hjulpet mig meget videre

Se debatten her:
http://www.fpdf.org/phorum/read.php?f=1&i=17063&t=17063
Avatar billede Slettet bruger
18. oktober 2004 - 13:04 #7
Det virker ikke som om de rigtigt forstår, hvad problemet er, men deres ene løsningsforslag kunne være en god ide.

Prøv at lave om til:

$pdf->Output('velkommen.pdf','F');

Bagefter kan du lave et link til pdf-filen, eller sende direkte videre. Dvs. enten:

echo "<a href='velkommen.pdf'>Her er filen</a>";

eller

header("Location: velkommen.pdf");
Avatar billede straszek Praktikant
18. oktober 2004 - 16:01 #8
Det virker sku'!

Selvom jeg ikke fatter hvad forskellen er, men det er jo også irelevant, bare det virker.

Smid et svar og du skal få point
Avatar billede Slettet bruger
18. oktober 2004 - 16:23 #9
Det var jo godt. Jeg ved nu heller ikke med sikkerhed, hvad der gik galt. (Muligvis skulle du have sat en Content-Type...)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester