visualizzare le immagini da db

marcocampoli

Nuovo Utente
26 Nov 2010
1
0
0
Salve a tutti.
Ho un problema con la visualizzazione. Le immagini sono caricate in un DB (il tipo usato è LONGBLOB).
Ho letto una guida che parla degli inserimenti ne DB, ed ho appreso che le cose fondamentali da fare sono pressochè 3:
1) (ovviamente) il reupero del file: $img= $_FILE['form']['tmp_name'];
2) uso della funzione file_get_contents($img);
3) uso della funzione addslashes($img);

Fin qui non ho problemi....Nel momento in cui vado a recuperare, un immagine precedentemente inserita, invece di visualizzare le immagini, visualizza una serie di codici (penso che sia l'immagine sottoforma di codice binario)......Penso che questo sia normale, perchè ho inserito nel
DB un file in formato binario....
Per visualizzare l'immagine non ho potuto segure la guida, poichè essa tratta la visualizzazione di una sola immagine
(infatti l'HEADER("CONTENT-TYPE: IMAGE/JPEG"); )
Sono giorni che cerco una soluzione......qualcuno di voi può aiutarmi???
 

emanuelevt

Utente Attivo
24 Giu 2009
298
0
0
togli i tag
<html><head.....
probabilmente se fai il var_dump... risulta string.
lascia solo da <?php a ?>
 
Ultima modifica:

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
io c'ho rinunciato.
invece dell'immagine (campo blob) metti solo il nome del file immagine e l'immagine la carichi in una cartella a piacere e poi quando la estrai la richiami col semplice src
eviti cosi tutti i problemei di header (ce spesso non sono pochi)
 

emanuelevt

Utente Attivo
24 Giu 2009
298
0
0
Anche a me mi si era presentato lo stesso problema e ricordo che era causato dai tag <html>...<body>Invece (bisogna incollare proprio come scritto nella guida) cioè dal tag <?php a ?>

Cmq alla fine anche io ho fatto come dice Borgo Italia! utilizzando una cartella csfruttando il database solo per il nome dell'img...

io ho fatto così:

p.s. ho saltato la parte dell'insrimento dell'img tramite form
PHP:
//ottengo la dimensione dell'img e se superiore sia in larghezza che in altezza di 400px
//termita comunicando che le dimensioni sono troppo grandi

$size = getimagesize($_FILES['userfile']['tmp_name']); 
$height = $size[1]; 
$width = $size[0];
if($width >400 || $height > 400){
 exit("errore dimensioni grandi");
}




//preparo la stringa per l'inserimento

$piccola=htmlspecialchars(trim(($_POST['nome_pic'])));
$insertSQL = "INSERT INTO foto (descrizione,nome_piccola) VALUES ('".htmlspecialchars($_POST['descrizione'])."','$piccola')";

//mi connetto
include "connetti.php";

//effettuo l'inserimento sul database
$Result1 = mysql_query($insertSQL) or die(mysql_error());

$ultimo_id=mysql_insert_id(); 
//valore di foto_id dopo l'inserimento

$file_temp=($_FILES['userfile']['tmp_name']);
//file temporaneo che contiene l'immagine caricata

$percorso="foto/";

/*****
+---------------------------------------------------+
|cartella sul server dove verrà spostata la foto           
|p.s. sullo spazio web se usi un server win devi f        
|arlo con una cartella predefinita tipo public               
|Se usi Linux devi abilitare i permessi                        
+---------------------------------------------------+
****/

$nuovo_nome=$percorso.$ultimo_id.".jpg";
//nuovo nome dell'immagine

//verifica se il file è stato caricato sul server
$inviato=file_exists($file_temp);


if ($inviato) {
//se $inviato è true allora sposta il file dentro la cartella
 move_uploaded_file($file_temp,$nuovo_nome);


}

Il fatto è che questo sistema è buono per applicazioni semplici - se andiamo sul complesso bisogna imparare a sfruttare per forza di cose il db - ma ancora non ho trovato uno script buono

p.s. questo codice si trova online io l'ho leggermente personalizzato - il file in questo caso ha sempre un'estensione .jpg
 
Ultima modifica:

alessandro1997

Utente Attivo
6 Ott 2009
5.302
1
0
26
Roma
alessandro1997.netsons.org
Basta salvare MIME type e contenuto dell'immagine nel database all'atto dell'inserimento, e creare una pagina chiamata ad esempio image.php, contenente:
PHP:
<?php
// gli errori non devono essere visualizzati in questa pagina
error_reporting(0);

// effettuo la connessione al database
$conn = mysql_connect('localhost', 'root') or die();
mysql_select_db('galleria', $conn) or die();

// recupero l'ID richiesto
$id = isset($_GET['id']) ? intval($_GET['id']) : 0;

// recupero i dati dalla tabella
$query = mysql_query("SELECT * FROM foto WHERE id = {$id}") or die();

// controllo che l'immagine esista
if(mysql_num_rows($query) == 1)
{
	// salvo le informazioni in un array
	$data = mysql_fetch_assoc($query);
	
	// invio l'header del MIME type
	header("Content-type: {$data['mime_type']}");
	
	// visualizzo i contenuti dell'immagine
	echo $data['image_contents'];
}
else
{
	// invio un errore 404
	header('HTTP/1.1 404 Not Found');
}
?>
E poi richiamarla così:
HTML:
<img src="image.php?id=1" />
Ovviamente con l'ID desiderato. Visto? Più facile di così...
 

Eliox

Utente Attivo
25 Feb 2005
4.390
3
0
Ottima soluzione Alex, bisognerebbe però bypassare quel:
PHP:
error_reporting(0);
perché nascondere gli errori invece di eliminarli non è una buona pratica.
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao

PHP:
header("Content-type: {$data['mime_type']}");

il problema è proprio li, la pag che ha quell'header o fa vedere l'immagini o fa casino con i testi o viceversa.
inoltre (ma di questo non sono sicuro perche non avendo più usato quel sistema non so se i vari bw si sono aggiornati) c'è il problema del Content-Type octet-stream (o octetstream come preferisce, per oscure ragioni, Internet Explorer)
 

alessandro1997

Utente Attivo
6 Ott 2009
5.302
1
0
26
Roma
alessandro1997.netsons.org
Per quanto riguarda la visualizzazione degli errori, in ambiente di produzione è sconsigliata, e a maggior ragione in un file che dovrebbe visualizzare solamente immagini.

@borgo: non c'è nessunissimo problema con gli header, perché quella pagina contiene solo quel codice, quindi non può restituire un errore relativo alla modifica degli header.
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
@alex
io non parlavo di errore di heder, ma sul fatto che se nella pagina in cui visualizzi la foto c'è anche del testo, con l'eder per l'immagine non visualizzi il testo, se metti l'header per il testo l'immagine la visualizzi con "la serie di caratteri strani".
 

alessandro1997

Utente Attivo
6 Ott 2009
5.302
1
0
26
Roma
alessandro1997.netsons.org
Non capisco qual è il tuo problema. Se hai una pagina contenente il codice che ho fornito poi puoi creare una pagina HTML con dentro quello che vuoi in cui visualizzare l'immagine. Ad esempio:
HTML:
<h1>Mia immagine</h1>
<img src="image.php?id=1" />
<p>Questa &egrave; un'immagine.</p>
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
proverò il tuo script, anche se ormai tutte le mie gallerie sono fatte nel sistema con link nel db e foto in cartella.
ti dicevo questo perchè seguendo quanto scritto negli articoli mrwm (ed anche in quelli della concorrenza) il risultato è sempre stato lo stesso
 

paperinik4

Utente Attivo
29 Mag 2011
1.811
0
36
Roma
www.ricetteagogo.it
Ciao

Basta salvare MIME type e contenuto dell'immagine nel database all'atto dell'inserimento, e creare una pagina chiamata ad esempio image.php, contenente:
PHP:
<?php
// gli errori non devono essere visualizzati in questa pagina
error_reporting(0);

// effettuo la connessione al database
$conn = mysql_connect('localhost', 'root') or die();
mysql_select_db('galleria', $conn) or die();

// recupero l'ID richiesto
$id = isset($_GET['id']) ? intval($_GET['id']) : 0;

// recupero i dati dalla tabella
$query = mysql_query("SELECT * FROM foto WHERE id = {$id}") or die();

// controllo che l'immagine esista
if(mysql_num_rows($query) == 1)
{
	// salvo le informazioni in un array
	$data = mysql_fetch_assoc($query);
	
	// invio l'header del MIME type
	header("Content-type: {$data['mime_type']}");
	
	// visualizzo i contenuti dell'immagine
	echo $data['image_contents'];
}
else
{
	// invio un errore 404
	header('HTTP/1.1 404 Not Found');
}
?>
E poi richiamarla così:
HTML:
<img src="image.php?id=1" />
Ovviamente con l'ID desiderato. Visto? Più facile di così...

Ciao Ale,

So che la discussione è vecchiotta, ma mi puoi mandare lo script che avevi realizzato delle immagini ??? Ho visto che ti eri impegnato a farlo. Grazie.
 
Discussioni simili
Autore Titolo Forum Risposte Data
A Visualizzare div quando le immagini sono state uploadate con successo (Ajax) Ajax 0
M Visualizzare immagini in PHP - MYSQL PHP 0
M Visualizzare immagini da DB in php PHP 0
Y VISUALIZZARE IMMAGINI DA DB PHP/MYSQL PHP 7
M visualizzare tutte le immagini del database PHP 3
E visualizzare automaticamente tutte le immagini di una cartella PHP 1
S urgentissimo necessità di script per evitare di far visualizzare immagini "rubate" Javascript 12
C Visualizzare immagini caricate su un Database Classic ASP 1
I Visualizzare immagini database PHP 11
D visualizzare immagini da mysql a fianco del titolo PHP 8
P visualizzare immagini da database access Classic ASP 3
G visualizzare immagini dinamiche dentro html PHP 2
0 Visualizzare immagini Javascript 0
C [php/Mysql]Visualizzare immagini PHP 14
S Visualizzare immagini caricate in un DB MySQL!! (da tutorial) PHP 18
D Visualizzare immagini da database ASP.NET 0
H Visualizzare le immagini nei motori HTML e CSS 1
P visualizzare le immagini in locale con F12 HTML e CSS 2
I visualizzare lista utenti registrati PHP 1
N php problemi a visualizzare video PHP 3
P come posso visualizzare l'nvr online IP Cam e Videosorveglianza 0
K Visualizzare del html responsive in una Webview Sviluppo app per Android 0
M Visualizzare ultima data registrata MS Access 2
G Numero zero null non deve visualizzare nulla PHP 0
D visualizzare solo foto filtrate jQuery 1
M Visualizzare nuove domande in base a risposta precedente PHP 0
N Non Autorizzato. Dovresti rimuovere il parametro customize_messenger_channel per visualizzare l'anteprima in frontend. WordPress 1
M visualizzare ip cam in windows IP Cam e Videosorveglianza 0
W visualizzare solo file html e sottocartelle di una cartella PHP 1
napuleone visualizzare il codice senza usare gli & HTML e CSS 1
Y Come caricare e visualizzare un'immagine PHP 0
M Visualizzare file PDF con link preso dal DB PHP 0
Alex_70 Visualizzare 2 bandiere PHP 6
Alex_70 Visualizzare anteprima foto in dropdown PHP 2
L Visualizzare tabella all'interno finestra modal PHP 4
P Visual Studio VB.NET Visualizzare un messaggio alla scadenza. .NET Framework 0
J [PHP] Visualizzare risultato query stessa pagina PHP 3
B visualizzare una sola riga Database 3
Alex_70 [PHP] Visualizzare foto tramite select PHP 0
K [ASP] Visualizzare nome del file selezionato Classic ASP 3
M [PHP] Visualizzare un array partendo dal numero 1 e non 0 PHP 5
L [PHP] Visualizzare utente dopo login PHP 0
L [PHP] Visualizzare se una pagina è pingata PHP 1
M [PHP] Visualizzare nell'alert il calcolo PHP 4
D [WordPress] come fare per estrarre dati da un db MySQL tramite una form e visualizzare il risultato WordPress 0
L come visualizzare array di oggetti php PHP 9
S [PHP] visualizzare commento su un prodotto precedentemente selezionato PHP 2
V [Javascript] Visualizzare o nascondere div figlio Javascript 4
W [PHP] Visualizzare errori su Statements in MySQLi PHP 3
S [javascript] visualizzare/nascondere div Javascript 3

Discussioni simili