Problema nel visualizzare l'img dal database mysql

emanuelevt

Utente Attivo
24 Giu 2009
298
0
0
Ciao a tutti; ho un problema riguardante la visualizzazione di file binari:

Riesco ad inserire correttamente l'img nel database, ma quando vado a visualizzare l'img al posto di essa vedo una serie di numeri e lettere(penso che si tratti del codice esadecimale che vada a costruire l'img) premetto che tutto questo è in locale con server win e php 4.0; il database utilizzato è mysql.

questo è il codice tramite il quale trasferisco l'img:

Codice:
<?php
include 'con.inc.php'
?>
<form action="<?php  echo $_SERVER['PHP_SELF']; ?>" method="post" enctype="multipart/form-data">
<input type="file"  name="upload" />
<input type="text"  name="desc" maxlength="255" />
<input type="submit" value="upload"/>
</form>
<!--Se il file viene realmente trasmesso 
<?php if(!is_uploaded_file($_FILES['upload']['tmp_name'])){
exit("non hai trasmesso il file");}
 
$uploadfile=$_FILES['upload']['tmp_name'];
$uploadname=$_FILES['upload']['name'];
$uploadtype=$_FILES['upload']['type'];
$uploaddesc=$_POST['desc'];
$tempfile=fopen($uploadfile,'rb');
$filedata=fread($tempfile, filesize($uploadfile));
$filedata=addslashes($filedata);
$sql="INSERT INTO IMG SET
FILENAME='$uploadname',
MIMETYPE='$uploadtype',
DESCRIPTION='$uploaddesc',
FILEDATA='$filedata'";
$ok=@mysql_query($sql);
if(!$ok){
exit('errore nella trasmissione del file: ' .  mysql_error());
}
?>

e questo è il codice tramite il quale vorrei visualizzare il file(ho messo un id a mano per facilitarmi il compito):
Codice:
<?php
 
include 'con.inc.php'
 
$id=13;
$sql="SELECT FILENAME,MIMETYPE,FILEDATA FROM IMG WHERE ID='$id'";
$result=@mysql_query($sql);
if(!$result){exit('database error');}
$file=mysql_fetch_array($result);
if(!$file){exit('il file non &egrave stato caricato nel database');}
$filename=$file['FILENAME'];
$mimetype=$file['MIMETYPE'];
$filedata = $file['FILEDATA'];
header("content-disposition: attachment; filename=$filename");
header("content-type: $mimetype");
header("content-length:".strlen($filedata));
echo $filedata;
?>

grazie in anticipo a chi vorrà rispondere
 
I tuoi script erano pieni di errori... li ho corretti così. Il primo:
PHP:
<?php
if(isset($_POST['submit']))
{
	require('con.inc.php');
	$allowed = array('gif', 'png', 'jpg', 'jpeg');

	$file = isset($_FILES['file']) ? $_FILES['file'] : false;
	$desc = isset($_POST['desc']) ? trim($_POST['desc']) : '';
	
	if(!$file)
		die('Non hai caricato nessun file.');
	if($desc == '')
		die('Non hai inserito nessuna descrizione.');
	
	$ext = explode('.', $file['name']);
	$ext = $ext[count($ext) - 1];

	if(!in_array($ext, $allowed))
		die("Estensione non valida! Quelle ammesse sono: <b>". implode(', ', $allowed) ."</b>.";

	if(!is_uploaded_file($file['tmp_name']))
		die("Impossibile caricare il file!");

	$contents = file_get_contents($file['tmp_name']);
	$contents = base64_encode($contents);
	
	$size = filesize($file['tmp_name']);
	
	$sql = "INSERT INTO img (FILENAME,MIMETYPE,DESCRIPTION,FILEDATA,FILESIZE) VALUES ";
	$sql .= "('{$file['name']}','{$file['type']}','{$desc}','{$contents}','{$size}')";
	$query = mysql_query($sql) or die("Impossibile eseguire la query: <b>". mysql_error() ."</b>");

	echo "Immagine caricata correttamente!";
	unlink($file['tmp_name']);
}
?>

<form name="upload" action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST" enctype="multipart/form-data">
	File: <input type="file" name="file" /> <br /> <br />
	Descrizione: <input type="text"  name="desc" maxlength="255" /> <br /> <br />
	<input type="submit" name="submit" value="Carica immagine" />
</form>
Il secondo:
PHP:
<?php
require('con.inc.php');
$id = 13;

$sql = "SELECT FILENAME,MIMETYPE,FILEDATA FROM IMG WHERE ID='{$id}'";
$result = mysql_query($sql) or die("Impossibile eseguire la query: <b>". mysql_error() ."</b>");

if(mysql_num_rows($result) == 0)
	die('Impossibile trovare il file nel database.');

$file = mysql_fetch_assoc($result);

header("Content-type: {$file['MIMETYPE']}");
header("Content-length: {$file['FILESIZE']}");

echo $filedata;
?>
Per fare in modo che funzionino devi aggiungere alla tabella un campo FILESIZE di tipo BIGINT(20). Fammi sapere! ;)
 

Discussioni simili