View Full Version : [MySql]Estrarre immagini da un database
Ciao a tutti ho bisogno nuovamente del vostro aiuto... :)
Come si fa ad estrarre da un database un immagine precedentemente memorizzata visualizzando proprio l'immagine e non il suo codice....
io ho fatto una roba del genere:
$sql = "SELECT id,type,immagine FROM immagini WHERE id='$id'";
$result = @mysql_query($sql) or die(mysql_error ());
$row = @mysql_fetch_array($result);
$id_img = $row['id'];
$type = $row['type'];
$img = $row['immagine'];
if (!$id_img)
{
echo "Id sconosciuto";
}else{
@header ("Content-type: ".$type);
echo $img;
}
}else{
echo "Impossibile soddisfare la richiesta.";
}
ma mi visualizza roba del tipo @#!1Aw# ecc ecc :muro:
Grazie!
cambia questo
echo $img;
in questo
echo "<img src=\"'.$img.'\"/>;
Grazie per avermi risposto!
Se sicuro di aver scritto bene?perchè mi da un errore di sintassi...
Comunque continua a darmi sempre il binario.... :muro:
ma perché metti anche il mime type? prova a toglierlo
cmq si..mancavano gli apici alla fine..così è corretto:
echo "<img src=\"'.$img.'\"/>";
Cioè tu dici di togliere la riga $type = $row['type']; ?
La riga @header ("Content-type: ".$type); la lascio così?
Grazie per l'aiuto comunque!
nel campo immagine c'è il binario dell'immagine?
se si fai così:
// Content type
header('Content-type: image/jpeg');
// Resample
$image_p = imagecreatetruecolor($width, $height);
//create
$image= imagecreatefromstring($data);
imagecopyresampled($image_p, $image, 0, 0, 0, 0, $width, $height, $width, $height);
imagejpeg($image_p);
imagedestroy($image_p);
l'ho scopiazzato a pezzi non ne garantisco il funzionamento
ciao
forse è più attendibile questo esempio:
http://it.php.net/manual/it/function.imagecreatefromstring.php
Niente da fare...il punto è che non riesco proprio a capire dove sbaglio....
Niente da fare...il punto è che non riesco proprio a capire dove sbaglio....
scrivi cosa stai facendo ora...
guarda ho provato un po in tutti i modi ma continuo a visualizzare sempe e solo il binario.
Se chiamo la funzione imagecreatefromstring mi da errore...forse sbaglio a estrarre la stringa da passargli come argomento ma nel mio codice se non sbaglio dovrebbe essere $img = $row['immagine'];
domanda banale...ma dello script che crea l'immagine come lo invochi?
perchè se il tuo script che fa il comando header ecc lo devi richiamare così
<img src=tuoscript.php>
guarda qua:
<?php
$db=mysql_connect("localhost","root","") or die ("Impossibile collegarsi al database");
mysql_select_db("foto",$db) or die ("Impossibile collegarsi al database utentisito");
if (isset($_GET['id']))
{
$id = @intval($_GET['id']);
@include 'config.php';
$query="SELECT id,type,immagine FROM immagini WHERE id='$id'";
$result=mysql_query($query) or die ("no file");
while($row=mysql_fetch_array($result))
{
?>
<br><p> <img src="downloadfile1.php?id=<?php echo $row["id"]; ?>" ></p>
facendo così mi viene fuori la classica X di esplorer che non riesce a bisualizzare l'immagine,è un passo avanti?almeno non mi esce il binario....
si un passo in avanti...ora resta da capire come mai non si genera un immagine corretta nel file php
Tu hai idea di cosa si può fare? :mc:
Ho fatto dei passi avanti per risolvere il problema...
ho notato che se il codice php è inserito nei tag body di una pagina html il risultato è il binario dell'immagine e non l'immagine vera.
Se creo una pagina con solo codice php funziona benissimo e visualizzo l'immagine.
Ora ho pensato,ditemi se sbaglio, che l'header che se crea per visualizzare l'immagine non va "d'accordo" con l'header della pagina html.
Secondo voi è possibile che accada ciò?
si assolutamente per fare quello che vuoi nel php che crea l'immagine non deve comparire nessun tag html.
Quindi se io voglio visualizzare un'immagine del database in una pagina web non posso farlo?
Innanzitutto non è quando viene richiesta la pagina web che devi mandare in output l'immagine. Quando viene richiesta la pagina web dovrai mandare in output il tag <img> il cui attributo 'src' punta ad un altro script che dovrà essere quello a mandare in output i dati binari della immagine.
Quindi, ricapitolando, dovrai mandare in output una cosa del tipo:
<img src="immagine.php?id=......" width="blabla" height="blabla">
Nello script immagine.php dovrai ricevere l'ID passato, fare la query sul db e mandare in output i dati binari della immagine.
Ricordati solo di inviare l'header Content-Type corretto (a seconda del tipo di immagine) prima di mandare l'immagine. E sopratutto non mandare null'altro (che so ... spazi o roba del genere).
ok grazie ora provo.
volevo chiedervi un'altra cosa:
ho memorizzato in un campo del database l'url di immagine,come faccio a visualizzare l'immagine?
nel campo text l'url è in forma C:www img322.gif è corretta?
grazie
ok qualche passo avanti l'ho fatto.
Ora ho questo codice:
<?php
if(!isset($_GET)) $_GET = $HTTP_GET_VARS;
if($_GET["action"] && $_GET["Id"] && is_numeric($_GET["Id"])) {
// CONNESSIONE AL MYSQL
$db=mysql_connect("localhost","root","") or die ("Impossibile collegarsi al database");
@mysql_select_db("filebinari",$db) or die ("Impossibile collegarsi al database utentisito");
switch($_GET["action"]) {
// VISUALIZZAZIONE
case "view" :
$query = "SELECT DatiBinari, Type FROM file_binari WHERE Id = '" . $_GET["Id"] . "'";
$select = @mysql_query($query) or die("Query fallita !");
$result = @mysql_fetch_array($select);
$data = $result["DatiBinari"];
$type = $result["Type"];
Header("Content-type: $type");
echo $data;
break;
// DOWNLOAD
case "download" :
$query = "SELECT DatiBinari, Nome, Type FROM file_binari WHERE Id = '" . $_GET["Id"] . "'";
$select = @mysql_query($query) or die("Query fallita !");
$result = @mysql_fetch_array($select);
$data = $result["DatiBinari"];
$name = $result["Nome"];
$type = $result["Type"];
// SE IL BROWSER È INTERNET EXPLORER
if(ereg("MSIE ([0-9].[0-9]{1,2})", $_SERVER["HTTP_USER_AGENT"])) {
header("Content-Type: application/octetstream");
header("Content-Disposition: inline; filename=$name");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Pragma: public");
} else {
header("Content-Type: application/octet-stream");
header("Content-Disposition: attachment; filename=$name");
header("Expires: 0");
header("Pragma: no-cache");
}
echo $data;
break;
default :
// DEFAULT CASE, NESSUNA AZIONE
break;
} // endswitch
// CHIUDIAMO LA CONNESSIONE
@mysql_close();
} //endif
?>
se voglio visualizzare l'immagine in una pagina web devo fare una roba del tipo:
<body>
<img src="immagine.php?id=".$data />
</body>
Ma come mando la variabile da actions alla pagina web?
se voglio visualizzare l'immagine in una pagina web devo fare una roba del tipo:
<body>
<img src="immagine.php?id=".$data />
</body>
Ma come mando la variabile da actions alla pagina web?Beh, se la richiesta della immagine è fatta da un tag <img>, è per visualizzarla, quindi:
<img src="immagine.php?id=<?php echo $data; ?>&action=view" />
o se preferisci mandarla tutta con un echo da PHP:
echo "<img src=\"immagine.php?id=$data&action=view\" />";
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.