Un Evento Unico. 5 Sale. 27 Interventi. SEO, SOCIAL, E-Commerce, Mobile, Turismo.
CLICCA QUI e SCOPRI DI PIù X Chiudi
 
Forum GT: Condividiamo idee e conoscenza Forum GT: Condividiamo idee e conoscenza


Condividi questo contenuto nei Social Network:
Ti stiamo aspettando: Registrati subito e gratis. Entra a far parte di una delle comunità più attive in Italia. Se hai dimenticato i tuoi dati li puoi recuperare subito.


Vai indietro   Forum per Webmaster: Condividiamo Idee e Conoscenza > Sviluppo e Gestione siti web > Php - Mysql > Scripting e Risorse utili
Benvenuto! Forum Regole FAQ Lista utenti Calendario Segna come letti


Rispondi
 
LinkBack Strumenti di discussione
Vecchio 03-11-08, 01:02   #1 (permalink)
User
 
Data di registrazione: Dec 2005
Messaggi: 48
[Tutorial] Come caricare un immagine su database mysql

Salve a tutti. Apro questa discussione perchè spero di trovare delle risposte chiare alle seguenti domande.
Vorrei caricare delle immagini su un database mysql attraverso un form. Mi spiego meglio, Voglio che gli utenti possano caricare dinamicamente sul sito delle immagini presenti sul proprio computer, attraverso un form con il campo carica file. Come succede nei social network.
Vi dò altre informazioni utili: Il linguaggio dinamico di programmazione è il Php, il database è il Mysql.
Qualcuno può aiutarmi, può spiegarmi in maniera semplice come posso fare. Aspeto risposte.
Cordiali saluti

Ultima modifica di pino80 : 03-11-08 01:04.
pino80 non in linea   Rispondi citando
Vecchio 03-11-08, 11:56   #2 (permalink)
Esperto
 
L'avatar di Sups
 
Data di registrazione: May 2007
Ubicazione: Pesaro
Messaggi: 568
Prima di tutto bisogna creare una tabella che permetta il salvataggio di file, lo facciamo utilizzando un campo di tipo BLOB.

Codice:
CREATE TABLE tabella_file
(
   id INT (10) NOT NULL auto_increment,
   nome VARCHAR (255) default NULL,
   tipo VARCHAR (128) default NULL,
   dati BLOB,
   PRIMARY KEY  (id)
)
Poi creiamo un file upload.htm dove mettere il form per l'upload.

Codice HTML:
<html>
<head> 
<meta  http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> 
<title>Carica file nel DB</title> 
</head>
<body>
<p>Seleziona un file da memorizzare nel database:</p> 
<form name="upload" enctype="multipart/form-data" method="post" action="write_db.php"> 
<p>
<input type="file" name="file_inviato"><br>
<input type="submit" name="invia" value="Invia file">
</p> 
</form>
</body>
</html>
Adesso creiamo una funzione per scrivere l'immagine caricata dal form sul database.
Per questo creiamo un file write_db.php

Codice PHP:
// Verifico eventuali problemi nell'upload del file
if((!isset($_FILES["file_inviato"])) || ($_FILES["file_inviato"]["error"] != UPLOAD_ERR_OK))
   echo 
"Errore nell'invio del file. Riprova!");

// Connessione e selezione del database
mysql_connect("localhost""root""password")
or die(
"Connessione non riuscita: " mysql_error());

if(!
mysql_select_db("mio_db"))
die(
"Selezione database fallita!");

// Recupero delle informazioni sul file inviato
$nome_file_temporaneo $_FILES["file_inviato"]["tmp_name"];
$nome_file_vero $_FILES["file_inviato"]["name"];
$tipo_file $_FILES["file_inviato"]["type"];

// Leggo il contenuto del file
$dati_file file_get_contents($nome_file_temporaneo);

// Preparo il contenuto del file per la query sql
$dati_file addslashes($dati_file);

// Query per inserire il file nel DB
$query "INSERT INTO tabella_file SET
              nome = '$nome_file_vero', 
              tipo = '$tipo_file', 
              dati = '$dati_file'"


mysql_query($query)
or die(
"Query non valida: " mysql_error());

// Messaggio di successo
echo "Memorizzazione del file <b>$nome_file_vero</b> nel database eseguita correttamente!"); 
Adesso il file è caricato all'interno del database sotto forma di stringa.
Per recuperare la stringa, creiamo un file di nome view.php che elenca tutti i file contenuti nella tabella.

Codice PHP:
// Connessione e selezione del database
mysql_connect("localhost""root""password")
or die(
"Connessione non riuscita: " mysql_error());

if(!
mysql_select_db("mio_db"))
die(
"Selezione database fallita!");

// Query per ottenere l'elenco dei files
$query "SELECT * FROM tabella_file";

$risultato mysql_query($query)
or die(
"Query non valida: " mysql_error());

// Se ci sono file nel DB
if(mysql_numrows($risultato))
{
    
// Estrazione dei risultati e stampa dei links
    
while ($tmp mysql_fetch_array($risultato))
    {
        echo 
"<p><a href=\"open.php?id=$tmp[id]\">$tmp[nome]</a></p>\n";
    }
}
else
{
    echo 
"<p>Nessun file presente nel database</p>";

Per visualizzare il contenuto del file, creiamo il file open.php

Codice PHP:
if($_GET['id'] == "")
    
header("Location: view.php");

// Connessione e selezione del database
mysql_connect("localhost""root""password")
or die(
"Connessione non riuscita: " mysql_error());

if(!
mysql_select_db("my_db"))
die(
"Selezione database fallita!");

// Query per recuperare il file
$query "SELECT * FROM tabella_files WHERE id_file = " $_GET["id"];
$risultato mysql_query($query)
or die(
"Query non valida: " mysql_error());
$tmp mysql_fetch_array($risultato);

// Invio l'intestazione contenente il tipo MIME del file
header("Content-Type: " $tmp["tipo"]);

// Invio il contenuto del file
echo $tmp["dati"]; 
In questo modo puoi salvare e recuperare file su di un database sql.

Ciao!
__________________
Now is the time for all good men to come to the aid of their country!
Sups non in linea   Rispondi citando
Vecchio 05-11-08, 07:59   #3 (permalink)
User
 
Data di registrazione: Sep 2008
Messaggi: 96


...ditemi se non è da linkare tra i threads utili...

...grande Sups!
ciccio6630 non in linea   Rispondi citando
Vecchio 09-11-08, 08:59   #4 (permalink)
User Newbie
 
Data di registrazione: Dec 2007
Messaggi: 6
Upload file e ridimensionamento automatico

errore scusate

Ultima modifica di Ninonino : 09-11-08 09:01. Motivo: ho risposto invece di fare un nuovo post...sorry
Ninonino non in linea   Rispondi citando
Vecchio 25-07-09, 19:19   #5 (permalink)
User Newbie
 
Data di registrazione: Jul 2009
Messaggi: 1
Ottima guida, complimenti!

Avrei però una domanda...avrei bisogno di inserire nel database oltre all'immagine una descrizione della stessa...è possibile farlo?

Altra domanda...

Come faccio a salvare anche l'immagine vera e propria? Io avrei bisogno di salvarla in una cartella del mio sito perchè poi devo andare a stamparle in una sorta di galleria...

Praticamente mi servirebbe che, tramite un ciclo, si potesse leggere il contenuto del database e poi scrivere l'immagine in una pagina...

C
ome posso fare?

Ultima modifica di Samyorn : 25-07-09 20:44. Motivo: Maiuscole.
ultimoprofeta non in linea   Rispondi citando
Vecchio 15-09-10, 12:50   #6 (permalink)
User Newbie
 
Data di registrazione: Aug 2010
Messaggi: 3
Ottimo tutorial, molto utile!
Ma se invece dei link testuali che aprono le immagini vorremmo far comparire delle miniature?
E' possibile?

Ultima modifica di lucabartoli : 16-09-10 21:17. Motivo: Maiuscole
trueweb non in linea   Rispondi citando
Vecchio 06-03-11, 18:50   #7 (permalink)
User
 
Data di registrazione: Jul 2009
Messaggi: 144
Ciao,
per studio ho modificato un po il codice inserendo nella tabella anche l'id di chi ha inserito l'immagine.
Ora il problema è : come faccio a far stampare solo la foto di quel determinato utente ?
infosicurezza non in linea   Rispondi citando
Vecchio 07-03-11, 00:46   #8 (permalink)
Esperto
 
L'avatar di Sups
 
Data di registrazione: May 2007
Ubicazione: Pesaro
Messaggi: 568
Non conosco come hai modificato la tabella, ma supponendo che hai inserito un'ipotetica colonna user tipo varchar puoi usare questa query:

SELECT * FROM tabella_file WHERE user = 'nomeutente';

di conseguenza:

SELECT * FROM tabella_files WHERE user = 'nomeutente' AND id_file = " . $_GET["id"];

Ciao!
__________________
Now is the time for all good men to come to the aid of their country!
Sups non in linea   Rispondi citando
Vecchio 07-03-11, 13:37   #9 (permalink)
User
 
Data di registrazione: Jul 2009
Messaggi: 144
Si Grazie mi ero confuso con le immagini
infosicurezza non in linea   Rispondi citando
Vecchio 20-04-11, 16:58   #10 (permalink)
User
 
Data di registrazione: Apr 2011
Ubicazione: Torino
Messaggi: 14
Ma io sono l'unico a cui non funziona questo script?
Bum Bum #11 non in linea   Rispondi citando
Vecchio 04-08-11, 10:51   #11 (permalink)
User Newbie
 
Data di registrazione: Aug 2011
Ubicazione: bologna
Messaggi: 1
Ciao Sups,

ho provato il tuo script e pare funzionare nella sua prima parte di inserimento e listing delle foto;

nella tabella sul DB tabella_file pare tutto ok.

ho un problema però il file open.php quando cerco di visualizzare la foto che ho precedentemente caricato:

mi restituisce il codice html:
Codice:
<img src="h**p://localhost/open.php?id=2" alt="h**p://localhost/open.php?id=2">
ma nn mi visualizza l'immagine, solo l'alt...

qualche idea?

Grazie mille, un salutone!
chaosgate non in linea   Rispondi citando
Vecchio 24-10-11, 16:28   #12 (permalink)
User
 
Data di registrazione: Jul 2009
Messaggi: 144
Ragazzi sapreste dirmi anche come ridimensionare le immagini che si trovano gia salvate sul database ?
infosicurezza non in linea   Rispondi citando
Vecchio 31-10-11, 22:09   #13 (permalink)
Consiglio Direttivo
 
L'avatar di Samyorn
 
Data di registrazione: Dec 2007
Ubicazione: Catania
Messaggi: 5,847
Invia un messaggio tramite ICQ a Samyorn Invia un messaggio tramite Skype a Samyorn
Recuperandoti l'immagine potresti provare ad utilizzare questo utilissimo script di Sovietiko.
__________________
Qui, Quo, Qua
Si parla poco di SMF? Sentiamo l'opinione di chi lo ha provato. Ti amo...brindiAMO?
Conosci GTLab? Devi scegliere un CMS per Forum e non sai quale? Guarda quì!!
Samyorn ora è in linea   Rispondi citando
Vecchio 09-04-12, 02:39   #14 (permalink)
User Newbie
 
Data di registrazione: Apr 2012
Ubicazione: barcellona(spagna)
Messaggi: 2
problema "echo"

buon giorno/sera, non capisco il motivo ma Dreamweaver mi evidenzia 2 problemi nella sintassi dei comandi "echo" nel file write_db.php.
ho solamente racchiuso il testo tra <?php e ?>..qualcuno potrebbe cortesemente aiutarmi?grazie
cristianDS non in linea   Rispondi citando
Vecchio 09-04-12, 03:00   #15 (permalink)
User Newbie
 
Data di registrazione: Apr 2012
Ubicazione: barcellona(spagna)
Messaggi: 2
risolto...
cristianDS non in linea   Rispondi citando
Rispondi


Strumenti di discussione

Regole di scrittura
Non puoi postare nuove discussioni
Non puoi rispondere alle discussioni
Non puoi allegare file
Non puoi editare i tuoi post

BB code is Attivo
smilies è Attivo
[IMG] il codice è Attivo
Il codice HTML è Disattivato
Trackbacks are Attivo
Pingbacks are Attivo
Refbacks are Disattivato
Vai al forum



Tutti gli orari sono GMT +3. Attualmente sono le 20:22.




Forum GT - © 2004-2009 GT idea S.r.l P.iva 02418200800 - Privacy/Disclaimer

SEO by vBSEO 3.2.0 ©2008, Crawlability, Inc.