- Home
- Categorie
- Coding e Sistemistica
- MYSQL e altri Database
- Richiamare immagini da database mysql
-
Richiamare immagini da database mysql
Ciao a tutti, scusate se posto una problematica già sicuramente discussa..ho provato a cercare ma :bho: non sono riuscito a risolvere...
Il mio problema è questo:
Ho 3 script in php per caricare immagini sul database. Una pagina per caricare l' immagine, una che esegue un elenco delle immagini caricate nel database e l' ultima che richiama l' immagine dal database. In teoria questa immagine la dovrei vedere a video, ma così non è!
Mi esce una stringa di errore nella riga 12 di pagina "mostra.php" che ora vi mostrerò... e sotto una marea di simboli strani. dovrebbe essere l' immagine, ma evedentemente non risulta codificata, non so!QUESTA LA PAGINA index.php da dove carico l' immagine nel database:
<?php
// se è stato inviato il file...
if(isset($_POST['invia']))
{
// se ci sono stati problemi nell'upload del file
if(!isset($_FILES['file_inviato']) OR $_FILES['file_inviato']['error'] != UPLOAD_ERR_OK)
mostra_form("errore nell'invio del file. Riprova");// connessione e selezione del database
mysql_connect('localhost, 'user', 'passw')
or die('Connessione non riuscita: ' . mysql_error());if(!mysql_select_db('nome DB'))
die('Selezione database fallita!');// recupero alcune informazioni sul file inviato
$nome_file_temporaneo = $_FILES['file_inviato']['tmp_name'];
$nome_file_vero = $_FILES['file_inviato']['name'];
$tipo_file = $_FILES['file_inviato']['type'];// leggo il contenuto del file
$dati_file = file_get_contents($nome_file_temporaneo);// preparo il contenuto del file per la query
$dati_file = addslashes($dati_file);// query per inserire il file nel DB
$query = "INSERT INTO tabella_files SET
nome_file = '$nome_file_vero',
tipo_file = '$tipo_file',
dati_file = '$dati_file'";mysql_query($query)
OR die('Query non valida: ' . mysql_error());// mostro nuovamente il form ed un messaggio di successo
mostra_form("Memorizzazione del file <b>$nome_file_vero</b> nel database eseguita correttamente.");
}
else
{
mostra_form();
}/**
- Mostra il form per l'upload del file
*/
function mostra_form($messaggio = '')
{
?><head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Carica file nel database</title>
</head><p><?php echo $messaggio?> <br /> Seleziona un file da memorizzare nel database: <p></p>
<form name="form1" enctype="multipart/form-data" method="post" action="">
<p>
<input type="file" name="file_inviato">
<p></p>
<p>
<input type="submit" name="invia" value="Invia file">
<p></p>
</form><?php
exit();
}
?>QUESTA LA PAGINA elenco.php dove sono elencati le immagini caricate nel database ...(e fino a qui funziona)
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Carica file nel database</title>
</head><p><b>Clicca su uno dei seguenti file</b><p><p></p>
<?php
// connessione e selezione del database
mysql_connect('localhost, 'user', 'passw')
or die('Connessione non riuscita: ' . mysql_error());if(!mysql_select_db('nome DB'))
die('Selezione database fallita!');// query per ottenere l'elenco dei files nel DB
$query = "SELECT * FROM tabella_files";$risultato = mysql_query($query)
or die('Query non valida: ' . mysql_error());// se ci sono files nel DB
if(mysql_numrows($risultato))
{
// estrazione dei risultati e stampa dei links ai files
while ($tmp = mysql_fetch_array($risultato))
{
echo "<p><a href="mostra.php?id=$tmp[id_file]">$tmp[nome_file]</a></p>\n";
}
}
else
{
echo '<p>Nessun file presente nel database</p>';
}
?>QUESTA LA PAGINA mostra.php, che quando clicco su una voce dell' elenco (elenco.php), dovrebbe visualizzarmi l' immagine!
<?php
// connessione e selezione del database
mysql_connect('localhost, 'user', 'passw')
or die('Connessione non riuscita: ' . mysql_error());
if(!mysql_select_db('nome DB'))
die('Selezione database fallita!');
// query per recuperare il file
$query = 'SELECT * FROM tabella_files WHERE id_file = '.$_GET['id'];
$risultato = mysql_query($query) or die('Query non valida: ' . mysql_error());
$tmp = mysql_fetch_array($risultato);
// invio una intestazione contenente il tipo MIME
header('Content-Type: '.$tmp['tipo_file']);
// invio il contenuto del file
echo $tmp['dati_file'];
?>Anzichè visualizzare l' immagine, visualizzo una serie di simboli con una stringa di errore:
Warning: Cannot modify header information - headers already sent by (output started at /home/mhd-eccetera eccetera/mostra.php on line 12
E la riga 12 sarebbe questa:
header('Content-Type: '.$tmp['tipo_file']);
Chi ha un pò di pazienza da potermi rispondere?
Perchè non funziona? Dove sbaglio?Grazie in anticipo e un saluto a tutti!
-
Ciao pablitosway,
l'errore viene dato poichè mandi un output prima della funzione header, controlla non vi siano caratteri come spazi all'inizio del file o echo.