files/immagini in MySQL

Salve a tutti,

ho letto con interesse l'articolo "Files ed immagini in MySQL" trovato sul vostro sito.

Ho provato a metterlo in pratica ma mi da questo errore:

Errore nella query:You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1

posto il codice (è quello prelevato dall'articolo che poi io ho adeguato al mio caso)<?php // connessione e selezione del database mysql_connect('localhost', 'utente_db', 'password_db') or die('Connessione non riuscita: ' . mysql_error());

if(!mysql_select_db('nome_database')) 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']; ?>

Spero che qualcuno possa darmi un consiglio

Ciao

inviato 10 anni fa
alice1
X 0 X

Scusate ho sbagliato a postare il codice

<?php 
$db_host="";
$db_user="";
$db_password="";
$db_database="";
$connessione=mysql_connect($db_host,$db_user,$db_password) or die ("Errore nella connessione al Mysql:" . mysql_error());
mysql_select_db($db_database,$connessione) or die ("Errore nella selezione del db:" . mysql_error());

$query='SELECT foto FROM Dettagli WHERE id=' . $_GET['id'];
$risultato=mysql_query($query,$connessione) or die ("Errore nella query:" . mysql_error()); 

$riga=mysql_fetch_array($risultato);
header('Content-Type: '.$riga['tipo_file']); 
echo $riga['dati_file']; 

?>

Non c'è molta differenza dal precedente, praticamente solo i contenuti della query, ma potrei comunque aver commesso degli errori

risposto 10 anni fa
alice1
X 0 X

prova così:

$query = "SELECT * FROM dettagli WHERE id_file = ".$_GET['id'];

//id_file : può essere che tu l'abbia chiamato in maniera diversa cmq è l'id della foto che hai inserito nella tabella dettagli

 :bye:

risposto 10 anni fa
stellina
X 0 X

Grazie della risposta,

ho provato il tuo suggerimento ma mi da sempre lo stesso errore

Errore nella query:You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1

(id_file io l'ho sostituito il nome del campo dell'id della mia tabella...dovrebbe essere giusto)

risposto 10 anni fa
alice1
X 0 X

scusa la domanda ma anche con i doppi apici ti da errore??

 :bye:

risposto 10 anni fa
stellina
X 0 X

Si mi da l'errore anche con gli apici doppi

risposto 10 anni fa
alice1
X 0 X

nell'url gli passi l'id del file?

risposto 10 anni fa
stellina
X 0 X

Scusami, probabilmente è colpa della mia incompetenza in materia (e un pò me ne vergogno), ma non ho capito cosa intendi dire.

Se può servire a qualcosa posto la pagina php (che funziona perfettamente) che mi crea il link a quella già postata (che non funziona)....Spero di essere stata chiara

<?php 
$db_host="";
$db_user="";
$db_password="";
$db_database="";
$connessione=mysql_connect($db_host,$db_user,$db_password) or die ("Errore nella connessione al Mysql:" . mysql_error());
mysql_select_db($db_database,$connessione) or die ("Errore nella selezione del db:" . mysql_error());

$query="SELECT provincia, comune, toponimo, sito, definizione, foto FROM Dettagli WHERE comune LIKE '%$_POST[comune]%'
AND provincia LIKE '%$_POST[provincia]%'
AND sito LIKE '%$_POST[sito]%'
AND definizione LIKE '%$_POST[definizione]%'
AND toponimo LIKE '%$_POST[toponimo]%' ";

$risultato=mysql_query($query,$connessione) or die ("Errore nella query:" . mysql_error()); 

while($riga=mysql_fetch_array($risultato))
{
print("<tr>");
print ("<td>$riga[provincia]</td>");
print ("<td>$riga[comune]</td>");
print ("<td>$riga[toponimo]</td>");
print ("<td>$riga[sito]</td>");
print ("<td>$riga[definizione]</td>");
print ("<td><a href=\"mostra.php?id=$riga[id]\">$riga[foto]</a></td>");
print ("</tr>");
}

Grazie della pazienza

risposto 10 anni fa
alice1
X 0 X

Attraverso $riga[id] tu passi il valore dell'id della foto che vuoi sia visualizzata mostra.php.

L'errore che ti compare è dovuto al fatto che non si sa quale valore attribuire $riga[id]

Hai notato se nell'indirizzo del browser c'è scritto solo http://www.tuosito.it/mostra.php?id=    senza alcun numero.

prova dopo la query della pagina che hai appena postato lanciare una stampa di $riga[id]

fammi sapere...

 :bye:

risposto 10 anni fa
stellina
X 0 X

Hai ragione nell'indirizzo del browser c'è proprio scritto solo http://www.tuosito.it/mostra.php?id=    senza alcun numero.

Ho anche provato a far stampare $riga[id] però non mi fa vedere nulla.....ma allora dove sbaglio?

Come faccio ad attribuire il valore a $riga[id]?

Anche perche nella pagina che mi crea il link (l'ultima postata)il valore ce l'ha, visto che mi riempe il campo

con il nome giusto,  è in mostra.php che non lo riconosce più.....

risposto 10 anni fa
alice1
X 0 X

Prova a cambiare seguendo queste istruzioni:

while($riga=mysql_fetch_array($risultato))

{

$provincia=htmlspecialchars($riga[provincia]);

$comune=htmlspecialchars($riga[comune]);

...stessa cosa per toponimo,sito,definizione e poi metti anche

$id=$riga['id'];

$foto =$riga['foto'];

eccc...

print("<tr>");

print ("<td>$provincia</td>");

print ("<td>$comune</td>");

print ("<td>$toponimo</td>");

print ("<td>$sito</td>");

print ("<td>$definizione</td>");

print ("<td><a href=\"mostra.php?id=$id\">$foto</a></td>");

print ("</tr>");

}

 :bye:

risposto 10 anni fa
stellina
X 0 X

Scrivendo il codice che mi hai postato e modificando la query di mostra.php da così

$query='SELECT foto FROM Dettagli WHERE id=' . $_GET['id'];

a così

$query="SELECT foto FROM Dettagli WHERE id='. $_POST[id]'";

sembra che si sia superato il problema visto che al posto del solito errore me ne da un altro relativo all'header contenente il tipo di MIME che io non ho specificato da nessuna parte perche le variabili che ho inserito sono state riprese dal codice dell'articolo e riguardano una pagina di upload che a me non serve e che di conseguenza non ho inserito tra le mie...dopo questo giuro che non romperò più le scatole...

questo è l'errore che mi da

Warning: Cannot modify header information - headers already sent by (output started at /home/mhd-01/www.space2place.org/htdocs/mostra.php:7) in /home/mhd-01/www.space2place.org/htdocs/mostra.php on line 41

e questa è la linea a cui si riferisce

header('Content-Type: '.$riga['tipo_file']); 
echo $riga['dati_file'];

come già detto $riga['tipo_file'] e $riga['dati_file'] le ho stupidamente ripresa dal codice senza attribuire loro  un valore da nessuna parte

risposto 10 anni fa
alice1
X 0 X

Nel tabella Dettagli del tuo DB devi assolutamente assegnare qulacosa a quei valori alrimenti non riuscirà a leggere la foto

.

All'interno di  tipo_file va inserita l'informazione sul tipo es. image/pjpeg vedi MIME TYPE

mentre dati_file deve contenere la foto (cioè tutti i dati che pemettono poi di ricostruire una foto piuttosto che un'altra.)

Quindi devi assicurarti che la procedura di inserimento riempia tutti i campi necessari alla visualizzazione della foto.

Per quanto riguarda la query perchè non prendi l'id con un get???

 :bye:

risposto 10 anni fa
stellina
X 0 X

Sono riuscita a risolvere il problema relativo al riconoscimento di $riga[id] nella pagina mostra.php, ora infatti nell'indirizzo del browser appare anche il numero di id (per esempio http://www.ilmiositi.it/mostra.php?id=1)

Rimane ancora un'ultima difficoltà....non riesco ancora a visualizzare l'immagine ma solo quella antipaticissima icona con la x.

Probabilmente manca quello che dovrebbe essere contenuto in [dati_file] del codice postato precedentemente, e che io ho sostituito con un tag html perchè non so assolutamente a cosa corrisponde.

Posto la mia pagina mostra.php

<?php 
header('Content-Type: image/pjpeg');
$db_host="";
$db_user="";
$db_password="";
$db_database="";
$connessione=mysql_connect($db_host,$db_user,$db_password) or die ("Errore nella connessione al Mysql:" . mysql_error());
mysql_select_db($db_database,$connessione) or die ("Errore nella selezione del db:" . mysql_error());
$query="SELECT foto FROM Dettagli WHERE id='. $_GET[id]'";

$risultato = mysql_query($query) or die('Query non valida: ' . mysql_error()); 
$riga = mysql_fetch_array($risultato);
echo "<img scr=\"$riga['foto']\"/>"; 
?>
risposto 10 anni fa
alice1
X 0 X

Ciao,

il problema non penso si trovi all'interno della pagina mostra.php o meglio stima la pagina com'era prima (dopo non serve più modificarla):

//parte di script relativa alla connessione al db e poi subito dopo:

$query = "SELECT * FROM dettagli WHERE id_file = ".$_GET['id']; 

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

$riga = mysql_fetch_array($risultato); 

// invio una intestazione contenente il tipo MIME 

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

// invio il contenuto del file 

echo $riga['dati_file'];

Per qunto riguarda l'icona con la x: come fai la funzione di inserimento della foto???

Credo stia li il problema, prova a postarla che verifichiamo...

 :bye:

risposto 10 anni fa
stellina
X 0 X

Forse il problema è proprio nel DB...io devo lavorare su un DB mysql che mi è stato consegnato con tutti i campi già compilati e nel quale non deve essere inserita nessuna nuova informazione. Il DB deve essere messo in rete soltanto per la consultazione da parte degli utenti.

Il campo foto contiene il percorso delle immagini (tutte in formato jpg) salvate in una cartella esterna al db. Quindi io non ho una query di inserimento delle immagini e quel echo $riga['dati_file']; (nell'articolo che ho consultato) viene recuperato proprio dalla fase di inserimento.....FORSE HO SBAGLIATO TUTTO !...a me servirebbe soltanto poter compiere delle ricerche sul DB e visualizzarne le immagini già presenti così come faccio con i campi testo.

risposto 10 anni fa
alice1
X 0 X

quindi nel db hai solo il percorso della foto che sta in una cartella.

La soluzione migliore sarebbe quella di leggere le immagini presenti nella cartella e poi importarle nel db. in questo modo potresti usare mostra.php per visualizzarle altrimenti....non saprei....   ??? 

Penso ci siano delle possibilità ma adesso non saprei bene che cosa consigliarti.

 :bye:

risposto 10 anni fa
stellina
X 0 X

Si il procedimento che mi suggerisci funzionerebbe senz'altro....ma le immagini sono 5000...

ti ringrazio davvero per la disponibilità e pazienza, se ti venisse in mente un'alternativa ricordati di me...intanto proverò a documentarmi un pò meglio

ciao

risposto 10 anni fa
alice1
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda