Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MPDF]mPDF error: Some data has already been output to browser, can't send PDF file
Forum PHP.pl > Forum > PHP
BuncolPL
Witam,

Szukałem na forum, ale czegoś podobnego nie udało mi się znaleźć. Próbuję wygenerować plik .pdf . Wszystko ładnie pięknie dopóki nie muszę wrzucić danych z bazy danych. Przy wyciąganiu pojedynczych rekordów nie ma problemu, ale problem pojawia mi się przy wyciąganiu danych za pomocą while.

Jeśli wstawiam pojedynczą zmienną i robię to $html = 'kod w html'.$zmienna.'kod ciąg dalszy'; to problem się nie pojawia, ale jeśli biore

$html = 'kod w html'.
$result = mysql_query(...);
while ($row = mysql_fetch_assoc($result))
{
echo $row['costam'];
}
'kod ciąg dalszy';

Wtedy mam błąd: mPDF error: Some data has already been output to browser, can't send PDF file

Rozumie, że to jest przez echo, które wyświetla dane. Ale jak to obejść, aby było ok ?


Kod pliku wygląda mniej więcej tak:

  1. $html = 'kod w html';
  2.  
  3. include("pdf/mpdf.php");
  4.  
  5. $mpdf=new mPDF('A4');
  6.  
  7. $mpdf->WriteHTML($html);
  8.  
  9. $mpdf->Output();
nospor
echo $row['costam'];
PLujesz do przeglądarki jakimś danymi. Po co? Przecież chcesz generować pdf więc nie możesz do przeglądarki pluć czym popadnie - to jest Twój błąd.
BuncolPL
No wiem smile.gif ale jak sobie z tym poradzić ?
nospor
zamiat
echo $row['costam'];
daj:
//echo $row['costam'];

tongue.gif

No przepraszam, a skad ja mam wiedzieć co ty chcesz mieć z tego, że walisz coś do przeglądarki? Wyjaśniam ci, jak robisz PDF to nie wal nic do przeglądarki. ALbo jedno albo drugie.

A jeśli te dane ci są potrzebne do generowania PDF no to chyba są potrzebne jako zmienne a nie jako dane plute do przeglądarki.

ps: moja szklana kula mówi mi, że ty chyba chcesz mieć tak:
$html.=$row['costam'];

Skoro więc chcesz dane mieć w zmiennej to skąd pomysł by robić echo?
BuncolPL
No to jeszcze inaczej smile.gif

Jak w $html = 'kod w html'; wstawić dynamiczne dane smile.gif
nospor
Napisałem ci w moim poprzednim poście. zaraz po PS

ps2: skoro chcesz do zmiennej wkładać dane to pytam się ponownie: skąd pomysł by użyc do tego echo?
BuncolPL
Cytat
ps: moja szklana kula mówi mi, że ty chyba chcesz mieć tak:
$html.=$row['costam'];


No właśnie nie smile.gif

Chce mieć tak:

$html = 'kod html'.dane z while.'kod html';

Gdy w while robie $zmienna = $row['costam']; to kod mam taki:
$html = 'kod html'.$zmienna.'kod html';

Tylko, że wtedy pojawia mi się ostatni rekord z bazy a nie wszystkie :/

P.S Jak nie chce używać tego echo.
nospor
Ja ci napisałem:
$html.=$row['costam'];
a ty wstawiłeś:
$html = 'kod html'.$zmienna.'kod html';

No już ctrl+c oraz ctrl+v nie umiesz wcisnąć?

zamiast
echo $row['costam'];
ma być:
$html.=$row['costam'];
BuncolPL
Cytat
Ja ci napisałem:
$html.=$row['costam'];
a ty wstawiłeś:
$html = 'kod html'.$zmienna.'kod html';


Zrobiłem tak ponieważ trochę przerobiłem strukturę jak mówiłeś o tym, że muszą być tam zmienne smile.gif

Tylko, że mój kod też jest nie do końca ok, bo daje mi tylko jeden rekord a nie wszystkie :/

  1. $result = mysql_query(...);
  2. while ($row = mysql_fetch_assoc($result))
  3. {
  4. $zmienna = $row['costam'];
  5. }
  6.  
  7. $html = 'kod html'.$zmienna.'kod html';
  8.  
  9. include("pdf/mpdf.php");
  10. $mpdf=new mPDF('A4');
  11. $mpdf->WriteHTML($html);
  12. $mpdf->Output();
nospor
proszę, zwracaj uwagę co ci piszą....

ja użyłem .=
ty używasz =

Jak nie wiesz co oznacza .= to albo zajrzyj do manuala albo się dopytaj anie to olewasz.

Robiąc
$zmienna = $row['costam'];
nadpisujesz za każdym razem $zmienna więc nic dziwnego, że zawiera tylko ostatni rekord - logiczne.
Ty masz dopisywać a nie nadpisywać czyli ma być:
$zmienna.= $row['costam'];
BuncolPL
To dopisanie, ale to też w 100% nie rozwiązuje mojego problemu, ponieważ kod html się wyświetla, a dane z while nie.

Mam tak:
  1. $html = 'kod html';
  2.  
  3. $result = mysql_query("...");
  4. while ($row = mysql_fetch_assoc($result))
  5. {
  6.  
  7. $html .= $row['costam'];
  8. }
  9.  
  10. $html .= 'dalsza część kodu html';
  11.  
nospor
Zmieniasz ten kod co 5 minut. Raz dane zapisujesz w zmiennej i potem doklejasz, to znów wracasz do tego co ci na początku pisałem. No weź się zdecyduj na jakąś wersje smile.gif

No jeśli teraz kod co podałeś jest taki co masz w rzeczywistości, i dane z pętli ci się nie dopisują do $html to wniosek jest taki, że w ogóle ci do pętli nie wchodzi, bo albo nie ma danych z zapytania, albo zapytanie zwraca błąd.

Wątpie jednak, byś dokładnie taki kod miał u siebie, więc jest jeszcze jedna możliwośc: coś źle napisałeś smile.gif
BuncolPL
Kod jest ten co napisałem wyżej, czyli wróciłem do tego co mówiłeś na początku smile.gif

Zapytanie jest dobre, zwraca rekordy jak testuje to z echo.
nospor
To pokaż dokładnie kod jaki masz. Dokładnie.

Bo to co tu pokazałeś powinno działać.
BuncolPL
  1. $html = ' ......</tr>';
  2.  
  3. $wynik2 = mysql_query("select * from projekty");
  4. while ($row = mysql_fetch_assoc($wynik2))
  5. {
  6.  
  7. $html .= $row['title'];
  8. }
  9.  
  10. $html .= '</table>jakiś tekst


To co jest przed i po while się wyświetla. Dane z while mi się nie wyświetlają. Jak biorę print_r($row); w while to dane są.
nospor
No to najwidoczniej generujesz trefny kod html, który się nie wyświetla.
Wiesz jak on po wygenerowaniiu wygląda? O tak:

....</tr>Jakiś tytuł 1 Jakis tytul2 Jakis tytuł n</table>

Nic więc dziwnego, ze klasa, która generuje pdf na podstawie html olewa taki śmieć.
BuncolPL
Zgadza się smile.gif

Już wszystko jest ok smile.gif

nospor wielkie dzięki za pomoc smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.