pdf e php

allora io ho questo script

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

//Connect to your database
//include("config.inc.php");
//include("connect.inc.php");

$db_host = "localhost";
$db_user = "***";
$db_password = "***";
$db_name = "***";

$db   =   mysql_connect($db_host,   $db_user,   $db_password);
if   ($db   ==   FALSE)
die   ("Errore   nella   connessione.   Verificare   i   parametri   nel   file   config.inc.php" . mysql_error( ) );
mysql_select_db($db_name,   $db)
or   die   ("Errore   nella   selezione   del   database.   Verificare   i   parametri   nel   file   config.inc.php" . mysql_error( ) );

//Create new pdf file
$pdf=new FPDF();

//Open file
$pdf->Open();

//Disable automatic page break
$pdf->SetAutoPageBreak(false);

//Add first page
$pdf->AddPage();

//set initial y axis position per page
$y_axis_initial = 25;

//print column titles for the actual page
$pdf->SetFillColor(232,232,232);
$pdf->SetFont('Arial','B',12);
$pdf->SetY($y_axis_initial);
$pdf->SetX(25);
$pdf->Cell(30,6,'titolo',1,0,'L',1);
$pdf->Cell(30,6,'regione',1,0,'L',1);
$pdf->Cell(30,6,'tipopiatto',1,0,'L',1);
$pdf->Cell(30,6,'persone',1,0,'L',1);
$pdf->Cell(30,6,'ingredienti',1,0,'L',1);
$pdf->Cell(30,6,'preparazione',1,0,'L',1);
$pdf->Cell(30,6,'note',1,0,'L',1);
$pdf->Cell(30,6,'difficolta',1,0,'L',1);

$y_axis = $y_axis + $row_height;

//Select the Products you want to show in your PDF file
$result=mysql_query("SELECT   titolo,   regione, tipopiatto, persone,   ingredienti,  preparazione, note, difficolta   FROM   ricette WHERE   id='$id'");

//initialize counter
$i = 0;

//Set maximum rows per page
$max = 25;

//Set Row Height
$row_height = 6;

while($row = mysql_fetch_array($result))
{
   //If the current row is the last one, create new page and print column title
   if ($i == $max)
   {
      $pdf->AddPage();

      //print column titles for the current page
      $pdf->SetY($y_axis_initial);
      $pdf->SetX(25);
      $pdf->Cell(30,6,'titolo',1,0,'L',1);
      $pdf->Cell(30,6,'regione',1,0,'L',1);
      $pdf->Cell(30,6,'tipopiatto',1,0,'L',1);
      $pdf->Cell(30,6,'persone',1,0,'L',1);
      $pdf->Cell(30,6,'ingredienti',1,0,'L',1);
      $pdf->Cell(30,6,'preparazione',1,0,'L',1);
      $pdf->Cell(30,6,'note',1,0,'L',1);
      $pdf->Cell(30,6,'difficolta',1,0,'L',1);

      
      //Go to next row
      $y_axis = $y_axis + $row_height;
      
      //Set $i variable to 0 (first row)
      $i = 0;
   }

   $titolo = $row['titolo'];
   $regione = $row['regione'];
   $tipopiatto = $row['tipopiatto'];
   $persone = $row['persone'];
   $ingredienti = $row['ingredienti'];
   $preparazione = $row['preparazione'];
   $note = $row['note'];
   $difficolta = $row['difficolta'];
   

   $pdf->SetY($y_axis);
   $pdf->SetX(25);
   $pdf->Cell(30,6,$titolo,1,0,'L',1);
   $pdf->Cell(30,6,$regione,1,0,'L',1);
   $pdf->Cell(30,6,$tipopiatto,1,0,'L',1);
   $pdf->Cell(30,6,$persone,1,0,'L',1);
   $pdf->Cell(30,6,$ingredienti,1,0,'L',1);
   $pdf->Cell(30,6,$preparazione,1,0,'L',1);
   $pdf->Cell(30,6,$note,1,0,'L',1);
   $pdf->Cell(30,6,$difficolta,1,0,'L',1);
   
   //Go to next row
   $y_axis = $y_axis + $row_height;
   $i = $i + 1;
}

mysql_close($link);

//Create file
$pdf->Output();
?>

che mi crea 2 problemi.

Il primo e' che se decommento gli include mi ritorna questo messaggio d'errore:

FPDF error: Some data has already been output, can't send PDF file

che risolvo togliendo gli include e copiando il codice nello script, pero' vorrei evitare questa soluzione se possibile

Il secondo problema è che io vorrei associare questo script ad un bottone premendo il quale mi venga generato il pdf di una query tipo questa

 $result=mysql_query("SELECT   titolo,   regione, tipopiatto, persone,   ingredienti,  preparazione, note, difficolta   FROM   ricette WHERE   id='$id'");

in questo caso l'id io lo conosco avendo gia' visualizzato a video i dati (nella barra dell'indirizzo vedo http://www.altervista.org/view.php?id=16) ma come lo passo alla query in modo che mi venga stampato quel record specifico?

inviato 10 anni fa
blackeyes
X 0 X

il problema degli include deve essere banalmente legato ad un output involontario generato da querti file, come uno spazio o un "a capo" al di fuori dei tag PHP. Controlla bene!!!

Il problema dell'id invece si può risolvere in diversi modi:

1) memorizzandolo in sessione

2) mettendo un campo nascosto nel form contenente l'id

3) accodando l'id all'url richiesto alla pressione del tasto

 :bye:

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

per  gli include ora controllo,per le tre opzioni mi debbo documentare vorrei pero' provare ad utilizzare le sessioni puoi darmi qualche info in piu'?

risposto 10 anni fa
blackeyes
X 0 X

ho scritto un articolo sulle sessioni:

http://www.phpnews.it/articoli/php/le-sessioni/

 :bye:

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

intanto grazie ora mi documento e poi ti scoccio ancora :bye

risposto 10 anni fa
blackeyes
X 0 X

Il problema dell'id invece si può risolvere in diversi modi:

1) memorizzandolo in sessione

2) mettendo un campo nascosto nel form contenente l'id

3) accodando l'id all'url richiesto alla pressione del tasto

 :bye:

dal tuo articolo leggo: 'Le uniche variabili che non possono essere memorizzate in $_SESSION sono gli identificatori di risorsa come ad esempio l'id di una connessione a database o il puntatore di un file restituito dalla funzione fopen().'

quindi come memorizzo l'id?mi aiuti con qualche riga di codice?

risposto 10 anni fa
blackeyes
X 0 X

L'id di una connessione a database è quel valore restituito ad esempio dalla mysql_connect

Non serve salvarlo in sessione perché tanto ogni volta che viene lanciato uno script PHP è necesario riconnettersi al database.

 :bye:

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

Ok ho  frainteso io ma come faccio a memorizzare un id specifico risultante da una query in sessione in modo da poterlo passare allo script che mi genera un pdf?

oppure se è piu' semplice come accodo l'id all'url richiesto alla pressione del tasto?

Non fraintendere non voglio la "pappa pronta" ma con due righe di codice mi sarebbe piu' facile capire.

Ciao e grazie

risposto 10 anni fa
blackeyes
X 0 X

ho provato anche a fare questo nel file view.php ho settato la variabile $var=$id

$query   =   "SELECT   titolo,   regione, tipopiatto, persone,   ingredienti,  preparazione, note, difficolta   FROM   ricette WHERE   id='$id'";
$result   =   mysql_query($query,   $db);
$row   =   mysql_fetch_array($result);
$var.=$id;

e nel file che dovrebbe creare il pdf ho provato a fare questo

$result=mysql_query("SELECT   id, titolo,   regione, tipopiatto, persone,   ingredienti,  preparazione, note, difficolta   FROM   ricette WHERE   id='$var'");

ma non funziona :( :( :( :( :(

help please

risposto 10 anni fa
blackeyes
X 0 X

nessun suggerimento?

risposto 10 anni fa
blackeyes
X 0 X

innanzitutto ID non dovrebbe essere una stringa in un DB quindi non scrivere

[code=errato] [....], difficolta   FROM   ricette WHERE   id='$id'";

ma

[code=esatto] [....], difficolta   FROM   ricette WHERE   id=$id";

Secondo

basta richiamare la pagina che crea il PDF con un link del tipo:

echo "<a href='creaPDF.php?id=".$_GET["id"]."'>
risposto 10 anni fa
Andrex
X 0 X

ora provo intanto grazie

risposto 10 anni fa
blackeyes
X 0 X

ok adesso l'id lo prende ma continua a generarmi il pdf solo con le intestazioni delle colonne e niente dati :-\

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

$db_host = "localhost";
$db_user = "***";
$db_password = "***";
$db_name = "***";

$db   =   mysql_connect($db_host,   $db_user,   $db_password);
if   ($db   ==   FALSE)
die   ("Errore   nella   connessione.   Verificare   i   parametri   nel   file   config.inc.php" . mysql_error( ) );
mysql_select_db($db_name,   $db)
or   die   ("Errore   nella   selezione   del   database.   Verificare   i   parametri   nel   file   config.inc.php" . mysql_error( ) );

//Create new pdf file
$pdf=new FPDF();

//Open file
$pdf->Open();

//Disable automatic page break
$pdf->SetAutoPageBreak(false);

//Add first page
$pdf->AddPage();

//set initial y axis position per page
$y_axis_initial = 25;

//print column titles for the actual page
$pdf->SetFillColor(232,232,232);
$pdf->SetFont('Arial','B',10);
$pdf->SetY($y_axis_initial);
$pdf->SetX(5);
$pdf->Cell(20,6,'Titolo',1,0,'L',1);
$pdf->Cell(20,6,'Regione',1,0,'L',1);
$pdf->Cell(20,6,'Tipopiatto',1,0,'L',1);
$pdf->Cell(20,6,'Persone',1,0,'L',1);
$pdf->Cell(20,6,'Ingredienti',1,0,'L',1);
$pdf->Cell(25,6,'Preparazione',1,0,'L',1);
$pdf->Cell(20,6,'Note',1,0,'L',1);
$pdf->Cell(20,6,'Difficoltà',1,0,'L',1);

$y_axis = $y_axis + $row_height;

//Select the Products you want to show in your PDF file
$query   =   "SELECT   id, titolo,   regione, tipopiatto, persone,   ingredienti,  preparazione, note, difficolta   FROM   ricette WHERE   id=$id";
$result   =   mysql_query($query,   $db);
$row   =   mysql_fetch_array($result);
//initialize counter
$i = 0;

//Set maximum rows per page
$max = 25;

//Set Row Height
$row_height = 6;

while($row = mysql_fetch_array($result))
{
   //If the current row is the last one, create new page and print column title
   if ($i == $max)
   {
      $pdf->AddPage();

      //print column titles for the current page
      $pdf->SetY($y_axis_initial);
      $pdf->SetX(5);
      $pdf->Cell(20,6,'titolo',1,0,'L',1);
      $pdf->Cell(20,6,'regione',1,0,'L',1);
      $pdf->Cell(20,6,'tipopiatto',1,0,'L',1);
      $pdf->Cell(20,6,'persone',1,0,'L',1);
      $pdf->Cell(20,6,'ingredienti',1,0,'L',1);
      $pdf->Cell(20,6,'preparazione',1,0,'L',1);
      $pdf->Cell(20,6,'note',1,0,'L',1);
      $pdf->Cell(20,6,'difficolta',1,0,'L',1);

      
      //Go to next row
      $y_axis = $y_axis + $row_height;
      
      //Set $i variable to 0 (first row)
      $i = 0;
   }

   $titolo = $row['titolo'];
   $regione = $row['regione'];
   $tipopiatto = $row['tipopiatto'];
   $persone = $row['persone'];
   $ingredienti = $row['ingredienti'];
   $preparazione = $row['preparazione'];
   $note = $row['note'];
   $difficolta = $row['difficolta'];
   

   $pdf->SetY($y_axis);
   $pdf->SetX(10);
   $pdf->Cell(10,6,$titolo,1,0,'L',1);
   $pdf->Cell(10,6,$regione,1,0,'L',1);
   $pdf->Cell(10,6,$tipopiatto,1,0,'L',1);
   $pdf->Cell(10,6,$persone,1,0,'L',1);
   $pdf->Cell(10,6,$ingredienti,1,0,'L',1);
   $pdf->Cell(10,6,$preparazione,1,0,'L',1);
   $pdf->Cell(10,6,$note,1,0,'L',1);
   $pdf->Cell(10,6,$difficolta,1,0,'L',1);
   
   //Go to next row
   $y_axis = $y_axis + $row_height;
   $i = $i + 1;
}

mysql_close($link);

//Create file
$pdf->Output();
?>

credevo che il problema fosse solo il passaggio dell'id... :-[ :-[

risposto 10 anni fa
blackeyes
X 0 X

nella query hai messo:

WHERE   id=$id

ma da dove viene $id?

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

dal file view.php che mostra i dati da trasformare in pdf

<?   
include("top_foot.inc.php");   
include("config.inc.php");
include("connect.inc.php");
top();
$query   =   "SELECT   titolo,   regione, tipopiatto, persone,   ingredienti,  preparazione, note, difficolta   FROM   ricette WHERE   id=$id";
$result   =   mysql_query($query,   $db);
$row   =   mysql_fetch_array($result);
$var.=$id;
$riga.="<table width=600 border=1 cellspacing=0 cellpadding=3 align=center>";
$riga.="<td  width=600 height=56 align=center><b>$row[titolo]</b></td>";
$riga.="<td  valign=top>";
$riga.="<table width=100% border=0 cellspacing=1 cellpadding=4 bgcolor=#CCCC99 align=center>";
$riga.="</table>";
$riga.="<tr bgcolor=#FFFFFF valign=top>";
$riga.="<td  bgcolor=#FFFFFF width=143>"; 
$riga.="<br /><b>Nazione / Regione:</b><br />$row[regione]<br />";
$riga.="<br /><b>N.Persone:</b><br />$row[persone]<br />";
$riga.="<br /><b>Portata:</b><br />$row[tipopiatto]<br />";
$riga.="<br /><b>Difficoltà:</b><br />";
$riga.="$row[difficolta]<br />";
if ($row['difficolta'] == "Facile")
  $riga.='<img src=1.jpg>';
elseif($row['difficolta'] == "Elaborata")
  $riga.='<img src=2.jpg>';
elseif($row['difficolta'] == "Impegnativa")
  $riga.='<img src=3.jpg>';
$riga.="<td width=452>";
$riga.="<div align=justify><b>Ingredienti:</b><br />$row[ingredienti]</div><br>";
$riga.="<table width=300 border=0 cellspacing=0 cellpadding=0>";
$riga.="</tr>";
$riga.="<td height=10></td>";
$riga.="  </tr>";
$riga.="<div  align=justify><b>Preparazione:</b><br />$row[preparazione]</div></td></tr>";
$riga.="</table>";
$riga.="<div  align=justify><b>Note:</b><br />$row[note]</div></td></tr>";
$riga.="</table>";
$riga.="<table width=600 border=0 cellspacing=0 cellpadding=0 align=center>";
$riga.="<tr>";
$riga.="<td height=10></td>";
$riga.="</tr>";
$riga.="</table>";
$riga.="<table width=600 border=0 cellspacing=0 cellpadding=0 align=center>";
$riga.="<td><a   href=index.php>Torna   alla   pagina   iniziale</a></td>";
$riga.="<td><a href='javascript:print();'>Stampa la ricetta</a></td>";
$riga.="<td><a   href=all.php>Visualizza   tutte   le ricette</a></td>";
$riga.="<td><a   href=search.php>Cerca   nel database</a></td>";
$riga.="<td><a   href=ex2.php>test</a></td>";
$riga.= "<a href='ex2.php?id=".$_GET["id"]."'>hhh </a>";
$riga.="</table>";
echo $riga;
echo $var;
mysql_close($db);
?>
 
risposto 10 anni fa
blackeyes
X 0 X

Continuo a non capire da dove provenga $id. Forse da un link cliccato? Ovvero $_GET['id'] ?

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

Esatto. Allora l'idea era questa il view.php si occupa di mostrarmi il contenuto della ricetta e cliccando sul link test parte lo script ex2.php che dovrebbe acquisire l'id dal view.php e crearmi il pdf della ricetta precedentemente mostrata a video.

L'id lo prende infatti sulla barra degli indirizzi compare http://www.syrio.altervista.org/ex2.php?id=12 mentre prima il campo id era vuoto ma non mi mette i dati nel pdf mi crea solo l'intestazione delle colonne.

ecco l'ex2.php

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

$db_host = "localhost";
$db_user = "****";
$db_password = "***";
$db_name = "***";

$db   =   mysql_connect($db_host,   $db_user,   $db_password);
if   ($db   ==   FALSE)
die   ("Errore   nella   connessione.   Verificare   i   parametri   nel   file   config.inc.php" . mysql_error( ) );
mysql_select_db($db_name,   $db)
or   die   ("Errore   nella   selezione   del   database.   Verificare   i   parametri   nel   file   config.inc.php" . mysql_error( ) );

//Create new pdf file
$pdf=new FPDF();

//Open file
$pdf->Open();

//Disable automatic page break
$pdf->SetAutoPageBreak(false);

//Add first page
$pdf->AddPage();

//set initial y axis position per page
$y_axis_initial = 5;

//print column titles for the actual page
$pdf->SetFillColor(232,232,232);
$pdf->SetFont('Arial','B',10);
$pdf->SetY($y_axis_initial);
$pdf->SetX(5);
$pdf->Cell(20,6,'Titolo',1,0,'L',1);
$pdf->Cell(20,6,'Regione',1,0,'L',1);
$pdf->Cell(20,6,'Tipopiatto',1,0,'L',1);
$pdf->Cell(20,6,'Persone',1,0,'L',1);
$pdf->Cell(20,6,'Ingredienti',1,0,'L',1);
$pdf->Cell(25,6,'Preparazione',1,0,'L',1);
$pdf->Cell(20,6,'Note',1,0,'L',1);
$pdf->Cell(20,6,'Difficoltà',1,0,'L',1);

$y_axis = $y_axis + $row_height;

//Select the Products you want to show in your PDF file
$query   =   "SELECT  titolo,   regione, tipopiatto, persone,   ingredienti,  preparazione, note, difficolta   FROM   ricette WHERE   id=$id";
$result   =   mysql_query($query,   $db);
$row   =   mysql_fetch_array($result);


//Set Row Height
$row_height = 6;

while($row = mysql_fetch_array($result))
{

   $titolo = $row['titolo'];
   $regione = $row['regione'];
   $tipopiatto = $row['tipopiatto'];
   $persone = $row['persone'];
   $ingredienti = $row['ingredienti'];
   $preparazione = $row['preparazione'];
   $note = $row['note'];
   $difficolta = $row['difficolta'];
   

   $pdf->SetY($y_axis);
   $pdf->SetX(10);
   $pdf->Cell(30,16,$titolo,1,0,'L',1);
   $pdf->Cell(10,16,$regione,1,0,'L',1);
   $pdf->Cell(10,16,$tipopiatto,1,0,'L',1);
   $pdf->Cell(10,6,$persone,1,0,'L',1);
   $pdf->Cell(10,6,$ingredienti,1,0,'L',1);
   $pdf->Cell(10,6,$preparazione,1,0,'L',1);
   $pdf->Cell(10,6,$note,1,0,'L',1);
   $pdf->Cell(10,6,$difficolta,1,0,'L',1);
}

mysql_close($db);

//Create file
$pdf->Output();
?>
risposto 10 anni fa
blackeyes
X 0 X

Allora prima di:

$query   =   "SELECT  titolo,

prova a mettere:

$id = $_GET['id'];

 :bye:

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

non cambia nulla

risposto 10 anni fa
blackeyes
X 0 X

togli anche la riga:

$row   =   mysql_fetch_array($result);

 :bye:

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

adesso funziona perche' con la riga

$row   =   mysql_fetch_array($result);

non andava?

Grazie per la pazienza

risposto 9 anni fa
blackeyes
X 0 X

Perché non funzionava con quell'istruzione? Il motivo è semplicissimo ma non te lo dico.

Leggiti il funzionamento delle fetch:

http://www.phpnews.it/corsi/corso-php-mysql/selezione-dati-recupero-risultati-i/

http://www.phpnews.it/corsi/corso-php-mysql/selezione-dati-recupero-risultati-ii/

 :bye:

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

e' perche'PHP  conserva i dati nella sua memoria (in un "buffer", da cui il nome buffered query) ma non li rende direttamente disponibili allo script. giusto?

risposto 9 anni fa
blackeyes
X 0 X
e' perche'PHP  conserva i dati nella sua memoria (in un "buffer", da cui il nome buffered query) ma non li rende direttamente disponibili allo script. giusto?

E' solo una parte della risposta. Una volta che PHP ha memorizzato i risultati della query in un buffer, con le istruzioni di fetch questi dati vengono estratti, riga per riga. Ogni volta che chiami una istruzione di fetch estrai una riga. Nel tuo caso l'struzione $row   =   mysql_fetch_array estraeva una riga e la conservava in $row. Ma il tuo codice non usava i dati in $row e dopo poche righe, all'intero di un ciclo while, ripeteva la fetch, estraendo una (eventuale) seconda riga. Ma la seconda riga forse non c'era mentre la prima, contenuta in $row, non era utilizzata.

Togliendo la prima mysql_fetch_array eviti di recuperare la prima riga, che poi dimentichi nella variabile $row inutilizzata. La successiva mysql_fetch_array farà il resto.

Se studi il funzionamento delle funzioni mysql (2-3 giorni) questi errori non li fai più  O0

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

grazie 6 sempre molto chiaro e disponibile O0 vado a studiare :P

risposto 9 anni fa
blackeyes
X 0 X

ciao a tutti,

 siccome mi trovo nella situazione di generare un pdf con valori che passo attraverso una query ho trovato questo fantastico esempio che calza perfettamente....solo che ho un problema, quando chiamo la pagina contenete il codice dell'utente blackeyes mi appare la finestra chiedendomi se voglio salvare il file oppure aprirlo...ma il file ha estensione .php e nn .pdf

 :o

risposto 9 anni fa
fertilia
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda