- Home
- Categorie
- Coding e Sistemistica
- MYSQL e altri Database
- Memorizzare immagini in db mysql
-
Memorizzare immagini in db mysql
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'] . "<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>";[/PHP]
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>[/PHP]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'];
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;
}
}
?>[/PHP]L'errore che mi restituisce è impossibile eseguire l'upload
Non sò proprio dove rimediare ho fatto un pò di confusione .
-
Io non hai mai usato la funzione copy e non ho mai avuto problemi :
[PHP]//imposta il nome della directory di destinazione
$cartella_upload = "./uploads/";
//copia il file caricato nella directory
move_uploaded_file($_FILES['data']['tmp_name'],$cartella_upload . $_FILES['data']['name'])
or die('Non posso caricare il file');
// visualizza il messaggio di successo
echo "file caricato con successo";
}
[/PHP]
-
Non ho capito sinceramente dove devo posizionare il codice ke mi hai postato ma mettendolo alla fine non carica l'immagine
-
Io partirei da zero.
Controlla i valori di $_FILES e $_FILES['type'] se si sta caricando qualcosa di valido. Poi sfrutta le chiavi di $_FILES per creare il record sul database. Pensa però a tutte le problematiche che si possono presentare quando si carica un file da un modulo, ad esempio le dimensioni eccessive o files con lo stesso nome che si sovrascrivono.
-
io ho creato la tabella con i vari campi, ma ora il problema sarebbe inserire l'immagine nella tabella, e nn riesco a farlo
-
proprio non riesco a trovare la soluzione x carica l'immagine sul db...potete aiutarmi?
-
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."; }
[/PHP]
mi dà i link con il nome delle immagini archiviate in db ma mi restituisce impossibile soddisfare la richiesta cioè di mostrarmi l'immagine
-
[PHP]echo "<a href="show.php?id=".$id."">".$nome."</a><br />";[/PHP]
Qui passi all'URL il parametro id.
[PHP]if (isset($_GET['id_foto']))[/PHP]
Qui cerchi il parametro id_foto. :bho:
-
ho cpt quindi ho sostituito id_foto con 'id' e non mi dà più errore ma nn mi visualizza la foto esce il quadratino con la x.
-
Prova a fare tasto destro e vedere l'url dell'immagine, può essere che tu stia cercando di raggiungere l'immagine attraverso un path assoluto anziché relativo, in quel caso potresti eliminare la parte che non serve con un substr($url, $root); dove $url sta per il path assoluto dell'immagine e $root il path assoluto in cui si trova lo script (a condizione che l'immagine sia nella cartella dello script o in una sottocartella, ma non in una cartella diversa)
Anche se però aggiungerei che non mi convince l'ultimo script che hai postato, in cui fai un while aggiungendo dei link <a> e poi mandi l'header... L'header deve essere mandato prima di qualsiasi contenuto!