Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2013
    residenza
    Genova
    Messaggi
    5

    Problema inserimento immagini dentro un'attributo BLOB

    Buonasera, sto programmando in PHP da circa due mesetti...non sono un genio ma diciamo che me la cavo, sto facendo un CMS basato su un database per un museo e ho un problema:

    Ho creato un form per l'inserimento di una nuova mostra, oltre ai vari dati ho bisogno di inserire una possibile immagine che sarà la locandina della mostra... vorrei inserirla all'interno del db nel campo "locandina" di tipo BLOB così che quando avrò bisogno di cancellare la mostra mi basterà passare l'id senza dover cancellare anche il file nella cartella images...
    il codice che ho scritto è questo, io credo sia giusto, ho cercato modifiche in tutti i modi online ma continua a darmi errore (ho creato un controllo di inserimento in modo che si possano inserire solo jpg, gif o png), il problema nell'inserimento è che il campo blob non si riempie mai (rimane sempre vuoto poichè a quanto pare non riesce a fare bene il controllo, mi da sempre errore come se cercassi di inserire un formato diverso ma la foto che carico è sempre in jpg)...

    il codice è questo, riuscite a darci un'occhiata e vedere dove sbaglio?
    grazie mille!!!

    Codice PHP:
    <?php if(isset($_POST['Submit'])) {
        @include 
    'config.php';    @include 'connessione_db.php';        
    /* Creo una array con i formati accettati    */
    $tipi_consentiti = array("image/gif","image/jpeg","image/png","image/jpg");

        
    /* verifico che il formato del file sia tra quelli accettati    */
    if (@in_array($_FILES['fotoevento']['type'], $tipi_consentiti)){         

    $nome_img_tmp = @addslashes($_FILES['fotoevento']['tmp_name']);    
    $nome_img = @addslashes($_FILES['fotoevento']['name']);       
    $tipo_img = @addslashes($_FILES['fotoevento']['type']);    
    $dimensione_img = @addslashes($_FILES['fotoevento']['size']);       
    /*Recupero dati dal form */   
    $nome_mostra = @addslashes($_POST['name']);    
    $data_inizio = ($_POST['aa_inizio'] . "-" $_POST['mm_inizio'] . "-" $_POST['gg_inizio']);    
    $data_fine = ($_POST['aa_fine'] . "-" $_POST['mm_fine'] . "-" $_POST['gg_fine']);    
    $luogo = @addslashes($_POST['luogo']);    
    $prezzo = @addslashes($_POST['prezzo']);    
    $descriz = @addslashes($_POST['descrizione']); 
           
    $file_img = @file_get_contents($nome_img_tmp);        
    $file_img = @addslashes($file_img);        

    $datai mktime(0,0,0,$_POST['mm_inizio'],$_POST['gg_inizio'],$_POST['aa_inizio']);    
    $dataf mktime(0,0,0,$_POST['mm_fine'],$_POST['gg_fine'],$_POST['aa_fine']);   

     if (
    $datai<$dataf) {        
      
    $query "INSERT INTO mostre (nomemostra,datainizio,datafine,luogo,prezzo,descrizione,locandina) VALUES ('$nome_mostra','$data_inizio','$data_fine','$luogo','$prezzo','$descriz','$file_img')";                

        if (@
    mysql_query($query)) {                     
         echo 
    '<p><b>Nuovo evento aggiunto correttamente!</b></p>';                
        }                 
        else {                    
          echo 
    '<p><b>Impossibile inserire il nuovo evento: ' mysql_error() . '</b></p>';                
        }        
    }         
    else {            
       echo 
    '<p>Inserisci correttamente le date!' mysql_error() . '</p>';        
       }     

    else {        
      echo 
    '<p>Inserisci la foto nel formato corretto!' mysql_error() . '</p>';        
      }
    }
    ?>
    Ultima modifica di nickdoherty; 09-10-2013 a 00:41

  2. #2
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,503
    Devi per forza mettere le immagini in un campo blob?
    Se puoi scegliere, evita assolutamente.

    I file mettili in una o più cartelle, dipende come vuoi organizzarle e nel db, mettici solo i nomi dei file.
    Poi per mettere le immagini sulle pagine usi il tag <img src='...' /> e come src ci metti il nome del file, con l'eventuale percorso necessario fino alla cartella che le contiene.

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2013
    residenza
    Genova
    Messaggi
    5
    Si lo so, infatti nella sezione immagini le ho messe tutte nelle cartelle, ma siccome in questa sezione vorrei tener tutto in una sola tabella, preferirei inserirle in un campo BLOB, solo che mi da questo errore e non so come risolvere...

  4. #4
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,503
    Se la tabella dovrà contenere molte immagini il db si appesantirà molto velocemente, pensaci bene prima di fare questa scelta, rimediare una volta che il sito sarà operativo potrebbe essere un casino.

  5. #5
    fatti una echo di $_FILES['fotoevento']['type'] e vedi che scrive
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  6. #6
    sul db si salva l'uri dell'immagine non l'immagine..
    Questa volta, più che un voto.. è favoreggiamento.

  7. #7
    Utente di HTML.it
    Registrato dal
    Oct 2013
    residenza
    Genova
    Messaggi
    5

    Modifica ma il problema persiste

    Quote Originariamente inviata da Alhazred Visualizza il messaggio
    Se la tabella dovrà contenere molte immagini il db si appesantirà molto velocemente, pensaci bene prima di fare questa scelta, rimediare una volta che il sito sarà operativo potrebbe essere un casino.
    Ok, ho provato a riscrivere il codice inserendo le immagini nella cartella "images/Locandine" definita nel config.php come $path_locandine

    L'errore però è sempre lo stesso: dopo il caricamento mi dice: "inserisci la foto nel formato corretto!", come se non riconoscesse il formato ma vi assicuro che ho controllato con diverse foto in jpeg e mi da sempre errore... riuscite a trovare dove c'è qualcosa che non va?
    il codice riscritto è questo..grazie!!

    Codice PHP:
    <?php if(isset($_POST['Submit'])) {
        @include 
    'config.php';    @include 'connessione_db.php';        /*Creo una array con i formati accettati*/    $tipi_consentiti = array("image/gif","image/jpeg","image/png","image/jpg");
        
    /*verifico che il formato del file sia tra quelli accettati*/    if (@in_array($_FILES['fotoevento']['type'], $tipi_consentiti)){         /*copio il file nella cartella delle immagini*/    @copy ($_FILES['fotoevento']['tmp_name'], $path_locandina $_FILES['fotoevento']['name']);        /*Recupero dati dal form*/    $nome_mostra = @addslashes($_POST['name']);    $data_inizio = ($_POST['aa_inizio'] . "-" $_POST['mm_inizio'] . "-" $_POST['gg_inizio']);    $data_fine = ($_POST['aa_fine'] . "-" $_POST['mm_fine'] . "-" $_POST['gg_fine']);    $luogo = @addslashes($_POST['luogo']);    $prezzo = @addslashes($_POST['prezzo']);    $descriz = @addslashes($_POST['descrizione']);        /* recupero i dati dal file */    $nome = @addslashes($_FILES['fotoevento']['name']);    $dimensione = @addslashes($_FILES['fotoevento']['size']);    $path $path_locandina stripslashes($nome);    $tipo = @addslashes($_FILES['fotoevento']['type']);          $datai mktime(0,0,0,$_POST['mm_inizio'],$_POST['gg_inizio'],$_POST['aa_inizio']);    $dataf mktime(0,0,0,$_POST['mm_fine'],$_POST['gg_fine'],$_POST['aa_fine']);        if ($datai<$dataf) {            /*aggiorno il database*/            $query "INSERT INTO mostre (nomemostra,datainizio,datafine,luogo,prezzo,descrizione,nome_locandina,path_locandina)                         VALUES ('$nome_mostra','$data_inizio','$data_fine','$luogo','$prezzo','$descriz','$nome','$path')";            $res = @mysql_query($query) or die (mysql_error());            @mysql_close($cn);            echo "Copia eseguita con successo.";         } else {            echo "Inserisci correttamente le date!";        }    } else {    /*stampo un messaggio di errore nel caso in cui il file sia di un formato non consentito*/    echo "Inserisci la foto nel formato corretto!";  }} ?>

  8. #8
    Prima di tutto non usare mai la @, per tre motivi:
    1) Rallenta il codice;
    2) Non ti aiuta nell'attività di debug perché nasconde i problemi;
    3) Sporca inutilmente il codice;

    Hai controllato che i campi impostati nel codice HTML siano coerenti con quelli scritti in PHP?
    Stampa a video il valore di
    $_FILES['fotoevento']['type'].
    Ultima modifica di Albertorrr; 10-10-2013 a 01:08
    Sistemi di allarme, telecamere, autoradio, video proiettori e altri prodotti tecnologici: fedom.it

  9. #9
    Utente di HTML.it
    Registrato dal
    Oct 2013
    residenza
    Genova
    Messaggi
    5
    Ok, grazie per il consiglio! comunque ho risolto ragazzi, era un errore nel form...mi ero dimenticato di inserire l'enctype!!! dannazione ci ho perso un pomeriggio intero! grazie comunque

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.