- Home
- Categorie
- Coding e Sistemistica
- MYSQL e altri Database
- download di una immagine da Mysql
-
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
-
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.
-
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?
-
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 ?
-
Il "Cannot modify header....." l'ho risolto modificando php.ini mettendo* output_buffering = on*
Dopo proverò la tua soluzione e ti/vi farò sapere.
-
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?
-
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]
-
Funziona!!!!
Grazie infinite