Newsgroup: it.comp.www.php
Titolo: rinominare un file

Ciao a tutti.
Sto cercando di realizzare un piccolo sito di annunci nei quali inserire
diversi prodotti con la foto.
Vorrei rinominare le foto, in modo da evitare che se due utenti mettono in
vendita due prodotti diversi ma con nome uguale la seconda foto sostituisca
la prima.
Come posso fare? Qualcuno di più esperto ha qualche idea?

 Come posso fare? Qualcuno di piy esperto ha qualche idea?
Salve le foto con un nome tipo $IDChiveDB . ".jpg" etc.
Saluti.

 Salve le foto con un nome tipo $IDChiveDB . ".jpg" etc.
 Saluti.
Scusami ma non capisco bene..il tuo consiglio sarebbe quello di creare una
tabella con due campi (id_foto, nome_foto) dove inserire le foto?

Cristiance wrote:

Devi fare un sito di annunci, giusto?
Per gli annunci ti appoggerai ad un DB, giusto?
Se per ogni annuncio permetti una sola immagine allora puoi utilizzare 
l'ID dell'annuncio per salvare il file immagine con la sciurezza che il 
nome utilizzato sara' unico sul filesystem.
Se vuoi permettere piu' immagini per ogni annuncio allora devi creare 
una tabella "tblImages" o simile dove "indicizzare" le foto, a quaesto 
punto utilizza la chiave primaria di questa tabella per salvare le 
immagini ful filesystem ed essere sicuro che questa siano univoche.
Saluti.

 immagini ful filesystem ed essere sicuro che questa siano univoche.
Ok, a questo avevo pensato pure io ma l'avevo scartata perchč pensavo fosse
irrealizzabile:
Come faccio a rinominare la foto 11.jpg quando nel db non l'ho ancora
salvata?
......
....
Alt! Forse ho capito. Potrei fare un query della "tblImages" e vedere l'id
piů alto (10 )e poi fare un'addizione +1 per nominare la foto.
Cosě avrň la foto di nome 11.jpg con id =11.
Ho capito bene?
Grazie!

 
secondo me cosě ti complichi la vita
ciao
Alesi_27

 record appena inserito.
Scusate ma io non capisco bene:
Se io prima inserisco il record nel db avrò si un id della foto ma il nome
sarà il nome della foto che ho caricato, no?
Per chiarirmi meglio le idee, mi postate, per favore, il pezzetto di codice?

ma con nome uguale la seconda foto sostituisca la prima.
Io metterei la foto sul DB, lontano dai limiti del file system :)

 
quando uploadi un file su un server puoi decidere tu che nome avrà, non 
sei obbligato a dargli il nome del file "originario".
A meno che non mi parli di upload tramite FTP, in questo caso tutto 
quello che ti è stato detto ha valore 0.
http://it.php.net/manual/it/function.is-uploaded-file.php
ciao
Alesi_27

Cristiance wrote:
guarda anche questo
http://it.php.net/manual/it/features.file-upload.php
ciao
Alesi_27

So che posso rinominare un file ed il mio upload non č tramite ftp.
Questo č il mio codice:
$realfile=$HTTP_POST_FILES['userfile']['tmp_name'];
       $realname=$HTTP_POST_FILES['userfile']['name'];
       copy ($realfile,"../images/prodotti/".$realname);
Quello che non capisco č come posso rinominare la foto con l'id se la query
con INSERT non č stata eseguita oppure se lo faccio dopo essere stata
eseguita rinominerei la foto, č cosě?
Ci sarebbe aanche un'altra ipotesi:
- eseguo la query di INSERT e salvo l'id
- interrompo la query di INSERT
- eseguo una query e leggo l'ultimo id
- salvo la foto con il numero dell'ultimo id

 Io metterei la foto sul DB, lontano dai limiti del file system :)
Comunque, dal momento che anch'io me ne sono dovuto rendere conto da solo
dei motivi per cui vale la pena delegare al DB la gestione delle immagini,
guadagnando dello schema relazionale, ti posto una soluzione al tuo problema
un po' brutale ma efficace che ho fatto qualche tempo fa...
Quantomeno non devi stravolgere il tuo script come invece passare alla
memorizzazione sul DB ti richiederebbe...
    $upload_dest = $_SERVER["DOCUMENT_ROOT"] . "/tuacartella/";
    $last = 0;  //inizializzo un contatore
    // modificare l'impostazione default per $sigla!
    $sigla = "IC2001";
    while (file_exists("$upload_dest" . "$sigla-$last" . ".jpg")) {
        $last++;
    } // while
    $new_name = "$sigla-$last" . ".jpg";
    // in questo caso il nuovo file si chiamerà IC2001-0 la prima volta
    // IC2001-1 la seconda e così via...
    if (@is_uploaded_file($_FILES["upload"]["tmp_name"])) {
        @move_uploaded_file($_FILES["upload"]["tmp_name"], "$upload_dest" .
"$new_name")
        or die("Impossibile spostare il file, controllare l'esistenza o i
permessi della directory dove fare l'upload: " . $upload_dest);
    } else {
        die("Problemi nell'upload del file " . $_FILES["upload"]["name"]);
    }
Naturalmente poi salvati $upload_dest.$new_name nel record dell'annuncio!
Spero di esserti stato di aiuto,
DkS

 - salvo la foto con il numero dell'ultimo id
senti qui:
supponiamo che il tuo prodotto abbia un nome e un codice di magazzino 
memorizzati in
$nome
$cod_mag
la tabella che abbiamo in mysql è del tipo:
TABLE PRODOTTI {
   codice,   auto_increment;
   nome,     varchar[10];
   cod_mag,  varchar[10];
}
(ipotizzo, serve giusto a semplificare il concetto)
In questa tabella a cosa ti serve il riferimento al file della foto ? Ti 
rispondo io: non ti serve a nulla perchè tu sai che la foto (se esiste) 
sarà in images/prodotti e avrà come nomefile CODICE.JPG ovvero il codice 
autoincrementante della tabella.
a questo punto esegui la insert del prodotto
INSERT INTO PRODOTTI VALUES ('',$nome,$cod_mag);
dopo l'inserimento devi ricavarti il codice autoincrementante del 
prodotto (ci sono modi per ottenerlo direttamente ma siccome non mi 
ricordo...) esegui una query di questo tipo:
select codice from prodotti where nome='$nome' and cod_mag='$cod_mag';
poi, ipotizzando che questo codice lo metti in $cod, esegui la tua
copy ($realfile,"../images/prodotti/".$cod.".jpg");
quando dovrai accedere ad una foto sarà sufficiente avere il codice, 
dopodichè sai che la foto di chiama "../images/prodotti/".$cod.".JPG", 
questo è il motivo per cui non hai necessità di ricordare nel DB il 
riferimento ad essa.
In alternativa a tutto ciò, puoi inserire il file della foto 
direttamente nel DB come campo BLOB. Se cerchi tra i post passati di 
questo NG c'era un riferimento ad un tutorial molto esaustivo 
sull'argomento (mi sembra che il post fosse di punkarruso, ma non vorrei 
  dare/togliere meriti, potrei sbagliarmi)
ciao
Alesi_27

Grazie alesi_27, il mio problema è che non posso correre il rischio di far
nominare le foto all'utente ma tale prodotto non ce l'ho nemmeno io in
magazzino soprattutto perchè il magazziono non esiste.
Il sito è un sito di annuci tipo vendo/compro usato e non so che cellulare
vederà Tizio piuttosto che Caio. Comunque credo di aver risolto con lo
script di Darkkside.
Grazie a tutti per la collaborazione.