RISOLTO Come posso leggere un file di tipo BLOB da DB e poi lavorarci su PHP ?

Stato
Discussione chiusa ad ulteriori risposte.

m3tt0

Nuovo Utente
112
13
CPU
i5-9400F
Dissipatore
NZXT Kraken M22 120mm
Scheda Madre
ASRock H310CM-HDV
HDD
WDC 1TB & SSD 480GB
RAM
G.Skill F4-2400C17-8GIS DDR4
GPU
NVIDIA GeForce GTX 1660 Super
PSU
Cooler Master MWE 600W
Case
Antec NX210
Net
Fibra/Rame 100 mega
Ciao a tutti, ho una domanda.
Dopo aver inserito tramite un form un file di tipo immagine, nel mio caso, nel database dovrei poi lavorare quel file riprendendolo dal DB e mostrandolo su una pagina web PHP, ho provato semplicemente a leggere il campo BLOB dalla base di dati ma il risultato è stato orribile in quanto non veniva letto come immagine ma come binario e quindi si vedeva a schermo una fila di numeri infiniti.
C'è per caso un metodo, una funzione, qualcosa per leggere correttamente il file e poi mostrarlo ?
Grazie in anticipo.
 

Moffetta88

Moderatore
Staff Forum
Utente Èlite
20,465
12,880
CPU
i5-4690
Dissipatore
DEEPCOOL CAPTAIN 240EX
Scheda Madre
MSI Z97 U3 PLUS
HDD
KINGSTON SSD KC400 240GB
RAM
24GB BALLISTIX SPORT @2133MHz
GPU
STRIX GTX980 DC2OC
Audio
INTEGRATA
Monitor
AOC G2590VXQ
PSU
BEQUIET! System Power 7 500W
Case
DEEPCOOL MATREXX 55
Periferiche
NESSUNA
Net
EOLO 100
OS
UBUNTU/WINDOWS11
La base è questa
PHP:
$db = mysqli_connect("localhost","root","","DbName"); //keep your db name
$sql = "SELECT * FROM products WHERE id = $id";
$sth = $db->query($sql);
$result=mysqli_fetch_array($sth);
echo '<img src="data:image/jpeg;base64,'.base64_encode( $result['image'] ).'"/>';

Poi tu te la devi adattare per le tue esigenze.
Io solitamente preferisco mettere nel db un campo relativo all'estensione del file (ottenibile durante il caricamento del file stesso) così da impostare data:image/jpeg; con il corretto formato di immagine (jpg/gif/png/etc...)
 
  • Mi piace
Reazioni: m3tt0

m3tt0

Nuovo Utente
112
13
CPU
i5-9400F
Dissipatore
NZXT Kraken M22 120mm
Scheda Madre
ASRock H310CM-HDV
HDD
WDC 1TB & SSD 480GB
RAM
G.Skill F4-2400C17-8GIS DDR4
GPU
NVIDIA GeForce GTX 1660 Super
PSU
Cooler Master MWE 600W
Case
Antec NX210
Net
Fibra/Rame 100 mega
La base è questa
PHP:
$db = mysqli_connect("localhost","root","","DbName"); //keep your db name
$sql = "SELECT * FROM products WHERE id = $id";
$sth = $db->query($sql);
$result=mysqli_fetch_array($sth);
echo '';

Poi tu te la devi adattare per le tue esigenze.
Io solitamente preferisco mettere nel db un campo relativo all'estensione del file (ottenibile durante il caricamento del file stesso) così da impostare data:image/jpeg; con il corretto formato di immagine (jpg/gif/png/etc...)

grazie mille, proverò così allora
 

Moffetta88

Moderatore
Staff Forum
Utente Èlite
20,465
12,880
CPU
i5-4690
Dissipatore
DEEPCOOL CAPTAIN 240EX
Scheda Madre
MSI Z97 U3 PLUS
HDD
KINGSTON SSD KC400 240GB
RAM
24GB BALLISTIX SPORT @2133MHz
GPU
STRIX GTX980 DC2OC
Audio
INTEGRATA
Monitor
AOC G2590VXQ
PSU
BEQUIET! System Power 7 500W
Case
DEEPCOOL MATREXX 55
Periferiche
NESSUNA
Net
EOLO 100
OS
UBUNTU/WINDOWS11
Devi adattarlo alla tua attuale configurazione db e come ottieni il resto dei dati sia chiaro!
 
  • Mi piace
Reazioni: m3tt0 e Mursey

Moffetta88

Moderatore
Staff Forum
Utente Èlite
20,465
12,880
CPU
i5-4690
Dissipatore
DEEPCOOL CAPTAIN 240EX
Scheda Madre
MSI Z97 U3 PLUS
HDD
KINGSTON SSD KC400 240GB
RAM
24GB BALLISTIX SPORT @2133MHz
GPU
STRIX GTX980 DC2OC
Audio
INTEGRATA
Monitor
AOC G2590VXQ
PSU
BEQUIET! System Power 7 500W
Case
DEEPCOOL MATREXX 55
Periferiche
NESSUNA
Net
EOLO 100
OS
UBUNTU/WINDOWS11
IMHO la vera domanda da porsi e' cosa ci fa un blob in un db...
perchè scusa? dipende come decidi di fare lo storage e di che tipo ma soprattutto che tipo di applicativo l'OP sta creando.
 
  • Mi piace
Reazioni: m3tt0

m3tt0

Nuovo Utente
112
13
CPU
i5-9400F
Dissipatore
NZXT Kraken M22 120mm
Scheda Madre
ASRock H310CM-HDV
HDD
WDC 1TB & SSD 480GB
RAM
G.Skill F4-2400C17-8GIS DDR4
GPU
NVIDIA GeForce GTX 1660 Super
PSU
Cooler Master MWE 600W
Case
Antec NX210
Net
Fibra/Rame 100 mega
IMHO la vera domanda da porsi e' cosa ci fa un blob in un db...
La mia è solo sperimentazione per trovare una soluzione ottimale a ciò che mi serve, per ora ho sempre tenuto all'interno del db un campo che memorizzava la root di ogni immagine che mi serviva sul sito web, ma volevo una cosa diversa, così volevo provare ad utilizzare i blob, non credo ci sia una blasfemia in questo.
 

m3tt0

Nuovo Utente
112
13
CPU
i5-9400F
Dissipatore
NZXT Kraken M22 120mm
Scheda Madre
ASRock H310CM-HDV
HDD
WDC 1TB & SSD 480GB
RAM
G.Skill F4-2400C17-8GIS DDR4
GPU
NVIDIA GeForce GTX 1660 Super
PSU
Cooler Master MWE 600W
Case
Antec NX210
Net
Fibra/Rame 100 mega
La base è questa
PHP:
$db = mysqli_connect("localhost","root","","DbName"); //keep your db name
$sql = "SELECT * FROM products WHERE id = $id";
$sth = $db->query($sql);
$result=mysqli_fetch_array($sth);
echo '<img src="data:image/jpeg;base64,'.base64_encode( $result['image'] ).'"/>';

Poi tu te la devi adattare per le tue esigenze.
Io solitamente preferisco mettere nel db un campo relativo all'estensione del file (ottenibile durante il caricamento del file stesso) così da impostare data:image/jpeg; con il corretto formato di immagine (jpg/gif/png/etc...)
Ciao, faccio riferimento a questo messaggio per dire che ho provato questa sintassi proposta ma senza cambiamenti, provo a pubblicare parte del codice così magari è più di aiuto.
grazie ancora.

PHP:
   <body id="top">
   <?php
    $nominativo = $_POST["nominativo"];
            $x = explode(" ",$nominativo);
           
            $connection = mysqli_connect ("127.0.0.1" ,"locale" ,"", "5itiB") or die ("Connessione rifiutata");
            mysqli_select_db ("5itiB", $connection);
            $query = "select * from Studenti where (nome ='$x[0]' and cognome = '$x[1]') or (nome ='$x[1]' and cognome = '$x[0]')  ";
            $risultato = mysqli_query ($connection,$query) or die ("query sbagliata 1");
            $row0 = mysqli_fetch_array($risultato);      
     if (mysqli_num_rows($risultato) == 0)
                echo "<h1> $x[0] $x[1] non è presente nel database</h1>" ;
               
            else
            {
     echo"<div class='page-content'>";
       echo"<div>";
  echo"<div class='profile-page'>";
   echo"<div class='wrapper'>";
     echo"<div class='page-header page-header-small' filter-color='green'>";
       echo"<div class='page-header-image' data-parallax='true' style='background-image: url(/immagini/background.png)'></div>";
       echo"<div class='container'>";
         echo"<div class='content-center'>";
         if($row0[immagini] != NULL || $row0[immagini] != '')
         {
               //sintassi consigliata da Moffetta88
                echo"<div class='cc-profile-image'><a href='#'><img src=\"data:image/png;base64,'.base64_encode('$row0[immagini]').' \" alt='Image'/></a></div>"; 
            }
        else
                {
          echo"<div class='cc-profile-image'><a href='#'><img src='/immagini/imageNotFound.png' alt='Image'/></a></div>";
               
       }
 
Ultima modifica:

Moffetta88

Moderatore
Staff Forum
Utente Èlite
20,465
12,880
CPU
i5-4690
Dissipatore
DEEPCOOL CAPTAIN 240EX
Scheda Madre
MSI Z97 U3 PLUS
HDD
KINGSTON SSD KC400 240GB
RAM
24GB BALLISTIX SPORT @2133MHz
GPU
STRIX GTX980 DC2OC
Audio
INTEGRATA
Monitor
AOC G2590VXQ
PSU
BEQUIET! System Power 7 500W
Case
DEEPCOOL MATREXX 55
Periferiche
NESSUNA
Net
EOLO 100
OS
UBUNTU/WINDOWS11
Cambia questa
echo"<div class='cc-profile-image'><a href='#'><img src=\"data:image/png;base64,'.base64_encode('$row0[immagini]').' \" alt='Image'/></a></div>"; //sintassi consigliata da Moffetta88
con questa
PHP:
echo '<div class="cc-profile-image"><a href="#"><img src="data:image/jpg;base64,'.base64_encode($row0[immagini]).'" alt="Image"/></a></div>';

Gli apici ed i doppi apici sono importanti, poi, bastava che premevi F12 nel browser per vedere cosa ti stava stampando l'html..

1621886863512.png
1621886883895.png
 
  • Mi piace
Reazioni: m3tt0
Stato
Discussione chiusa ad ulteriori risposte.

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!