PDA

View Full Version : [MySql]Estrarre immagini da un database


scrat84
12-02-2007, 17:23
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!

loris_p
12-02-2007, 17:33
cambia questo
echo $img;
in questo
echo "<img src=\"'.$img.'\"/>;

scrat84
12-02-2007, 19:28
Grazie per avermi risposto!

Se sicuro di aver scritto bene?perchè mi da un errore di sintassi...

scrat84
12-02-2007, 19:30
Comunque continua a darmi sempre il binario.... :muro:

loris_p
12-02-2007, 19:40
ma perché metti anche il mime type? prova a toglierlo
cmq si..mancavano gli apici alla fine..così è corretto:
echo "<img src=\"'.$img.'\"/>";

scrat84
12-02-2007, 19:54
Cioè tu dici di togliere la riga $type = $row['type']; ?

La riga @header ("Content-type: ".$type); la lascio così?

Grazie per l'aiuto comunque!

vizzz
12-02-2007, 20:00
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

vizzz
12-02-2007, 20:04
forse è più attendibile questo esempio:
http://it.php.net/manual/it/function.imagecreatefromstring.php

scrat84
12-02-2007, 21:02
Niente da fare...il punto è che non riesco proprio a capire dove sbaglio....

vizzz
12-02-2007, 21:17
Niente da fare...il punto è che non riesco proprio a capire dove sbaglio....
scrivi cosa stai facendo ora...

scrat84
12-02-2007, 21:33
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'];

vizzz
12-02-2007, 21:41
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>

scrat84
12-02-2007, 22:03
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....

vizzz
12-02-2007, 22:19
si un passo in avanti...ora resta da capire come mai non si genera un immagine corretta nel file php

scrat84
13-02-2007, 13:04
Tu hai idea di cosa si può fare? :mc:

scrat84
13-02-2007, 21:47
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ò?

vizzz
13-02-2007, 22:05
si assolutamente per fare quello che vuoi nel php che crea l'immagine non deve comparire nessun tag html.

scrat84
15-02-2007, 19:29
Quindi se io voglio visualizzare un'immagine del database in una pagina web non posso farlo?

andbin
15-02-2007, 19:57
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).

scrat84
15-02-2007, 20:53
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

scrat84
18-02-2007, 10:39
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?

andbin
18-02-2007, 14:28
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\" />";