Topic: Pubblico
- Composto da 10 Posts di 2 Utenti.
|
22 Agosto, 2011 16:38
|
#1
|
barbara90
Utente
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
Registrato: Aug, 2011
Posts: 86
Offline
|
Cosa non riesci a fare esattamente?
|
|
22 Agosto, 2011 18:19
|
#3
|
barbara90
Utente
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
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.
|
|
23 Agosto, 2011 10:18
|
#5
|
barbara90
Utente
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
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)){ ?>
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
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
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
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
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
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