immagini php/mysql | PHP

Topic: Pubblico - Composto da 10 Posts di 2 Utenti.

22 Agosto, 2011 16:38 #1
barbara90
Utente

barbara90
Registrato: Aug, 2011
Posts: 6
Offline

Salve,
sono una programmatrice autodidatta o almeno ci provo.
Ho terminato da poco un corso di specializzazione web in ambito PHP.
Mi rivolgo a voi in quanto ho riscontrato delle difficoltà nella realizzazione di uno script PHP/MYSQL.
Devo realizzare per un'azienda uno script in PHP che permetta di scaricare via web delle immagini jpeg e salvarle sul filesystem del server.
Le immagini originali devono essere scaricate da una serie di url che dovranno essere pre-memorizzate in una tabella mysql che conterrà oltre all’url,il nome e la data di ultimo scaricamento ed un flag che contenga lo stato dell’operazione di download e resize (OK / KO).
Il mio problema sorge appunto nella creazione della tabella,come faccio a memorizzare l'url dell'immagine?
Grazie per l'attenzione.
Barbara

22 Agosto, 2011 17:08 #2
fuser
Utente

fuser
Registrato: Aug, 2011
Posts: 86
Offline

Cosa non riesci a fare esattamente?

22 Agosto, 2011 18:19 #3
barbara90
Utente

barbara90
Registrato: Aug, 2011
Posts: 6
Offline

Vorrei sapere come fare a memorizzare le immagini in una tabella mysql e come utilizzare url stesso precedente memorizzato per permettere il download delle immagini.
Io prendendo spunto su internet l'avevo pensata così:
tabella immagini con i seguenti campi : id,type,size,immagine dove l'id è primary key auto increment,type e size varchar e l'immagine di tipo blob.
In questo modo però riesco a fare l'upload di immagini che io precedentemente ho scaricato e salvato in una cartella del mio progetto,se carico immagini presenti in altre cartelle mi da impossibile effettuare il download.
Poi mi sono creata le seguenti pagine:
HOME.PHP dove c'è il form html per l'upload,
UPLOADFOTO.PHP dove creo la funzione per l'upload e faccio l'inserimento in tabella tramite query sql(questo file è incluso nell'home.php insieme al file di connessione al db),
MOSTRAFOTO.PHP dove mostro l'immagine della foto selezionata e dove vorrei creare il download,
VISUALIZZAFOTO.PHP che mi visualizza tutto il contenuto della tabella.
Spero di essere stata chiara.
Grazie

22 Agosto, 2011 22:12 #4
fuser
Utente

fuser
Registrato: Aug, 2011
Posts: 86
Offline

Ma io direi che mettendo l'immagine nel database ti complichi la vita, perchè poi per mostrarla dovresti chiamare uno script che fa la query e restituisce l'immagine in output.
Mettile in una apposita cartella, così salterai questo passaggio. Se type può valere jpg || png || gif, puoi caricare il file rinominandolo:
UPLOAD_DIR . '/' . $id . '.' . $type.
A questo punto, nella tabella avrai bisogno solo di id, type e size.
Spero di essere stato chiaro, se hai bisogno di chiarimenti dimmi pure.







      







Visualizza foto
";
?>
UPLOADFOTO.PHP
/*mi creo la funzione che eseguirà l'upload delle immagini in tabella,con @is_uploaded_file verifico che l'upload sia avvenuto correttamente mentre con $_FILES variabile superglobale recupero le informazioni sul file inviato tramite form
*/
function upload()
{
$result = false;
$immagine = '';
$size = 0;
$type = '';
$nome = '';
$max_size = 300000;
$result = @is_uploaded_file($_FILES['file']['tmp_name']);
if (!$result)
{
echo "Impossibile eseguire l'upload.";
return false;
}
else
{
$size = $_FILES['file']['size'];
if ($size > $max_size)
{
echo "Il file è troppo grande.";
return false;
}
$type = $_FILES['file']['type'];
$nome = $_FILES['file']['name'];
$immagine = file_get_contents($_FILES['file']['tmp_name']);
$immagine = addslashes ($immagine);

//eseguo la query sql che mi inserirà i files in tabella

$sql = "INSERT INTO Immagini (Id , Nome, Size, Type, Immagine) VALUES ('','$nome','$size','$type','$immagine')";
$result = mysql_query ($sql) or die (mysql_error());
return true;
}
}
?>
VISUALIZZAFOTO.PHP

$query = "Select Id,Nome,Immagine from Immagini where Id=".$_REQUEST['Id'];
$rs = mysql_query($query,$dbConn);
while($row = mysql_fetch_array($rs)){
?>
23 Agosto, 2011 10:18 #5
barbara90
Utente

barbara90
Registrato: Aug, 2011
Posts: 6
Offline

Purtroppo sono alle prime con il php,
e non mi è molto chiaro ciò che mi stai spiegando.
Per darti un'idea ti posto un po' di codice,così magari mi puoi dare una mano:
HOME.PHP
/* verifico che esista il file,
* lancio la funzione upload creata precedentemente
* che è stata inclusa nella mia pagina php e infine
* creo il form html per effettuare l'upload.
* tramite il link sottostante vado alla pagina che
* mi farà visualizzare i files memorizzati in tabella
*/
if (isset($_FILES['file']))
{
upload();
}
echo "

Selezionare un'immagine da memorizzare nel database




Immagine :













Id

Nome

Immagine


}
mysql_close();
?>
MOSTRAFOTO.PHP
if (isset($_GET['id']))
{
$id = @intval($_GET['id']);

$sql = "SELECT Id,Type,Immagine FROM Immagini WHERE Id='$id'";
$result = @mysql_query($sql) or die(mysql_error ());
$row = @mysql_fetch_array($result);
$id_img = $row['Id'];
$type = $row['Type'];
$img = $row['Immagine'];
if (!$id_img)
{
echo "Id sconosciuto";
}
else{
@header ("Content-type: ".$type);
echo $img;
}
}
else{
echo "Impossibile soddisfare la richiesta.";
}
?>
Questo è il codice,solo che in questo modo posso fare l'upload solo delle immagini contenute nella cartella che è salvata nel mio progetto,se provo a caricare altre foto presenti in cartelle diverse non mi fa l'upload.
Grazie in anticipo

23 Agosto, 2011 10:21 #6
barbara90
Utente

barbara90
Registrato: Aug, 2011
Posts: 6
Offline

Cavolo,ho fatto copia/incolla ma è andato oltre lo spazio,spero che riesci a capire cosa intendo fare.

23 Agosto, 2011 11:29 #7
fuser
Utente

fuser
Registrato: Aug, 2011
Posts: 86
Offline

Argh! A quanto pare l'HTML viene visualizzato così com'è, in questo forum :)
Il tuo è un problema di permessi. E' normale che PHP non possa scrivere file in qualsiasi cartella, altrimenti uno script "malintenzionato" potrebbe fare dei danni.
Per cambiare i permessi su una cartella (se sei su Linux) usa chmod:
http://catcode.com/teachmod/
Anche se sei in hosting dovresti poterlo fare.
Altrimenti contatta l'amministratore.

23 Agosto, 2011 11:43 #8
barbara90
Utente

barbara90
Registrato: Aug, 2011
Posts: 6
Offline

L'ho notato solamente ora XD!
Si uso ubuntu 11.04,provo a fare come dici tu.
Grazie

23 Agosto, 2011 15:54 #9
fuser
Utente

fuser
Registrato: Aug, 2011
Posts: 86
Offline

Qui forse è più chiaro:
https://help.ubuntu.com/community/FilePermissions

Comunque questo dovrebbe andar bene:

1chmod -Rv 0755 tua_cartella

Ricorda di fare i controlli sulle dimensioni del file (filesize()) e sulle dimensioni dell'immagine (getimagesize()).
Puoi mettere anche questo nell'HTML, che evita all'utente di perdere tempo cercando di caricare file troppo grandi, ma il controllo PHP ci va comunque:

1< input type="hidden" name="MAX_FILE_SIZE" value="100000" />

23 Agosto, 2011 18:45 #10
barbara90
Utente

barbara90
Registrato: Aug, 2011
Posts: 6
Offline

Ti ringrazio,
ora il problema è che mi visualizza il codice binario al posto dell'immagine,sai per caso dirmi a cosa è dovuto?

Condividi su:

Loggati o Registrati per replicare