Newsgroup: it.comp.www.php
Titolo: Visualizzare campi blob

Salve a tutti, studio da pochissimo php e la domanda forse può sembrare
banale.
Nel mio db Mysql ho un campo blob che contiene immagini.
Sto cercando di realizzare una pagina web sotto apache che mi visualizzi la
mia immagine contenuta nel campo blob. Ho scritto questo codice....ma il
campo "foto" (campo blob) non viene visualizzato (gli altri campi li legge
bene), chi mi può suggerire dove sbaglio?
<?php
@mysql_connect("host","user","pwd") or die("Connessione fallita !");
@mysql_select_db("archifoto") or die("Selezione Database fallita !");
$query = "SELECT foto, path, codice FROM Foto WHERE Id = 40";
$select = @mysql_query($query) or die("Query fallita !");
$result = @mysql_fetch_array($select);
$path = $result["path"];
$codice = $result["codice"];
$foto = $result["foto"];   /** campo blob **/
Header("Content-type:  image/JPEG");
echo "<p>" .$foto.  "</p>";  /** NON VEDO NULLA **/
echo "<p>" .$codice.  "</p>";
echo $path;
@mysql_close();
?>
....se il codice in php così com'è è corretto andrò a ri-ri-controllare il
salvataggio del campo blob fatto in Delphi....
 Grazie mille a tutti
Paola

 bene), chi mi puň suggerire dove sbaglio?
inizia cosě:
- metti error_reporting a E_ALL
- togli l'istruzione header (temporaneamente) e controlla che senza 
funzioni, altrimenti puoi vedere gli errori
- rimetti l'header e lascia solo l'echo delle foto, senza tags e senza 
nient'altro
(mai visto <p> all'inizio di un file jpg... :-) )
poi fai sapere.
hai provato anche a riestrarre l'immagine da Delphi per vedere se te la 
tira fuori uguale? (devi escapare i caratteri binari!)
se vuoi un esempio leggi la FAQ (cosa che avresti dovuto fare PRIMA...):
Come inserire ed estrarre un'immagine (o binario) da un database?
http://php.dopoil.com/faq.php?imageIntoDB
ciao
-- 
punkarruso

 se vuoi un esempio leggi la FAQ (cosa che avresti dovuto fare PRIMA...):
purtroppo ho cominciato ieri a buttarmi nel php e ho letto confusamente
taaaaanta roba (tempo limitatissimo!)
Comunque grazie di tutte le dritte! Ora procedo alla ricerca dell'errore.
Ciao
Paola

 (mai visto <p> all'inizio di un file jpg... :-) )
....infatti è sbagliato....modificando il codice per il post ho sostituito
male i pezzi..
bye
Paola

 echo "<p>" .$foto.  "</p>";  /** NON VEDO NULLA **/
Non vedi proprio nulla, o vedi il nome della foto, come succede a me? (anche
senza tag <p>).
Ho provato anche mettendo il tag <img src=....; in questo caso vedo la foto,
ma sicuramente ho sbagliato nell'inserimento in tabella del campo blob.
Ho semplicemente inserito percorso e nome file nel campo... cosa che
sicuramente non và.
Non sono riuscito a trovare nessuna info su come trattare i dati blob, ....
aspetto lumi! :-)
--
73 de IK2VTJ, Piero.
http://www.ardf.it
 , 
http://www.qsl.net/ik2vtj
Togli/Remove 'NONVOGLIOSPAM' dall'indirizzo/from address

 aspetto lumi! :-)
Non li attendo più... ho letto le FAQ!!
Come inserire ed estrarre un'immagine (o binario) da un database?
http://php.dopoil.com/faq.php?imageIntoDB
--


 senza tag <p>).
dopo i suggerimenti di pankarruso sono arrivata al punto che vedo una
paginata di caratteri strani
tipo "  ?  ?  ?  ?  ?  ?  ?  Å52âssÐQP "
e sinceramente è già qualcosa rispetto al niente. Purtroppo l'inserimento
del campo blob lo faccio in Delphi
utilizzando i suoi oggettini db. Se avessi potuto farlo in php avrei
sicuramente seguito le istruzioni nelle FAQ.
Sto cercando l'equivalente della funz. addslashes perkè mi viene il dubbio
che sia nell'inserimento del blob il mio bug.........ma non è questo il
posto giusto per parlarne!
Buon lavoro
Paola


Come non detto... riattendo lumi!
Dove sbaglio? Mi sembra che, adattamenti a parte, non ci siano variazioni
significative rispetto al codice copiato sulle FAQ.
$filename="percorso/foto.jpg"; // funziona solo con percorso assoluto e non
relativo (c:/etc., non localhost/...)
$fd = fopen ($filename, "rb");
$contents = fread ($fd, filesize ($filename));
fclose ($fd);
//echo $contents; se attivo questa vedo la foto;
include('include/connessione.php'); // connette al db, funzia!
$query = "update tmp set foto = '".addslashes($contents)."'";
//modificata dopo aver inserito un record in una tabella esistente;
$res = mysql_query($query) or die(mysql_error());
// non dà nessun errore
Header("Content-type:  image/JPEG");
// se elimino l'header vedo il codice binario, quindi qualcosa legge
$query = "select foto from tmp where id=58";
$res = mysql_query($query) or die(mysql_error());
// nessun errore
$riga=mysql_fetch_row($res);
print $riga[0];
// l'esistenza dell'indice [0], mi aveva fatto pensare ad un errore alla
riga precedente ed ho provato anche con
mysql_fetch_array, ma non cambia nulla.
In definitiva, vedo soltanto il riquadro vuoto della foto e nessun errore.


 Paola
Anche con php le cose non vanno meglio. Leggi messaggio sopra. :-(


 tipo "  ?  ?  ?  ?  ?  ?  ?  Å52âssÐQP "
devi settare l'header:
header('Content-Type: image/jpeg');
ciao
-- 
punkarruso

 In definitiva, vedo soltanto il riquadro vuoto della foto e nessun errore.
stranissimo.
per sfizio ho provato il seguente:
insert.php:
<?php
header("Content-type: image/jpeg");
mysql_connect("localhost","","");
mysql_select_db("test");
$filename="./foto.jpg";
$fd = fopen ($filename, "rb");
$contents = fread ($fd, filesize ($filename));
fclose ($fd);
$sql="insert into tmp (foto) values ('".addslashes($contents)."')";
mysql_query($sql);
print $contents;
?>
select.php:
<?php
header ("Content-type: image/jpeg");
mysql_connect("localhost","","");
mysql_select_db("test");
$sql="select foto from tmp where id=".$_GET['id'];
$result=mysql_query($sql);
$riga=mysql_fetch_row($result);
print $riga[0];
?>
e funziona a dovere.
curiosità, la DDL della tabella qual'è???
ciao
-- 
punkarruso

 curiosità, la DDL della tabella qual'è???
??? Perchè mi fai domande difficili?? :-)


 ??? Perchè mi fai domande difficili?? :-)
la definizione (create table tmp...).
ddl sta per data definition language,
ovvero le queries che modificano la STRUTTURA del db.
dml sono data manupulation language (update, insert, delete ecc.)
-- 
punkarruso

 per sfizio ho provato il seguente:
....
Ho riprovato col nuovo(?) esempio, lasciando i due script per l'inserimento
e la lettura separati, ma niente da fare: tutto come prima.
Inoltre non mi funziona $GET['id']; mi dà questo:
Notice: Undefined index:  id in C:\htdocs\provafoto.php on line 46.
L'indice si chiama proprio 'id'. Ma anche scrivendo il numero, il risultato
è lo stesso.
Non è che ci siano altri parametri della configurazione in php.ini da
controllare?
Intanto, se può servire, ecco l'ambiente di lavoro:
win2k pro SP3
Apache 2.0.40
PHP 4.2.3
MySQL 3.23.43 - max debug


 ha scritto nel messaggio
news:5NWga.55737$7y3.1...@twister1.libero.it...

Grazie della spiegazione, ma non sono sicuro se rispondo alla tua domanda in
questo modo:
CREATE TABLE tmp (
  id tinyint(4) NOT NULL auto_increment,
  nconc tinyint(2) NOT NULL default '0',
  callsign varchar(20) default NULL,
  volpe char(1) default NULL,
  partenza int(6) NOT NULL default '0',
  arrivo int(6) NOT NULL default '0',
  tempo int(6) NOT NULL default '0',
  penalty int(6) NOT NULL default '0',
  foto longblob NOT NULL,
  PRIMARY KEY  (id)
) TYPE=MyISAM;


 Inoltre non mi funziona $GET['id']; mi dà questo:
$_GET['id'];
manca un underscore.
per il resto non so proprio cosa dirti.
dovresti controllare che tutte le queries che effettui siano giuste.
prova a fare così:
una volta che estrai l'immagine, anziché stamparla sullo stream, 
riscrivila in un file.
se tutto è andato bene, le due foto (l'originale e quella estratta dal 
db) dovrebbero essere copie 1:1.
altrimenti vedrai leading 0's o altro facendo un diff o guardando con un 
editor esadecimale.
ciao
-- 
punkarruso