[RISOLTO]Inserimento Immagini da pc a MySql

Alex@1983

Utente Attivo
9 Mag 2015
126
2
18
Ciao Amici del Forum,

avrei bisogno ancora di voi per una nuova "sfida con me stesso" nell' imparare questo affascinante linguaggio.
Nello specifico vorrei aggiungere al mio form di Registrazione Segnalazioni.... la possibilità di salvare una foto...

Cosa ho fatto allora: ho aggiunto al mio form che prevedeva i campi : DATA , SEGNALAZIONE , DESCRIZIONE , NOTE .... il campo FOTO

Ed ho aggiunto alla mia tabella MySql il campo "foto" (Long Blob )

Il codice del mio file , comprensivo della query di inserimento è :
PHP:
f(isset($_POST['registra'])){
    header("Cache-Control: no-cache");

include("connectDB.php");  

mysql_select_db("my_db");

$data = $_POST['data'];

$dataUs = explode("/", $data);
$datadb = $dataUs[2]. "-". $dataUs[1]. "-" .$dataUs[0];

$segnalazione = $_POST['segn'];
$descrizione = htmlentities($_POST['desc'],ENT_QUOTES);
$note = $_POST['note'];
$foto = $_POST['foto'];

$toinsert = "INSERT INTO `RegistroSegnalazioni`
        (data, segnalazione, descrizione, note, foto)
            VALUES
            (
              '$datadb',
             '$segnalazione',
             '$descrizione',
             '$note'
             '$foto')";

$res = mysql_query($toinsert);

Se provo ad inserire un record direttamente da phpmyadmin ... funziona .... Ma se provo dal form di inserimento mi dà Errorrrreeee !!!!

Mi illuminereste in merito ?...dove sbaglio ancora una volta ? .... ho provato a googolare in giro ... ma sono più confuso di prima !!!

Grazie in anticipo !
 

macus_adi

Utente Attivo
5 Dic 2017
1.343
91
48
IT/SW
Partendo dal fatto che forse salvare le immagini sul DB non è una buona pratica, probabilmente hai sbagliato qui:
VALUES
(
'
$datadb',
'
$segnalazione',
'
$descrizione',
'
$note'
'
$foto')";
Codice:
$toinsert = "INSERT INTO `RegistroSegnalazioni`
        (data, segnalazione, descrizione, note, foto)
            VALUES
            ('".$data."',.....)

'(singolo) "(doppio).$variabile."(doppio)'(singolo)
 

marino51

Utente Attivo
28 Feb 2013
3.203
207
63
Lombardia
il "file system" è il miglior database per foto e file di dimensioni onerose
ti suggerisco di evitare di memorizzare foto nel db,
memorizzale in un folder del file system e nel db registra le coordinate per rintracciarle (percorso e nome del file)
il db te ne sarà grato e lo saranno tutte le persone che dovessero fare un back up dei dati ( o peggio una restore)

quando chiedi supporto per un errore, posta anche l'errore così che si possa anche noi capire, spesso la causa non è nello scrip ma risiede da altre parti

per capire se l'errore deriva dalla foto, prova ad inserire la conversione prima della insert,
HTML:
$foto64 = base64_encode($foto)
e memorizza il file "64"
leggi il manuale php per info
 

Alex@1983

Utente Attivo
9 Mag 2015
126
2
18
Ciao Macus_adi e Marino51 .... Grazie per le risposte !

Allora... intanto ho verificato che , eliminando dalla tabella del db il campo foto, e modificando opportunamente il codice di inserimento dei dati .... il record viene inserito correttamente. Quindi il problema sembra nascere proprio nel monìmento in cui aggiungo " il pezzettino " relativo all' acquisizione della foto.

@macus_adi .... A questo punto , credo , che il problema di apici e doppi apici ... sia smarcato ...

@marino51 .... Ho provato aggiungendo "base64_encode($foto)" .... ma non cambiava nulla e l'insert falliva ugualmente. Per quanto riguarda il salvataggio in una cartella delle immagini poi...con relativo collegamento al record salvato nel DB ... non saprei neanche da dove cominciare onestamente.....:( .....

Aiutatemi .... non so proprio dove sbattere la testa !!!!!

Grazie ancora !
 

Alex@1983

Utente Attivo
9 Mag 2015
126
2
18
Macus_ ma il mio db è su altervista ... come controllo post_max_size ? .... il file poi è 77.1 kb .....
 

macus_adi

Utente Attivo
5 Dic 2017
1.343
91
48
IT/SW
PHP:
try{
    $res = mysql_query($toinsert);
}catch (Exception $e){
    print_r($e);
}

Posta codice errore!
 

Alex@1983

Utente Attivo
9 Mag 2015
126
2
18
Ciao Macus...Rispondo solo adesso perchè ieri ho avuto dei disagi e non ho potuto....

ho provato ad inserire il pezzo di codice che mi hai consigliato ma non succede proprio nulla......

allego lo screen della mia tabella db + il codice ... nella speranza di riuscire ad ovviare...

Nella tabella noterai che gli ultimi due record contengono correttamente l'immagine....Ma quelle sono due prove fatte direttamente da phpmyadmin ..... le prime due ,fatte da form ... vengono registrate ma senza immagine

Grazie ancora per il supporto !

PHP:
  <form id="forminserisci" method="post" enctype="multipart/form-data" runat="server" action="<?php echo $_SERVER['PHP_SELF']; ?>" autocomplete="on">
    <table class="tableinserisci" align="center">
      <tr>
        <td align="center" colspan="8" class="registro"><h1>REGISTRO VERIFICHE</h1></td>
    </tr>
    <tr></tr>
       <tr></tr>
       <tr></tr>
       <tr></tr>
       <tr></tr>
       <tr></tr>
      <tr class="lbl"> 
         <td class="lbl"; align="center">DATA</td>
       </td>
     <td class="lbl"; align="center">SEGNALAZIONE
       </td>
       <td> <input type="hidden" class="desc" id="desc"  name="desc" value="" size="65" autocomplete="on">
       </td>
     </tr>
      <tr>   
         <td> <input type="text" id="data"  name="data" value="<?php echo date("d/m/Y");?>" size="10" autocomplete="on">
       </td>
     <td> <select id="segn"  name="segn" value="">
        <option></option>
        <option>Altro</option>
   </select>
       </td> 
       <td> <input type="hidden" class="aaa" id="aaa"  name="desc" value="" size="65" autocomplete="on">
       </td>
  <tr>
         <td class="lbl"; align="center"; colspan="3">DESCRIZIONE
       </td>
       <td class="lbl"; align="center"; colspan="1">
       </td>
     </tr>
       <tr>
      <td colspan="3"> <input type="text" class="desc" id="desc"  name="desc" value="" size="65" autocomplete="on">
       </td>
       <td colspan="1"> <input type="hidden" class="desc" id="des"  name="des" value="" size="65" autocomplete="on">
       </td>
     </tr>
<tr>
<td><input type="file" id="foto" name= "foto"></td>
</tr>


       <tr></tr>
     <td align="center"; colspan="8"><input type="submit" name="registra" value="Registra"
                 style="
                      width: 161px;
                      height: 55px;
                      font-size: 25px;
                      ">
       </td>
     </tr>
</table>
  </form>
<br/>
<br/> 
 
<?php

if(isset($_POST['registra'])){
    header("Cache-Control: no-cache");

include("connectDB.php");   

mysql_select_db("my_web1105");

//$id = ;

$data = $_POST['data'];

$dataUs = explode("/", $data);
$datadb = $dataUs[2]. "-". $dataUs[1]. "-" .$dataUs[0]; 

$operatore = $_POST['oper'];
$segnalazione = $_POST['segn'];
$descrizione = htmlentities($_POST['desc'],ENT_QUOTES);
$foto = $_POST['foto'];
$fotodb = base64_encode($foto);

if(preg_match("#^\d{2}/\d{2}/\d{4}$#",$data))

    {
    echo "";
}
else
    {   
    echo "Inserisci la data nel formato corretto \n gg/mm/aaaa";
        
    exit;
}   

if (($data=="") || ($segnalazione=="") )

    {
        echo "Non hai inserito la data o la segnalazione";

        exit;
    }


$toinsert = "INSERT INTO RegistroVerifiche2017
        (data, segnalazione, descrizione, foto)
            VALUES
            (
              '$datadb',
             '$segnalazione',
             '$descrizione',
             '$foto'
              )";


$res = mysql_query($toinsert);

if($res){

echo("");

header("location: Inserisci.php");
    
}

else
    {
    echo("ERRORE
               '$datadb',
             '$segnalazione',
              '$descrizione',
              '$note',
             '$foto'
                ").mysql_error();

mysql_close($connessione);
}
}

try{
    $res = mysql_query($toinsert);
}catch (Exception $e){
    print_r($e);
}
 

Allegati

  • tabella.JPG
    tabella.JPG
    30,1 KB · Visite: 449

macus_adi

Utente Attivo
5 Dic 2017
1.343
91
48
IT/SW
La foto non risiede nella variabile POST, ma in FILES.
Il try doveva essere l'esecuzione della query non alla fine del file.
Ti posto comunque il codice, ho utilizzato la nuova estensione mysqli e non mysq in quanto vecchiotta.
PHP:
function get_conn(){
    $mysql=new mysqli('localhost','root','','test');
    return $mysql;
}
if(isset($_POST['registra'])){
    header("Cache-Control: no-cache");

    $conn=get_conn();


    $data = $_POST['data'];

    $dataUs = explode("/", $data);
    $datadb = $dataUs[2]. "-". $dataUs[1]. "-" .$dataUs[0];

    $operatore = (isset($_POST['oper']))?$_POST['oper']:'null';
    $segnalazione = (isset($_POST['segn']))?$_POST['segn']:'null';
    $descrizione = htmlentities($_POST['desc'],ENT_QUOTES);
//FOTO
    $fotodb = base64_encode(file_get_contents($_FILES['foto']['tmp_name']));
    if(preg_match("#^\d{2}/\d{2}/\d{4}$#",$data))
    {
        echo "";
    }
    else
    {
        echo "Inserisci la data nel formato corretto \n gg/mm/aaaa";

        exit;
    }
    if (($data=="") || ($segnalazione=="") )
    {
        echo "Non hai inserito la data o la segnalazione";
        exit;
    }
    $toinsert = "INSERT INTO RegistroVerifiche2017
        (`data`, `segnalazione`, `descrizione`, `foto`)
            VALUES
            (
              '$datadb',
             '$segnalazione',
             '$descrizione',
             '$fotodb'
              )";
    try{
        $conn->query($toinsert);
    }catch (Exception $e){
        print_r($e);
    }
}
File HTML per invio dati:
HTML:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form id="forminserisci" method="post" enctype="multipart/form-data"  action="index.php" autocomplete="on">
    <table class="tableinserisci" align="center">
        <tr>
            <td align="center" colspan="8" class="registro"><h1>REGISTRO VERIFICHE</h1></td>
        </tr>
        <tr></tr>
        <tr></tr>
        <tr></tr>
        <tr></tr>
        <tr></tr>
        <tr></tr>
        <tr class="lbl">
            <td class="lbl"; align="center">DATA</td>
            </td>
            <td class="lbl"; align="center">SEGNALAZIONE
            </td>
            <td> <input type="hidden" class="desc" id="desc"  name="desc" value="" size="65" autocomplete="on">
            </td>
        </tr>
        <tr>
            <td> <input type="text" id="data"  name="data" value="<?php echo date("d/m/Y");?>" size="10" autocomplete="on">
            </td>
            <td> <select id="segn"  name="segn" value="">
                <option></option>
                <option>Altro</option>
            </select>
            </td>
            <td> <input type="hidden" class="aaa" id="aaa"  name="desc" value="" size="65" autocomplete="on">
            </td>
        <tr>
            <td class="lbl"; align="center"; colspan="3">DESCRIZIONE
            </td>
            <td class="lbl"; align="center"; colspan="1">
            </td>
        </tr>
        <tr>
            <td colspan="3"> <input type="text" class="desc" id="desc"  name="desc" value="" size="65" autocomplete="on">
            </td>
            <td colspan="1"> <input type="hidden" class="desc" id="des"  name="des" value="" size="65" autocomplete="on">
            </td>
        </tr>
        <tr>
            <td><input type="file" id="foto" name= "foto"></td>
        </tr>


        <tr></tr>
        <td align="center"; colspan="8"><input type="submit" name="registra" value="Registra"
                                               style="
                      width: 161px;
                      height: 55px;
                      font-size: 25px;
                      ">
        </td>
        </tr>
    </table>
</form>
<br/>
<br/>
</body>
</html>

Ho replicato il tuo DB, funziona!
 
  • Like
Reactions: Alex@1983

Alex@1983

Utente Attivo
9 Mag 2015
126
2
18
La foto non risiede nella variabile POST, ma in FILES.
Il try doveva essere l'esecuzione della query non alla fine del file.
Ti posto comunque il codice, ho utilizzato la nuova estensione mysqli e non mysq in quanto vecchiotta.
PHP:
function get_conn(){
    $mysql=new mysqli('localhost','root','','test');
    return $mysql;
}
if(isset($_POST['registra'])){
    header("Cache-Control: no-cache");

    $conn=get_conn();


    $data = $_POST['data'];

    $dataUs = explode("/", $data);
    $datadb = $dataUs[2]. "-". $dataUs[1]. "-" .$dataUs[0];

    $operatore = (isset($_POST['oper']))?$_POST['oper']:'null';
    $segnalazione = (isset($_POST['segn']))?$_POST['segn']:'null';
    $descrizione = htmlentities($_POST['desc'],ENT_QUOTES);
//FOTO
    $fotodb = base64_encode(file_get_contents($_FILES['foto']['tmp_name']));
    if(preg_match("#^\d{2}/\d{2}/\d{4}$#",$data))
    {
        echo "";
    }
    else
    {
        echo "Inserisci la data nel formato corretto \n gg/mm/aaaa";

        exit;
    }
    if (($data=="") || ($segnalazione=="") )
    {
        echo "Non hai inserito la data o la segnalazione";
        exit;
    }
    $toinsert = "INSERT INTO RegistroVerifiche2017
        (`data`, `segnalazione`, `descrizione`, `foto`)
            VALUES
            (
              '$datadb',
             '$segnalazione',
             '$descrizione',
             '$fotodb'
              )";
    try{
        $conn->query($toinsert);
    }catch (Exception $e){
        print_r($e);
    }
}
File HTML per invio dati:
HTML:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form id="forminserisci" method="post" enctype="multipart/form-data"  action="index.php" autocomplete="on">
    <table class="tableinserisci" align="center">
        <tr>
            <td align="center" colspan="8" class="registro"><h1>REGISTRO VERIFICHE</h1></td>
        </tr>
        <tr></tr>
        <tr></tr>
        <tr></tr>
        <tr></tr>
        <tr></tr>
        <tr></tr>
        <tr class="lbl">
            <td class="lbl"; align="center">DATA</td>
            </td>
            <td class="lbl"; align="center">SEGNALAZIONE
            </td>
            <td> <input type="hidden" class="desc" id="desc"  name="desc" value="" size="65" autocomplete="on">
            </td>
        </tr>
        <tr>
            <td> <input type="text" id="data"  name="data" value="<?php echo date("d/m/Y");?>" size="10" autocomplete="on">
            </td>
            <td> <select id="segn"  name="segn" value="">
                <option></option>
                <option>Altro</option>
            </select>
            </td>
            <td> <input type="hidden" class="aaa" id="aaa"  name="desc" value="" size="65" autocomplete="on">
            </td>
        <tr>
            <td class="lbl"; align="center"; colspan="3">DESCRIZIONE
            </td>
            <td class="lbl"; align="center"; colspan="1">
            </td>
        </tr>
        <tr>
            <td colspan="3"> <input type="text" class="desc" id="desc"  name="desc" value="" size="65" autocomplete="on">
            </td>
            <td colspan="1"> <input type="hidden" class="desc" id="des"  name="des" value="" size="65" autocomplete="on">
            </td>
        </tr>
        <tr>
            <td><input type="file" id="foto" name= "foto"></td>
        </tr>


        <tr></tr>
        <td align="center"; colspan="8"><input type="submit" name="registra" value="Registra"
                                               style="
                      width: 161px;
                      height: 55px;
                      font-size: 25px;
                      ">
        </td>
        </tr>
    </table>
</form>
<br/>
<br/>
</body>
</html>

Ho replicato il tuo DB, funziona!

Graziiiiisssmmoooo Macus!

Avevo voglia di provare e riprovare io !!!!.... [Files] no [Post] !!!! ...... ecco come saltano fuori tutte le mie debolezze da novellino !:(:(

L'immagine viene correttamente inserita nel db .... ovviamente codificata ed allo stesso modo viene visualizzata nella <table> , sottostante il form , che mostra i record inseriti .....chiaramente annche li mostra l'immagine codificata (valori alfanumerici ) ....

Per visualizzarla all'interno della <table> ... credi sia sufficiente usare "base64_decode() ?

Tipo :

PHP:
$foto = base64_decode($result['foto']) ;

echo "<tr bgcolor='#98FF98'><td style='width: 35px;'>".$r['id']."</td>".
     "<td style='width: 82px;'>".$dataRelIta."</td>".
     "<td style='width: 143px;'>".$r['segnalazione']."</td>".
     "<td style='width: 500px;'>".$r['descrizione']."</td>".
     "<td style='width: 80px; '>" .$foto."<td>
    </tr>";

Per ora non mi funziona.... ma magari sto sbagliando qualcosa nella sintassi ? .... o mi perdo ancora qualche pezzo per strada ?....

Non mandarmi a quel paese ......;)
 
Ultima modifica:

macus_adi

Utente Attivo
5 Dic 2017
1.343
91
48
IT/SW
Quando salvi è encode, quando visualizza decode!
PHP:
$foto = base64_decode($result['foto']) ;
$foto='<img src="data:image/png;base64,'.$foto.'" />';

echo "<tr bgcolor='#98FF98'><td style='width: 35px;'>".$r['id']."</td>".
"<td style='width: 82px;'>".$dataRelIta."</td>".
"<td style='width: 143px;'>".$r['segnalazione']."</td>".
"<td style='width: 500px;'>".$r['descrizione']."</td>".
"<td style='width: 80px; '>" .$foto."<td>
</tr>"
;
 
  • Like
Reactions: Alex@1983

Alex@1983

Utente Attivo
9 Mag 2015
126
2
18
Quando salvi è encode, quando visualizza decode!
PHP:
$foto = base64_decode($result['foto']) ;
$foto='<img src="data:image/png;base64,'.$foto.'" />';

Ciao Macus_adi...

Questa volta scrivo solo per RINGRAZIARTI di tutto l'aiuto che mi hai voluto dare !

Grazie alle tue dritte sono riuscito a fare quello che avevo in mente :
--Salvare un' immagine nel db
--Estrarla per visualizzarla all'interno di una "Tabella-Registro"

Da questa mattina poi ... mi sono "sbattuto" per portare a termine un' ultima cosa che ... dava il tocco finale al tutto :
--Ricevere una mai lin HTML ... con allegata l'immagine.....ogni volta che una segnalazione viene inserita.
Ho faticato un po ma ... prova e riprova .... alla fine cel'ho fatta!

Senza il tuo aiuto ...starei ancora cercando di capire come mai .... $foto = $_POST['foto'] ..... non funzionava...;)

Grazie mille ancora !!
 

Alex@1983

Utente Attivo
9 Mag 2015
126
2
18
Deve essere $_FILES no $_POST
per questo ti ho scritto :

Senza il tuo aiuto ...starei ancora cercando di capire come mai .... $foto = $_POST['foto'] ..... non funzionava...;)

Intendevo proprio dire che ...se non mi avessi spiegato il mio "banale" errore ... sarei fermo ancora all'inizio.....;)
 
Discussioni simili
Autore Titolo Forum Risposte Data
C [RISOLTO]Inserimento variabile php in input html PHP 20
M [risolto] Inserimento link in tabella da database PHP 3
H [RISOLTO]Inserimento file xml Ajax 3
A [RISOLTO]Inserimento nel database MySQL 13
A [RISOLTO] Inserimento nel database MySQL 5
pup3770 [RISOLTO]Pagina di inserimento con visualizzazione temporizzata PHP 7
M [RISOLTO] inserimento dati db PHP 22
O [risolto] Inserimento nuovo campo in mysql. Problema PHP 6
M [RISOLTO]Inserimento Slide Html HTML e CSS 5
Jonn Inserimento [RISOLTO] sui tread Supporto Mr.Webmaster 1
L (risolto) MySQL 0
B getElementById su piu id(Risolto) Javascript 7
L Esercitarsi con Js [RISOLTO] Javascript 4
L risolto visualizzazione e ordinamento dati PHP 1
moustache [RISOLTO] SQL PHP IIS PHP 8
Sergio Unia Ricezione email con destinatari multipli [Risolto] PHP 2
L update tabelle in php mysql [risolto] PHP 6
M Semplice visualizzatore di immagini [risolto con plugin wp] PHP 7
L [RISOLTO] Stampa a video risultato count in html PHP 13
L [RISOLTO] Eliminare una discussione creata PHP 3
tomorc [HTML] Problema con scroll bar (risolto) HTML e CSS 0
A [PHP] Problema query insert [RISOLTO] PHP 14
B [PHP] recuperare IP dei server in load balancing [RISOLTO] PHP 3
K [RISOLTO] Problema Griglia Php+Mysql PHP 13
S [RISOLTO] aggiorna tabella da select option asp classic Classic ASP 7
elpirata [RISOLTO][Javascript] Datapicker e autocompletamento campo input Javascript 2
elpirata [RISOLTO][Mysql] Problema insert valori apostrofati MySQL 1
elpirata [RISOLTO][Mysql] Contare le occorrenze in un campo tipo varchar MySQL 2
G [MS Access] Gestione biglietti [RISOLTO] MS Access 2
G [MS Access] Casella combinata & Query [RISOLTO] MS Access 4
G [MS Access] Query mese corrente con conteggio [RISOLTO] MS Access 2
M [RISOLTO]Windows media player non mi funziona più su win 10 pro 64 bit Windows e Software 2
C [RISOLTO][PHP] Errore di sintassi PHP 8
IT9-Gpp [RISOLTO] Leggere variabile restituita da success Ajax 3
Kolop [RISOLTO][PHP] Problema Pagination PHP 2
C [RISOLTO][PHP] Funzione ONclick PHP 14
C [RISOLTO][PHP] Conteggio righe di una tabella PHP 4
N [PHP] Utilizzo variabili di sessione [Risolto] PHP 13
Tommy03 [RISOLTO][PHP] Webserver o devserver? PHP 2
Sergio Unia Recupero dati da una vecchia versione MySql [Risolto] MySQL 4
spider81man [PHP] Problemi cancellazione dato su DB [RISOLTO] PHP 1
A [PHP] RISOLTO Invio Mail con Tabella PHP 2
felino Risolto - [Wordpress][WooCommerce] PayPal Checkout e campi di fatturazione WordPress 2
elpirata [PHP][RISOLTO] Sommare gli importi estratti da un ciclo while PHP 3
elpirata [PHP][RISOLTO] Effettuare la somma dei tempi di lavorazione PHP 3
elpirata [PHP] [RISOLTO]Sovrascrivere testo in una tabella PHP 2
A [RISOLTO]Recuperare dati inviati con json tramite php PHP 4
C [RISOLTO][PHP] Passaggio variabili senza refresh di pagina PHP 7
elpirata [PHP][RISOLTO] Errore di tipo Notice: Undefined index - Come risolvere quando si hanno tante var PHP 10
S Problema in PHP per invio file XML - RISOLTO- PHP 8

Discussioni simili