Memorizzare un'immagine in db mysql

  • Creatore Discussione Creatore Discussione vodka
  • Data di inizio Data di inizio

vodka

Utente Attivo
25 Giu 2010
128
0
0
Anche cercando su alcune guide non sono riuscito a capire come salavre un'immagine in un db, nn capisco il funzionamento del codice.
Vi posto ciò ke ho scritto:
PHP:
<html>
	<head>
		<title>Memorizzazione del file sul server</title>
	</head>
	<body>
	<H3>Informazioni sul file trasferito:</H3>
	<?php
		if ($_FILES['file_name']['error'] != UPLOAD_ERR_OK)
		{
			print("C'è stato un errore nel trasferimento<BR>\n");
		}
		else
		{
			copy($_FILES['file_name']['tmp_name'],".\\".$_FILES['file_name']['name']);
			unlink($_FILES['file_name']['tmp_name']);
			print("Nome del file temporaneo: " . $_FILES['file_name']['tmp_name'] ."<BR>\n");
			print("Nome del file trasferito: " . $_FILES['file_name']['name'] . "<BR>\n");
			print("Dimensione: " . $_FILES['file_name']['size'] . "<BR>\n");
			print("Tipo: " . $_FILES['file_name']['type'] . "<BR>\n");
			print("</hr>\n");
		}
		$host='127.0.0.1';
		$user='mionome';
		$password='miapassword';
		$database='iscrizione_utente';
		$db=mysql_connect($host, $user, $password) or die ("Impossibile connettiersi al server $host!");
		mysql_select_db($database, $db) or die ("Impossibile connettersi al database $database!");

		$stringa_c=
		"CREATE TABLE IF NOT EXISTS foto (
			id_foto int(10) NOT NULL auto_increment,
			nome varchar(20) not null, size varchar(30) not null, type varchar(20) not null, immagine varchar(20) not null, PRIMARY KEY (`id_foto`))";
			
		var_dump($stringa_c);
		mysql_query($stringa_c) or die (mysql_error());  


		@include 'upload.php';
		if (isset($_FILES['file']))
		{
		  upload();
		}
		echo "
		<h3>Upload</h3>
		<form enctype=\"multipart/form-data\" 
		action=\"".$_SERVER['PHP_SELF']."\" method=\"post\">
		<input type=\"hidden\" name=\"MAX_FILE_SIZE\" 
		value=\"300000\" />
		<input type=\"file\" name=\"file\" size=\"40\" />
		<input type=\"submit\" value=\"Invia\" />
		</form>
		<br /><a href=\"link.php\">Elenco</a>";
ovviamente nel form precedente aggiungo il film in questo modo:

PHP:
<FORM enctype="multipart/form-data" ACTION="memorizzazione.php" method="post">
		<INPUT TYPE="hidden" NAME="MAX_FILE_SIZE" value="1024000">
		<input name="file_name" type="file" id="foto">
		<INPUT TYPE="submit" value="Inserisci foto">
</FORM>

il contenuto della funzione upload è questo:
PHP:
<?php
		function upload()
		{
		  $result = false;
		  $immagine = '';
		  $size = 0;
		  $type = '';
		  $nome = '';
		  $max_size = 300000;
		  $result = @is_uploaded_file($_FILES['file']['tmp_name']);
		  if (!$result)
		  {
			echo "Impossibile eseguire l'upload.";
			return false;
		  }else{
			$size = $_FILES['file']['size'];
			if ($size > $max_size)
			{
			  echo "Il file è troppo grande.";
			  return false;
			}
			$type = $_FILES['file']['type'];
			$nome = $_FILES['file']['name'];
			$immagine = @file_get_contents($_FILES['file']['tmp_name']);
			$immagine = addslashes ($immagine);
			@include 'config.php';
			$sql = "INSERT INTO foto (nome, size, type, immagine) VALUES ('$nome','$size','$type','$immagine')";
			$result = @mysql_query ($sql) or die (mysql_error());
			return true;
		  }
		}
?>

L'errore che mi restituisce è impossibile eseguire l'upload
Non sò proprio dove rimediare ho fatto un pò di confusione .
 
togli tutte quelle @, altrimenti non riesci a vedere gli errori
 
anche togliendo tutte le @ nn mi dà nessun errore, e non mi carica l'immagine sul db.
Non ho idea di come fare
 
proprio non riesco a capire come fare x carica l'immagine sul db..potete aiutarmi?
 
Prova a modificare queste righe:
PHP:
echo "Impossibile eseguire l'upload."; 
return false;
Così:
PHP:
var_dump($_FILES['file']['error']);
echo "Impossibile eseguire l'upload."; 
return false;
In modo da vedere quale errore restituisce.
 
ok ho risolto l'inserimento dell'immagine nel db.
ora non riesco ad estrarre il record cioè non riesco a mostrare l'immagine
ho provato così:
PHP:
@include 'config.php';
				$sql = "SELECT id_foto, nome FROM foto ORDER BY id_foto DESC";
				$result = mysql_query($sql) or die (mysql_error ());
				while ($row = mysql_fetch_array($result))
				{
				  $id = $row['id_foto'];
				  $nome = $row['nome'];
				  echo "<a href=\"show.php?id=".$id."\">".$nome."</a><br />";
				}

				if (isset($_GET['id_foto']))
				{
				  $id = intval($_GET['id_foto']);
				  $sql = "SELECT id_foto,type,immagine FROM foto WHERE id_foto='$id'";
				  $result = mysql_query($sql) or die(mysql_error ());
				  $row = mysql_fetch_array($result);
				  $id_img = $row['id_foto'];
				  $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.";
				}
mi dà i link con il nome delle immagini archiviate in db ma mi restituisce impossibile soddisfare la richiesta cioè di mostrarmi l'immagine
 
Nel tuo script c'è un problema di fondo: gli header devono essere inviati prima di qualunque altra informazione, e tutta la pagina deve essere nello stesso formato. Non puoi inviare un header che specifica che il tipo del documento è un'immagine e poi visualizzare codice HTML, o viceversa. Per risolvere ti consiglio di creare un'altra pagina, chiamata, ad esempio, image.php, con questo contenuto:
PHP:
<?php
require 'config.php';

$id = isset($_GET['id_foto']) ? intval($_GET['id_foto']) : 0;

$sql = "SELECT id_foto,type,immagine FROM foto WHERE id_foto = {$id}";
$result = mysql_query($sql) or die(mysql_error());

if(mysql_num_rows($result) == 0)
{
	header('HTTP/1.1 404 Not Found');
	exit();
}

$row = mysql_fetch_array($result);

header("Content-type: {$row['type']}");
echo $row['immagine'];
?>
E poi modifichi il file che hai postato così:
PHP:
<?php
require 'config.php';

$sql = 'SELECT id_foto, nome FROM foto ORDER BY id_foto DESC';
$result = mysql_query($sql) or die (mysql_error());

while($row = mysql_fetch_array($result))
{
	$id = $row['id_foto'];
	$nome = $row['nome'];
	echo "<a href=\"show.php?id={$id}\">{$nome}</a><br />";
}

if(isset($_GET['id_foto']))
	echo "<img src=\"image.php?id_foto={$_GET['id_foto']}\" />";
else
	echo "Impossibile soddisfare la richiesta.";
?>
Vedi se in questo modo funziona.
 
ho rifatto come avevo impostato io e ho spostato la seconda parte dello script in image.php, e modificato $_GET['id_foto'] con $_GET['id'] così non mi restituisce più errore però mi dà il quadratino con la x senza visualizzarmi la foto.
 
Non ti restituisce l'errore Pagina non trovata perché ho scelto io di visualizzarlo se l'immagine non veniva trovata. Se avessi tolto la condizione lo script si sarebbe comportato esattamente come fa il tuo. Quindi riprendi il mio script, individua questa riga:
PHP:
$sql = "SELECT id_foto,type,immagine FROM foto WHERE id_foto = {$id}";
E aggiungi sotto:
PHP:
var_dump($sql);
Poi accedi direttamente alla pagina (http://www.tuosito.com/image.php?id_foto=1) e vedi che cosa ti restituisce.
 
questo è ciò che mi restituisce:
string(56) "SELECT id_foto,type,immagine FROM foto WHERE id_foto = 0"
 
ok ora ho risolto non mi dà errore ma mi esce sempre il quadratino con la x rossa ke nn visualizza l'immagine
 
PHP:
$ricevuta = mysql_query("SELECT * FROM datiutente ORDER BY id");

				$numero_record = mysql_num_rows($ricevuta);
				mysql_data_seek($ricevuta, $numero_record - 1);
				 
				$row = mysql_fetch_assoc($ricevuta);
				echo 'Nome: ', $row['nome'], "\n";
				echo 'Cognome: ', $row['cognome'], "\n";
				echo 'Matricola: ', $row['matricola'], "\n";
				echo 'Anno: ', $row['data_iscr'], "<BR>\n";

				
				$ricevuta = mysql_query("SELECT * FROM foto ORDER BY id");

				$numero_record = @mysql_num_rows($ricevuta);
				@mysql_data_seek($ricevuta, $numero_record - 1);
				 
				$row = @mysql_fetch_assoc($ricevuta);
				echo 'La tua foto: ', '<img src="'.$row['immagine'].'"/ height="300" weidth="100 alt="immagine"">';

Ti spiego cosa ho modificato, l'immagine viene salvata con il persocorso nel db e non più in blob così attraverso questo codice io estraggo l'ultima immagine inserita (ke è quella ke mi interessa) e gli ultimi dati inseriti (nome, cognome, matricola, dataiscr).
Il problema resta ke l'immagine non viene visualizzata e compare un riquadro con una crocetta rossa.
Ho provato ad ingrandire l'altezza e la larghezza con le proprietà width e height ma nn è qullo il problema.
 
nnt da fare, questi sono gli errori che mi mostra:
Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in E:\Program Files\EasyPHP-5.3.2i\www\visualizzadati.php on line 33

Warning: mysql_data_seek() expects parameter 1 to be resource, boolean given in E:\Program Files\EasyPHP-5.3.2i\www\visualizzadati.php on line 34

Warning: mysql_fetch_assoc() expects parameter 1 to be resource, boolean given in E:\Program Files\EasyPHP-5.3.2i\www\visualizzadati.php on line 36

e sotto mi esce il riquadro con la x rossa
 
ciao, non ho seguito molto la discussione, ma mi sembra che la seconda query sia errata

$ricevuta = mysql_query("SELECT * FROM foto ORDER BY id");
non dovrebbe essere
$ricevuta = mysql_query("SELECT * FROM foto ORDER BY id_foto");

qundo crei la tabella foto se non ho visto male l'id lo chiami in_foto
 
a già hai ragione... sono scomparsi gli errori ma l'immagine continua a non uscire...
 
ciao
verifica che non sia un problema di percorsi
prova a mettere un var_dump e guarda cosa ti restituisce
PHP:
//....
$row = mysql_fetch_assoc($ricevuta);
//poi il var_dump lo togli
var_dump($row['immagine']);
echo 'La tua foto: ', '<img src="'.$row['immagine'].'"/ height="300" weidth="100 alt="immagine"">'; 
//....

p.s.
soprattutto quando fai le prove togli i silent, altrimenti non vedi gli errori
 

Discussioni simili