• User

    download di una immagine da Mysql

    Ciao a tutti,
    ho letto i post relativi al mio problema, ma sigh non ho trovato la soluzione.

    Ho memorizzato una immagine jpg in una tabella mysql utilizzando i vari tutorial prsenti in rete e anche nel forum 🙂
    Questa immagine dovrebbe poi essere prelevata ed inserita insieme ad altre informazioni in una tabella.
    Il problema è che se utilizzo lo script del tutorial l'mmagine viene mostrata, mettendo lo stesso pezzo di codice nel mio scripo ottengo

    **"The image ........./comments.php cannot be displayed because it contains errors." **
    (ho dovuto sostituire il link con dei puntini perchè non essendo un utente premium non posso farlo)

    Il file comments.php contiene il mio script e viene lanciato cliccando su di un form appartenente ad un altro script. Se non mostro immagini prelevate dal db tutto funziona correttamente.

    Anyway... il codice del tutorial è il seguente

    <?php
    $db = mysqli_connect($db_host,$db_user, $db_password) or die('Connessione a MySql fallita. Controllare i dati di configurazione: ' . mysqli_connect_error($db));
    mysqli_select_db($db,$db_name) or die('Selezione del DB fallita. Controllare il nome del DataBase: ' . mysqli_error($db));
     
    $result = mysqli_query($db, "SELECT * FROM $db_table WHERE idx = 1 " ) or die("Invalid query: " . mysql_error($db));
            
    while ($row = mysqli_fetch_array($result))
    { 
            $filename = $row['filename'];
            $filesize = $row;        
            // set the header for the image
            header("Content-type:". $row['mimetype']);
            echo $datafile = $row['datafile'];
            
    } 
    mysqli_close($db);
    ?>
    

    mentre il mio script è il seguente

    <?php
    
    echo "<br />
    <br />
    
    <fieldset>
    <legend>Dati del libro</legend>
    <br />
    <div style='height: 570px; overflow-y: scroll; '>    
    <table cellspacing = '0' cellpadding = '6' summary ='doing' width = '90%'>";
    
    $z_index = $_POST['index'];
    
    
    $db = mysqli_connect($db_host,$db_user, $db_password) or die('Connessione a MySql fallita. Controllare i dati di configurazione: ' . mysqli_connect_error($db));
    mysqli_select_db($db,$db_name) or die('Selezione del DB fallita. Controllare il nome del DataBase: ' . mysqli_error($db));
    
    /**** Searching for the cover *****/ 
    
    $db_table = 'cover';
    $result = mysqli_query($db,"SELECT * FROM $db_table WHERE idx = '$z_index' ");
    $row_cnt = mysqli_num_rows($result);
    if ($row_cnt != '0')
    {
    while ($row = mysqli_fetch_array($result))
    {
    header("Content-type:".$row['mimetype']);
    echo $row['datafile'];
    
    }
    
    }
    /********/
    .......
    resto dello script
    ?>
    

    Ho modificato php.ini mettendo output_buffering = on altrimenti ottengo *Warning: Cannot modify header information - headers already sent by (output started at xxxxxxxxxxxxxx) *

    Originariamente il file comments.php conteneva tutti gli header di html ma li ho eliminati per vedere se il problema era dovuto a quello

    Spero di non aver fatto troppa confusione 🙂

    Grazie fin da ora per ogni suggerimento


  • User Attivo

    Credo ti convenga usare un tag <img> che richiami lo script php che invia su out solo l'immagine, nel modo che fai assieme all'immagine invii anche del testo e credo dia molto fastidio al browser.


  • User

    Puoi suggerirmi come fare?
    Cmq... quello che mi fa impazzire è perchè con uno script funziona e con l'altro no. Può dipendere dal fatto che uno lo lancio direttamente da localhost mentre l'altro viene richiamato da un form?


  • User Newbie

    Ciao,
    Nel secondo caso ti dava l errore ' Cannot modify header information - headers already sent by (output started at xxxxxxxxxxxxxx) ' perchè hai stampato qualcosa e dopo la stampa hai cercato di modificare l intestazione della risposta con header(...).

    una soluzione potrebbe essere quella di utilizzare 2 script diversi, uno per recuperare la tabella e uno per recuperare l immagine.
    Nel punto della tabella in cui va l immagine metti:
    <img src="url-script-immagine.php />

    Spero di esser stata chiara ?


  • User

    Il "Cannot modify header....." l'ho risolto modificando php.ini mettendo* output_buffering = on*
    Dopo proverò la tua soluzione e ti/vi farò sapere.


  • User

    Eccomi qua purtroppo con notizie non positive ma sempre migliori di ieri 🙂
    Ho modificato lo script come suggeritomi

    
    $result = mysqli_query($db,"SELECT * FROM $db_table WHERE idx = '$z_index' ");
    $row_cnt = mysqli_num_rows($result);
    if ($row_cnt != '0')
    {
    while ($row = mysqli_fetch_array($result))
    {
    ***echo"<a href='comments.php?imageid=<?php echo $row[id]?>'><img src='<?php echo $row[datafile]?>' /></a>";***
    }
    }
    

    Non ho errori ma anzichè vedere l'immagine vedo il contenuto di datafile aka geroglifici.

    Qualche idea?


  • User Attivo

    Geroglifici... perché è in binario. Nell'SRC o metti un URL, oppure metti una coppia di chiavi-valori che specifica mimetype e contenuto in base64.

    Quindi il tuo echo diventa:

    [php]
    echo "<a href='comments.php?imageid=".$row[id]."'><img src='data:".$row[mimetype].";base64,".base64_encode($row[datafile])."' /></a>";
    [/php]


  • User

    Funziona!!!!
    Grazie infinite