- Home
- Categorie
- Coding e Sistemistica
- MYSQL e altri Database
- [Tutorial] Come caricare un immagine su database mysql
-
[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
-
Prima di tutto bisogna creare una tabella che permetta il salvataggio di file, lo facciamo utilizzando un campo di tipo BLOB.
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. [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> [/html]Adesso creiamo una funzione per scrivere l'immagine caricata dal form sul database. Per questo creiamo un file **write_db.php** [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!"); [/php]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. [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>"; } [/php]Per visualizzare il contenuto del file, creiamo il file **open.php** [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"]; [/php]In questo modo puoi salvare e recuperare file su di un database sql. Ciao!
-
...ditemi se non è da linkare tra i threads ****utili...
...grande Sups!
-
errore scusate
-
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...
Come posso fare?
-
Ottimo tutorial, molto utile!
Ma se invece dei link testuali che aprono le immagini vorremmo far comparire delle miniature?
E' possibile?
-
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 ?
-
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!
-
Si Grazie mi ero confuso con le immagini
-
Ma io sono l'unico a cui non funziona questo script?
-
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:
<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!
-
Ragazzi sapreste dirmi anche come ridimensionare le immagini che si trovano gia salvate sul database ?
-
Recuperandoti l'immagine potresti provare ad utilizzare questo utilissimo script di Sovietiko.
-
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:)
-
risolto...
-
Salve a tutti, m'intrufolo nella discussione, anche se è un po' vecchiota. Ma spero in un anima pia che mi possa aiutare. Il punto è questo. Dovrei costruire un form che mi permetta di caricare le immagini e creare un album con la possibilità di dargli un nome e senza limiti di dimensioni, . Dopo di che, tale immagine si dovrebbe memorizzare in un db (ovviamente so che non conviene memorizzare l'immagine intera, ma solo il link). Poi, una volta fatto ciò, dovrebbe comparire come fa fb ossia nelle thumberlin (mi sembra che si chiamino). Mi potete dare una mano per favore ???? Non so da che parte iniziare e non ho nessun codice da poter postare. perchè sono tutti sballati. E non fannno quello che vorrei che facessero. Grazie. Ah un ultima cosa, possibilmete avere la possibilità di selezionare le immagini più di una alla volta. Considerate anche che alcune immagini, provengono dallo scanner e con le estensioni più diffuse e utilizzate. Grazie so di chiedere la luna, ma spero in un vostro aiuto.
-
Salve,
ho eseguito il tutorial con le opportune modifiche alla password e al nome del db utilizzato ma ho evidenziato errori alle righe 4 e 34 per l'inserimento di una ")" prima di ;
Lo script funziona ma write_db non salva l'immagine nella root e nemmeno il suo percorso nel campo "dati" del db mentre tutti gli altri dati vengono inseriti.
-
@antoniog2 said:
Salve,
ho eseguito il tutorial con le opportune modifiche alla password e al nome del db utilizzato ma ho evidenziato errori alle righe 4 e 34 per l'inserimento di una ")" prima di ;
Lo script funziona ma write_db non salva l'immagine nella root e nemmeno il suo percorso nel campo "dati" del db mentre tutti gli altri dati vengono inseriti.Ciao antoniog2,
Eri rivolto a me ??? Nella risposta ???? Se si, a me funziona perfettamente. Ma se vuoi ti mandao il tutto ricorretto. Ah una cosa, hai skype per caso ??? Fammi sapere ok ??? Al limite il mio contatto skype è il seguente: mousesenzapalle2007 (valido anche per chi mi volesse aiutare), grazie.
-
salve
sul file open.php mi dice: Query non valida: Table 'my_db.tabella_files' doesn't exist ...perche'? quale potrebbe essere l'errore
-
Si intendevo rispondere a te paperinik4.