Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente bannato
    Registrato dal
    Nov 2007
    residenza
    Acicatena (Catania)
    Messaggi
    1,854

    Rinoma in move_uploaded_file

    Ciao ragazzi...
    ho un piccolo problemino con il seguente codice: sto realizzando un form per permettere di caricare file con qualunque estensione.
    Ovviamente per evitare che due utente caricano file con nomi uguali li rinomino tramite una variabile $cont che praticamente è l'ultimo ID presente nella tabella incrementato di 1.

    Il codice è:
    codice:
    		//Prelevo ultimo ID
    		$a=mysql_query("SELECT id FROM documentazione order by id DESC LIMIT 1");
    		$result1=mysql_fetch_array($a);
    
    		$cont=$result1[0]+1;
    		
    		$cartella = "documenti/";
    		
    	//Inserimento 1 allegato
            if (!empty($_FILES['allegato1']['name'])){
    	// RECUPERO I PARAMETRI DA PASSARE ALLA FUNZIONE PREDEFINITA PER L'UPLOAD
    		$percorso = $_FILES['allegato1']['tmp_name'];
    	        $nome = $cont . $_FILES['allegato1']['name'];
    		$nome2=$_FILES['allegato1']['name'];
    			
    		$allegato1 =  $cartella . $nome;
    				
    		        // ESEGUO L'UPLOAD CONTROLLANDO L'ESITO
    			if (move_uploaded_file($percorso, $allegato1)){
            			print "Carimento di - $nome2 - eseguito con successo";
    			} else  {
    				print "Si sono verificati dei problemi durante il caricamento di - $nome2 -";
    			}
    			} else {
    					$allegato1="";
    			}
    Se su $nome inserisco $cont l'upload non va nulla, se lo rimuovo l'upload nella cartella e l'inserimento del percorso in db è ok.

    Come posso risolvere?

    Grazie!

  2. #2
    Utente di HTML.it L'avatar di telegio
    Registrato dal
    Sep 2001
    Messaggi
    2,591
    non sono espertissimo di upload.. ma in realtà non stai affatto rinominando il file che carichi.. rinomini solo il temp, se non ho capito male, e non so se puoi farlo..
    la variabile $nome è ok, ma non stai rinominando il file, stai solo rinominando una variabile che utilizzi con un nome nuovo, ma ovviamente il file si chiama in altro modo e non lo trova se aggiungi $cont.
    cioè manca proprio la funzione rename
    dovresti fare in maniera diversa, ma non ho sotto mano esempi per aiutarti e a memoria sbaglierei di sicuro. la logica dovrebbe essere che se un file esiste lo rinomini, poi in caso inserisci il nome nel DB. se invece non esiste lo lasci così.
    Io in questi casi, per semplificare e con alcuni clienti, rinomino tutto con l'id, come fai tu col contatore. lasciando l'estensione originale così avrà nel DB
    id nome
    1 1.pdf
    2 2.jpg
    3 3.pdf
    al massimo se si cancella un file sfalza tipo
    1 1.pdf
    2 2.jpg
    4 3.pdf

    e dico al cliente di non uploadare file che abbiano solo un numero con l'estensione.
    in casi più complessi potresti utilizzare un numero random da 8-10 cifre in modo da rinominare il file con una sequenza numerica.
    per ora ti saluto

  3. #3
    Utente bannato
    Registrato dal
    Nov 2007
    residenza
    Acicatena (Catania)
    Messaggi
    1,854
    ma non basta aggiungere solo la variabile $cont prima del nome?

    Se devo usar la funzione rename devo farla su $_FILES['allegato1']['tmp_name']; oppure su $nome = $_FILES['allegato1']['name'];?

    Grazie!

  4. #4
    Utente di HTML.it L'avatar di telegio
    Registrato dal
    Sep 2001
    Messaggi
    2,591
    Originariamente inviato da Felino
    ma non basta aggiungere solo la variabile $cont prima del nome?

    Se devo usar la funzione rename devo farla su $_FILES['allegato1']['tmp_name']; oppure su $nome = $_FILES['allegato1']['name'];?

    Grazie!
    non basta sennò la funzione rename sarebbe completamente inutile..
    la funzione rename la devi usare una volta che il file è stato caricato. DOPO move_uploaded_file.
    una cosa tipo (vado a memoria)
    Codice PHP:
    $tipofile $_FILES['allegato1']['type'];
    iif (move_uploaded_file($percorso$allegato1)){
                        print 
    "Carimento di - $nome2 - eseguito con successo";
                } else  {
                    print 
    "Si sono verificati dei problemi durante il caricamento di - $nome2 -";
                }
                } else {
                        
    $allegato1="";
                }
    if(
    file_exists($allegato1)) {
    rename($cartella."/"$nome$cartella."/"$nuovonome "." $tipofile); //$cartella senza la var $cont!!! 

    oppure
    Codice PHP:
    rename($cartella."/"$nome$cartella."/"$nuovonome "_" $nome); //qua nuovonome lo !!! 
    una roba simile.. fammi sapere..

  5. #5
    Utente bannato
    Registrato dal
    Nov 2007
    residenza
    Acicatena (Catania)
    Messaggi
    1,854
    Ma così mi andrà a modificare solo il valore nella cartella, no?

  6. #6
    Utente di HTML.it L'avatar di telegio
    Registrato dal
    Sep 2001
    Messaggi
    2,591
    ..ovvio che l'inserimento del nome nel DB deve essere successivo alla rinomina del file.. ma i valori li hai, quindi non è complicato da fare.. o sì?

  7. #7
    Utente bannato
    Registrato dal
    Nov 2007
    residenza
    Acicatena (Catania)
    Messaggi
    1,854
    Alla fine il codice l'ho sistemato così:

    Codice PHP:
            //Prelevo ultimo ID
            
    $a=mysql_query("SELECT id FROM documentazione order by id DESC LIMIT 1");
            
    $result1=mysql_fetch_array($a);
            
            
    $cont=$result1[0]+1;
                
                
    $cartella "documenti/";
            

            
    //Inserimento 1 allegato
                    
    if (!empty($_FILES['allegato1']['name'])){
                
    // RECUPERO I PARAMETRI DA PASSARE ALLA FUNZIONE PREDEFINITA PER L'UPLOAD
            
    $percorso $_FILES['allegato1']['tmp_name'];
            
    $nome $_FILES['allegato1']['name'];
            
    $nome2=$_FILES['allegato1']['name'];
                                            
            
    $allegato1 =  $cartella$nome;
                    
            
    $tipofile $_FILES['allegato1']['type']; 
            
    // ESEGUO L'UPLOAD CONTROLLANDO L'ESITO
            
    if (move_uploaded_file($percorso$allegato1)){
                          print 
    "Carimento di - $nome2 - eseguito con successo";
                    } else  {
                          print 
    "Si sono verificati dei problemi durante il caricamento di - $nome2 -";
                }
                         if(
    file_exists($allegato1)){
                    
    rename($cartella."/"$nome$cartella."/"$cont$nome);
                    
    $allegato1$cartella $cont$nome;
                    echo 
    "file esiste!
    "
    ;
                  }
             } else {
                  
    $allegato1="";
                } 
    Praticamente...salvo il file, dopo controllo se esiste...e lo rinomino tramite rename e l'associazione a $allegato1 e invece se non ho caricato nulla setto la variabile a nullo.

    Però sapete cosa succede?
    Carico il file e nel db viene salvato senza essere rinominato mentre nella cartella documenti non salva nulla!

    Se poi ricarico la stessa pagina F5, oppure ricarico lo stesso file, forse lui lo trova nella cartella dei file temporanei e mi dice che esiste e lo salva rinominato sia nel db che nella cartella documenti.

    Come mai?

  8. #8
    Utente bannato
    Registrato dal
    Nov 2007
    residenza
    Acicatena (Catania)
    Messaggi
    1,854
    Non cambia nulla neanche se il controllo se il file esiste lo faccio prima del caricamento...

  9. #9
    Utente di HTML.it L'avatar di telegio
    Registrato dal
    Sep 2001
    Messaggi
    2,591
    Originariamente inviato da Felino
    Però sapete cosa succede?
    Carico il file e nel db viene salvato senza essere rinominato mentre nella cartella documenti non salva nulla!

    Se poi ricarico la stessa pagina F5, oppure ricarico lo stesso file, forse lui lo trova nella cartella dei file temporanei e mi dice che esiste e lo salva rinominato sia nel db che nella cartella documenti.

    Come mai?
    c'è un errore di procedura in effetti.. facendo le cose con i piedi non poteva che venire male..
    in effetti se il controllo che il file esiste lo fai DOPO l'upload questa regola fa a farsi benedire
    If the destination file already exists, it will be overwritten.
    in pratica dovresti farlo prima e non far caricare il file, per non farlo sovrascrivere..

    ma se fai solo questa

    Codice PHP:
    //Prelevo ultimo ID
            
    $a=mysql_query("SELECT id FROM documentazione order by id DESC LIMIT 1");
            
    $result1=mysql_fetch_array($a);
            
            
    $cont=$result1[0]+1;
                
                
    $cartella "documenti/";
            

            
    //Inserimento 1 allegato
                    
    if (!empty($_FILES['allegato1']['name'])){
                
    // RECUPERO I PARAMETRI DA PASSARE ALLA FUNZIONE PREDEFINITA PER L'UPLOAD
            
    $percorso $_FILES['allegato1']['tmp_name'];
            
    $nome $_FILES['allegato1']['name'];
            
    $nome2=$_FILES['allegato1']['name'];
                                            
            
    $allegato1 =  $cartella$nome;
                    
            
    $tipofile $_FILES['allegato1']['type'];
            
    // ESEGUO L'UPLOAD CONTROLLANDO L'ESITO
            
    if (move_uploaded_file($percorso$allegato1)){
                          print 
    "Carimento di - $nome2 - eseguito con successo";
                    } else  {
                          print 
    "Si sono verificati dei problemi durante il caricamento di - $nome2 -";
                } 
    ti dice che lo carica il file o no?

  10. #10
    Utente bannato
    Registrato dal
    Nov 2007
    residenza
    Acicatena (Catania)
    Messaggi
    1,854
    Infatti la funziona l'ho postata anche prima...ma niente!

    Inserendo il codice, senza controllo dell'esistenza del file sul server, l'inserimento lo fa tranquillamente...allora è la funziona file_exists che da errore? Non è fatta correttamente?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.