Newsgroup: it.comp.www.php
Titolo: Estrarre e mostrare immagini dal db

Storia vecchia (lo so), c'è nelle faq (lo so) però non funziona.
header ("Content-type: image/jpeg");
$query = mysql_query("select foto from albums where album = '$album'
order by id", $conn);
$num_rows = mysql_num_rows($query);
if ($num_rows > 0)
	{
	form_init("album_main.php");
	for ($i = 1; $i <= $num_rows; $i++)
		{
		$row = mysql_fetch_row($query);
		echo $row[0]; 
		}
	form_close();
	}
risultato: ÿØÿà JFIF
``ÿÛC   ...  etc etc
che faccio?
Grazie.

 	}
Sicuramente non va' bene di volere visualizzare 
$num_rows > 1 nello stesso immagine. Devi creare uno
script che prende per un id specifico i dati dal database.
(WHERE album='$album' LIMIT 1). Penso che non hai ben
chiaro l'infrastruttura per visualizzare immagini.
Se devi visualizzare piu' di un immagine dovresti avere
uno script principale che determina il numero delle immagini
presenti. Poi generi link che visualizzano l'immagine 
attraverso uno secondo script tipo:
<IMG src=showImage.php?id=$id>
e showImage.php contiene il tuo codice ridotto ad un id
specifico (senza quei form_init ecc.). Un 'Content-type: image/' 
non deve avere dati HTML ma spara' solo uno stream di dati 
binary (il file .jpg puro in parole povere).
-- 
I'm not a signature.

binary (il file .jpg puro in parole povere).
In che senso?
Perso di nuovo...
Cmq (e non per fare polemica) io sarò anche uno che ne capisce poco,
ma è piuttosto diverso dall'esempio delle faq.
Da quell'esempio si deduce che si può richiamare e mostrare un blob
con un echo (o print) come qualsiasi altro tipo di campo.

 con un echo (o print) come qualsiasi altro tipo di campo.
Allora, riproviamo a mettere ordine:
Pensa come riceve un browser i dati:
- Richiesta pagina html
- nella pagina html ci sono <IMG src=image1>
- Il browser analizza html e richiede gli immagini.
Nella faq c'e' solo la parte per leggere un immagine 
(quindi la parte che richiede un browser con <IMG src>.
E per tale e' validissimo. Nel tuo esempio cerchi di
buttare piu' di un imagine nello stesso stream (ed il 
browser non sa cosa fare con la roba che mandi).
Tu devi generare un HTML con i tag img
<IMG src=show.php?id=1>
<IMG src=show.php?id=2>
ecc.
il show.php corrisponde a quello nella faq.
ttp://
php.dopoil.com/faq.php?ImageIntoDB
quindi fai uno script showalbum.php
(in grande linea)
<?php 
// connect database
$rslt=mysql_query("SELECT id from album where album='bla'");
while ($r=mysql_fetch_assoc($rslt))
{
	echo "<IMG src=\"show.php?id=$r[id]\">\n";
}
?>
// tutto qui
cosi, il browser richiede showalbum.php, egli crea HTML con i <IMG src
e dopo il browser richiede gli immagini via show.php?id=
Piu' chiaro?


Piu' chiaro?
Sì, decisamente.
Anzi, grazie per le spiegazioni.
rimangono due problemi.
1)
questo è show_img.php:
header ("Content-type: image/jpeg");
include_once "./inc/config.inc.php";
$sql="select foto from albums where id='$id'";
//////////curiosità: dove lo prende questo '$id'?
$query=mysql_query($sql,$conn);
$row=mysql_fetch_row($result);
echo $row[0];
e questo è album.php:
$query=mysql_query("select id from albums where album='$album'");
while ($i = mysql_fetch_assoc($query))
	{
	echo "<IMG src=\"show_img.php?id=$i[id]\">\n";
	}
adesso album.php mostra i segnaposto per le immagini ma non le
immagini
2)
Per queste prove ho trasformato show_album.php in una pagina normale
(quella che adesso mostra i segnaposto), ma in realtà dovrà essere
composta da due frame: quello si sinistra che mostra le thumbnail e
quello di destra dove appare in dimensioni reali la thumbnail cliccata
nel frame sinistro.
Insomma, quando ho reinserito i frame sono scomparsi anche i
segnaposto.

 immagini
il segnaposto è giusto? visualizza correttamente
<IMG src="show_img.php?id=1">
<IMG src="show_img.php?id=2">
...
<IMG src="show_img.php?id=n">
??
devi imparare:
1) a irrobustire il codice con checks ecc.
2) a trappare, visualizzare e interpretare i messaggi di errore
3) a guardare nel codice HTML che ci sia il risultato sperato
4) a leggere bene il manuale del PHP
poi si vedranno i risultati.
ciao
-- 
punkarruso

poi si vedranno i risultati.
Mi sa che faccio una bella cosa: riprovo a fare tutto quanto da capo,
poi (dato che non funzionerà mai) ficco le foto in una cartella e
buonanotte.
Cmq grazie per l'aiuto.

 buonanotte.
se questo è il tuo approccio ai problemi...
e poi scopri magari che non ti funzionava per una cavolata...
sei sicuro di aver INSERITO le foto nel modo corretto?
hai provato ad estrarre le foto e a salvarle su file, per poi vedere se 
coincidono 1:1 con quelle che hai caricato?
fai così: prendi un'immagine e salvala come foto.jpg
poi scrivi questo per l'inserimento:
<?php
error_reporting(E_ALL);
mysql_connect("localhost","","") or die(mysql_error());
mysql_select_db("test") or die(mysql_error());
$filename="./foto.jpg";
$fd = fopen ($filename, "rb") or die("non trovo il file");
$contents = fread ($fd, filesize ($filename)) or die("non riesco a 
leggere il file");
fclose ($fd);
$sql="insert into album (foto) values ('".addslashes($contents)."')";
mysql_query($sql) or die("Failure: ".mysql_error());
header("Content-type: image/jpeg");
print $contents;
?>
e richiamalo come 
http://path/script.php
(e intanto vedi se viene visualizzata l'immagine in inserimento)
poi scrivi questo per la visualizzazione:
<?php
error_reporting(E_ALL);
mysql_connect("localhost","","") or die(mysql_error());
mysql_select_db("test") or die(mysql_error());
$sql="select foto from fotodb where id=".$_GET['id'];
$result=mysql_query($sql) or die(mysql_error());
$riga=mysql_fetch_row($result) or die(mysql_error());
if(!empty($riga0])) {
	header ("Content-type: image/jpeg");
	print $riga[0];
} else	{
	echo "non ho tirato fuori niente";
}
?>
cerca di cambiare (ovviamente) il meno possibile.
aspetta ad integrarlo col tuo codice, prima vedi se funziona così come 
te l'ho postato.
devi richiamarlo come
http://path/script2.php?id=xxx
dove xxx è un id esistente (se hai appena creato la tabella 1 dovrebbe 
andare bene).
la tabella deve avere id in auto_increment e foto *blob (occhio alle 
sizes sul manuale mysql)
-- 
punkarruso

la tabella deve avere id in auto_increment e foto *blob 
la tabella č sempre stata cosě.
L.C.
^^^

 Something is wrong in your syntax près de '' à la ligne 1
che release hai di PHP?
se non ti vede $_GET['id'] dovrai usare $HTTP_GET_VARS['id'].
prima però rispondimi sull'inserimento. (l'errore stà anche lì)
(il problema dell'output prima degli header è comunq ai due steps)
ciao
-- 
punkarruso

allora ci prendiamo in giro...
Non mi pare proprio.
Usavo un include che funziona perfettamente, cmq ho risolto e
funziona.
Su script2 però ho dovuto usare $HTTP_GET_VARS.
Ho la 4.0.6

 Ho la 4.0.6
infatti. l'abbreviazione $_GET è stata introdotta dalla 4.1
ciao
-- 
punkarruso

infatti. l'abbreviazione $_GET è stata introdotta dalla 4.1
Adesso però sono sempre nella merda perché devo gestire delle
thumbnail nel frame sx (vedi post apposito) che quando le clikki si
apre la foto grande nel frame "main".
Ho pensato "Ok, basta inviare la form a frame_left", solo che poi
ovviamente il browser visualizza solo quella e del main se ne frega...
Senza farti perdere un'altra mezza giornata a spiegarmi per filo e per
segno, hai un url dove sia descritta una procedura del genere?
Grazie.

 segno, hai un url dove sia descritta una procedura del genere?
cut&paste di queste righe:
http://groups.google.it/groups?as_q=frame&ie=UTF-8&oe=UTF-8&as_ugroup=
it.comp.www.php&lr=&as_drrb=b&as_mind=12&as_minm=3&as_miny=
2003&as_maxd=8&as_maxm=4&as_maxy=2003&hl=it
poi, visto che si tratta di html e non di PHP, se hai problemi 
html-related puoi provare a postare su it.comp.www.html.
ciao
-- 
punkarruso