Memorizzare immagine, e file, in mysql. by: Sevenjeak

« Older   Newer »
  Share  
sevenjeak
view post Posted on 22/12/2011, 22:01     +1   -1




Già da tempo, che volevo scrivere questo tutorial, che tratta di: come memorizzare le immagini in un database mysql

Per memorizzare l'immagine nel database non intendo effettuare l'upload di un'immagine in una cartella con i vari dati nel database, ma un'immagine, ovvero il suo codice binario, che rigenererà in la la stessa immagine nel database tramite un campo di tipo blob ( utilizzato per memorizzare codice binario ), iniziamo.

Per prima cosa creiamo la tabella per memorizzare i dati dell'immagine oltre al suo codice binario, tramite questa query:

CODICE
CREATE TABLE bin_img (
  id INTEGER AUTO_INCREMENT,
  nome LONGTEXT,
  tipo LONGTEXT,
  code_img BLOB,
  PRIMARY KEY(id)
)


Spero di non aver fatto errori di sintassi nella query... xD

Nel proseguimento del tutorial ho commentato direttamente gli script, cose da farli essere più chiare ed evitare lunghe spiegazioni in questo post.

Ora passiamo al file di configurazione della connessione, e non solo, creiamo il file config.php, con questo codice all'interno:

CODICE
<?php
error_reporting(0); // Commentate la linea se lo script ha qualchosa che non va, la linea qui sopra impedisce al php di stampare a video gli errore, se ci ne sono, cosa che faccio con il mysql_error(), in questo script

$db_host = "<db_host>";
$db_user = "<db_user>";
$db_pass = "<db_pass>";
$db_name = "<db_name>";

$conn = mysql_connect($db_host, $db_user, $db_pass)or die("Errore di connessione mysql.<p />" . mysql_error());
mysql_select_db($db_name)or die("Errore di selezione del database.<p />" . mysql_error());
?>


Ovviamente modificate i dati con i vostri dati di connessione.

Fatto questo passiamo direttamente alla nostra index.php, contenente il form per inserire l'immagine nel database, e ovviamente incluso il file di configurazione ( ho usato un po di css3 nelle varie pagine dello script ) :

CODICE
<?php
include("config.php");

if (isset($_GET["send"])) {
  // Se è stato selezionato un file
  if (isset($_FILES["binary_file"]))  {
     // Se non c'è nessun altro errore
     if ($_FILES["binary_file"]["error"] > 0) {
        echo $_FILES["binary_file"]["error"];
         }else {
             // Leggo il contenuto del file.
            $r = addslashes(file_get_contents($_FILES["binary_file"]["tmp_name"]));
         
            // Inserimento file binario nel database
            $name = $_FILES["binary_file"]["name"];
            $type = $_FILES["binary_file"]["type"];
         
            $query = "INSERT INTO bin_img (nome, tipo, code_img) VALUES ('$name', '$type', '$r')";
               
            // Verifica se la query è andada a buon fine.
            if (mysql_query($query)) {
               echo "File inviato correttamente.<p /><a href=\"ls_img.php\">Visualizza immagini caricate</a>";
            }else {
               echo "Error.<p />" . mysql_error();
            }
         
            // Abbiamo finito, chiudiamo la connessione.
            mysql_close($conn);
          }
  }else {
     echo "Nessun file selezionato.";
  }
}
?>
<style type="text/css">
  form {
     margin:20em auto;
         width:700px;
         text-align:center;
         border:solid #969696 1px;
         border-radius:15px;
         -moz-border-radius:15px;
         -webkit-border-radius:15px;
  }
 
  form h1 {
     margin-top:0px;
         padding-bottom:5px;
         background:#d6d6d6;
         -webkit-border-top-left-radius: 15px;
         -webkit-border-top-right-radius: 15px;
         -moz-border-radius-topleft: 15px;
         -moz-border-radius-topright: 15px;
         border-top-left-radius: 15px;
  }
 
  form input[type=submit] {
      padding:4px 15px;
      background:#f1f1f1;
      border:solid #969696 1px;
          border-radius:15px;
          -moz-border-radius:15px;
          -webkit-border-radius:15px;
          cursor:pointer;
  }

  form input[type=submit]:hover{
      background:#d6d6d6;
  }
</style>
<form action="?send" method="post" enctype="multipart/form-data">
<h1>Seleziona il file</h1>
<input type="file" name="binary_file" />
<p />
<input type="submit" value="Invia file" />
</form>
<div style="margin-top:10em">
  Developed by <a href="sevenjeak@altervista.org">Sevenjeak</a>
</div>


Caricato il file nel database abbiamo la necessità di visualizzarlo, per questo ho creato due altri script, la pagine ls_img.php, visualizzabile tutte l'immagine contenenti nel db:

CODICE
<style type="text/css">
  div#gall {
     margin:0 auto;
         width:1200px;
         padding-bottom:7px;
     text-align:center;
         border:solid #969696 1px;
         border-radius:15px;
         -moz-border-radius:15px;
         -webkit-border-radius:15px;
  }
 
  h1 {
     margin-top:0px;
         padding-bottom:5px;
         background:#d6d6d6;
         -webkit-border-top-left-radius: 15px;
         -webkit-border-top-right-radius: 15px;
         -moz-border-radius-topleft: 15px;
         -moz-border-radius-topright: 15px;
         border-top-left-radius: 15px;
  }
 
  img {
     border:solid #fff 3px;
         border-radius:10px;
         -moz-border-radius:15px;
         -webkit-border-radius:15px;
  }
  img:hover {
     border:solid #ffd500 3px;
  }
</style>
<?php
include("config.php");

// Query di selezione ( senza filtro WHERE ), tutti i record
$query = mysql_query("SELECT * FROM bin_img");

echo "<div id=\"gall\">";
echo "<h1>Lista immagini caricate</h1>";
// Ciclo while di lettura dei risultati
while ($rs = mysql_fetch_array($query))
{
  echo "<a href=\"view_img.php?id= " . $rs["id"] . "\" target=\"_Blank\"><img src=\"view_img.php?id= " . $rs["id"] . "\" alt=\"" . $rs["nome"] . "\" height=\"90\" width=\"90\"/></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;";
}
echo "</div>";

// Chiusura della connessione
mysql_close($conn);
?>
<div style="margin-top:10em">
  Developed by <a href="sevenjeak@altervista.org">Sevenjeak</a>
</div>


Ed infine il file view_img.php, che genera l'immagine recuperata del db:

CODICE
<?php
include("config.php");

// Query di selezione del record con campo id ugguale a $_GET["id"]
$query = mysql_query("SELECT * FROM bin_img WHERE id = " . $_GET["id"])or die("Errore quqry.<p />" . mysql_error());

// Preparazione array dei risultati
$rs = mysql_fetch_array($query)or die("Errore preparazione risultati.<p />" . mysql_error());

// Produco l'header che mi porterà alla visualizzazione finale dell'immagine
header("Content-type: " . $rs["tipo"]);

// Stampo l'immagine finale.
echo $rs["code_img"];

// Chiusura connessione.
mysql_close($conn);
?>


Lo script è finito, noterete che nella index non ho inserito il controllo che verifica se si sta caricando effettivamente un'immagine, questo perché, modificando alcuni pezzi dello script, purtroppo non so come, potrete inviare e far scaricare anche dei file caricati nel db.

Lo script lo testato solamente in locale, visto che non potevo altrove, ma dovrebbe funzionare, nel caso fate come commentato alla prima linea del primo file ( il file di configurazione )

Qui sotto allego lo script complet:

Download attachment
blob_img.zip ( Number of downloads: 100 )

 
Top
max_400
view post Posted on 22/12/2011, 23:15     +1   -1




ottimo lavoro sevenjeak io per ora mi sto occupando di javascript nell'altro forum
appena ho tempo ci dò un'occhiata.
Già in passato avevo fatto qualcoda di questo tipo (solo per le immagini)
grazie ad una guida di mrWebmaster.

Anzi quando hai tempo vienimi a trovare dall'altra parte
mi sto facendo un sacco di risate col gatto (borgo italia)

ecco il link
http://forum.mrwebmaster.it/discussioni-va...147-auguri.html

Mi raccomando ci conto! ih ih ih
anche Andrea e Roberta ecc....
 
Top
1 replies since 22/12/2011, 22:01   554 views
  Share