• User

    Richiamare immagini da database mysql

    Ciao a tutti, scusate se posto una problematica già sicuramente discussa..ho provato a cercare ma :bho: non sono riuscito a risolvere...

    Il mio problema è questo:
    Ho 3 script in php per caricare immagini sul database. Una pagina per caricare l' immagine, una che esegue un elenco delle immagini caricate nel database e l' ultima che richiama l' immagine dal database. In teoria questa immagine la dovrei vedere a video, ma così non è!
    Mi esce una stringa di errore nella riga 12 di pagina "mostra.php" che ora vi mostrerò... e sotto una marea di simboli strani. dovrebbe essere l' immagine, ma evedentemente non risulta codificata, non so!

    QUESTA LA PAGINA index.php da dove carico l' immagine nel database:

    <?php
    // se è stato inviato il file...
    if(isset($_POST['invia']))
    {
    // se ci sono stati problemi nell'upload del file
    if(!isset($_FILES['file_inviato']) OR $_FILES['file_inviato']['error'] != UPLOAD_ERR_OK)
    mostra_form("errore nell'invio del file. Riprova");

    // connessione e selezione del database
    mysql_connect('localhost, 'user', 'passw')
    or die('Connessione non riuscita: ' . mysql_error());

    if(!mysql_select_db('nome DB'))
    die('Selezione database fallita!');

    // recupero alcune 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
    $dati_file = addslashes($dati_file);

    // query per inserire il file nel DB
    $query = "INSERT INTO tabella_files SET
    nome_file = '$nome_file_vero',
    tipo_file = '$tipo_file',
    dati_file = '$dati_file'";

    mysql_query($query)
    OR die('Query non valida: ' . mysql_error());

    // mostro nuovamente il form ed un messaggio di successo
    mostra_form("Memorizzazione del file <b>$nome_file_vero</b> nel database eseguita correttamente.");
    }
    else
    {
    mostra_form();
    }

    /**

    • Mostra il form per l'upload del file

    */
    function mostra_form($messaggio = '')
    {
    ?>

    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Carica file nel database</title>
    </head>

    <p><?php echo $messaggio?> <br /> Seleziona un file da memorizzare nel database: <p></p>
    <form name="form1" enctype="multipart/form-data" method="post" action="">
    <p>
    <input type="file" name="file_inviato">
    <p></p>
    <p>
    <input type="submit" name="invia" value="Invia file">
    <p></p>
    </form>

    <?php
    exit();
    }
    ?>

    QUESTA LA PAGINA elenco.php dove sono elencati le immagini caricate nel database ...(e fino a qui funziona)

    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    <title>Carica file nel database</title>
    </head>

    <p><b>Clicca su uno dei seguenti file</b><p><p></p>
    <?php
    // connessione e selezione del database
    mysql_connect('localhost, 'user', 'passw')
    or die('Connessione non riuscita: ' . mysql_error());

    if(!mysql_select_db('nome DB'))
    die('Selezione database fallita!');

    // query per ottenere l'elenco dei files nel DB
    $query = "SELECT * FROM tabella_files";

    $risultato = mysql_query($query)
    or die('Query non valida: ' . mysql_error());

    // se ci sono files nel DB
    if(mysql_numrows($risultato))
    {
    // estrazione dei risultati e stampa dei links ai files
    while ($tmp = mysql_fetch_array($risultato))
    {
    echo "<p><a href="mostra.php?id=$tmp[id_file]">$tmp[nome_file]</a></p>\n";
    }
    }
    else
    {
    echo '<p>Nessun file presente nel database</p>';
    }
    ?>

    QUESTA LA PAGINA mostra.php, che quando clicco su una voce dell' elenco (elenco.php), dovrebbe visualizzarmi l' immagine!

    <?php
    // connessione e selezione del database
    mysql_connect('localhost, 'user', 'passw')
    or die('Connessione non riuscita: ' . mysql_error());
    if(!mysql_select_db('nome 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 una intestazione contenente il tipo MIME
    header('Content-Type: '.$tmp['tipo_file']);
    // invio il contenuto del file
    echo $tmp['dati_file'];
    ?>

    Anzichè visualizzare l' immagine, visualizzo una serie di simboli con una stringa di errore:

    Warning: Cannot modify header information - headers already sent by (output started at /home/mhd-eccetera eccetera/mostra.php on line 12

    E la riga 12 sarebbe questa:

    header('Content-Type: '.$tmp['tipo_file']);

    Chi ha un pò di pazienza da potermi rispondere?
    Perchè non funziona? Dove sbaglio?

    Grazie in anticipo e un saluto a tutti!:gthi:


  • ModSenior

    Ciao pablitosway,

    l'errore viene dato poichè mandi un output prima della funzione header, controlla non vi siano caratteri come spazi all'inizio del file o echo.