Newsgroup: it.comp.www.php
Titolo: Testo e immagini da DB

Ciao,
dovrei generarmi un report in php, prendendo i dati da un DB che
contiene sia una tabella immagini che una tabella dati associati.
Per capirci una cosa del tipo:
Foto N° X
+-------------------+
!                   !
! Blob della Foto X !
!                   !
+-------------------+
Personaggio della foto: Y,
dove X e' un parametro che mi arriva da una cosa del tipo:
<body>
<h1>Inserire il numero della foto</h1>
<ul>
<form action="ShowImage.php" method="get">
<p>ID: <input type="text" name="ID"></p>
Per far vedere l'immagine uso un
Header("Content-type: image/jpg");
echo $result['IMMAGINE'];
dove result è il risultato di un fetch dal DB.
Il problema è che se metto qualcosa prima di questo, risulta che io
abbia già mandato qualcosa in output, per cui ottengo l'errore
Cannot modify header information - headers already sent by
Nemmeno con ob_start e ob_end_flush ottengo un risultato.
Come posso fare?
Grazie in anticipo
Jake

 Nemmeno con ob_start e ob_end_flush ottengo un risultato.
Impossibile. Posta tutto il codice della pagina, l'errore e' molto
probabilmente logico.
-- 
I'am what I'am, I do what I can

probabilmente logico.
<?
function errorimage( $msg ) {
  $im = ImageCreate(600, 43 );
  ImageFill($im, 0, 0, ImageColorAllocate($im, 192, 192, 192 ) );
  $color = ImageColorAllocate($im, 0, 0, 0 );
  ImageString($im, 5, 5, 3, "Error", $color );
  ImageString($im, 4, 5, 23, $msg, $color );
  Header("Content-type: image/gif");
  ImageJpeg($im );
  ImageDestroy($im );
  exit(1 );
}
$db = "mydb.world";
$conn = ocilogon("test","test",$db);
$ImgId = $_GET['ID'];
if (!isset($conn))
  errorimage("Variable \$conn non inizializzata!");
if (!isset($ImgId))
  errorimage("Variabile \$ImgId non inizializzata");
$stmt = @OCIParse($conn, "select IMAGE from IMAGES where ID=$ImgId" );
if (!@OCIExecute($stmt ))
  errorimage($php_errormsg );
if (!@OCIFetchInto($stmt, $result, OCI_ASSOC ))
  errorimage("Immagine Id=$PicId non trovata nel database");
ob_start;
echo 'PIPPO';
Header("Content-type: image/jpg");
echo $result['IMAGE'];
while (@ob_end_flush());
OCILogoff($conn );
?>
Questo non funziona, mentre se commento echo 'PIPPO' funziona bene.
Ciao

 OCILogoff($conn );
Il codice corretto e':
ob_start ();
echo 'PIPPO';
ob_end_clean (); // oppure $out = ob_get_contents ();
Header("Content-type: image/jpg");
echo $result['IMAGE'];
OCILogoff($conn );
E' ovvio che se utilizzi nel modo scorretto le funzioni per il
buffering la cosa non funziona.


buffering la cosa non funziona.
Ovvio. Ma non ho scritto da nessuna parte e' un baco di PHP'. Chiedevo
come si faceva, proprio perche' ero certo di far qualcosa di errato, e
da nessuna parte ho trovato un esempio che spiegasse come si fa.

 Parzialmente: vedo solo l'immagine, ma non la scritta "PIPPO".
Guadra che se fai una domanda del genere non hai ben compreso come
funziona il protocollo HTTP ne PHP.
Per far visualizzare in una pagina una immagine ed una scritta utilizza
il seguente codice:
<?php 
// file pagina.php
  print ("Pippo");
  print ("<img src='image.php' />");
?>
<?php 
// file image.php
// funzioni per accesso al db e query
  Header("Content-type: image/jpg");
  echo $result['IMAGE'];
  OCILogoff($conn );
?>
Non puoi mischiare output html con output binary (es immagini etc.)


Non puoi mischiare output html con output binary (es immagini etc.)
Questo non lo sapevo. Adesso capisco il perché non funziona.
Grazie 

 Hai qualcosa da consigliarmi?
Scaricati gli RFC riguardanti il protocollo HTTP.
http://www.rfc-editor.org/
