Fare upload di file scegliendo la cartella di destinazione

  • Creatore Discussione Creatore Discussione Max61
  • Data di inizio Data di inizio

Max61

Utente Attivo
2 Mar 2014
760
4
18
Salve sto utilizzando questo codice per importare un file pdf nella cartella di nome 'Delibere' nel server
Mi chiedevo se fosse possibile nella fase di upload scegliere la cartella di destinazione di volta in volta che eseguo l'upload.
Allego codice utilizzato per l'upload

PHP:
// settiamo alcune variabili coinvolte nello script:  

$cartella_upload = $_SERVER['DOCUMENT_ROOT'].'/ArchivioToponomastica/views/Delibere/';
 
// 2) settiamo un array in cui indichiamo il tipo di file che consentiamo l'upload  
$tipi_consentiti = array("xls","xlsx","doc","docx","pdf");   
    
// 3) settiamo la dimensione massima del file 
$max_byte = 10000;  
  
  
// se il form è stato inviato  
if(isset($_POST['up']) and isset($_FILES["upload"]))  
   {  
   // verifichiamo che l'utente abbia selezionato un file  
   if(trim($_FILES["upload"]["name"]) == '')  
      {  
      echo 'Non hai selezionato nessun file!';  
      }  
  
   // verifichiamo che il file è stato caricato  
   else if(!is_uploaded_file($_FILES["upload"]["tmp_name"]) or $_FILES["upload"]["error"]>0)  
      {  
      echo 'Si sono verificati problemi nella procedura di upload!';  
      }  
  
   // verifichiamo che il tipo è fra quelli consentiti  
   else if(!in_array(strtolower(end(explode('.', $_FILES["upload"]["name"]))),$tipi_consentiti))  
      {  
      echo 'Il file che si desidera uplodare non è fra i tipi consentiti!';  
      }  
  
   // verifichiamo che la dimensione del file non eccede quella massima  
   else if($_FILES["upload"]["size"] > $max_byte)  
      {  
      echo 'Il file che si desidera uplodare eccede la dimensione massima!';  
      }  
      
    // verifichiamo che la cartella di destinazione settata esista  
    else if(!is_dir($cartella_upload))  
        {  
        echo 'La cartella in cui si desidera salvare il file non esiste!';  
        }  
      
    // verifichiamo che la cartella di destinazione abbia i permessi di scrittura  
    else if(!is_writable($cartella_upload))  
        {  
        echo "La cartella in cui fare l'upload non ha i permessi!";  
        }  
   // verifichiamo il successo della procedura di upload nella cartella settata  
   else if(!move_uploaded_file($_FILES["upload"]["tmp_name"], $cartella_upload.$_FILES["upload"]["name"]))  
      {  
      echo 'Ops qualcosa è andato storto nella procedura di upload!';  
      }  
  
   // altrimenti significa che è andato tutto ok  
   else  
      { 
	  echo "<h1><span style=\"color:red; font-size: 16pt\"> Upload eseguito correttamente! </h1></span><br>"; 
	  //echo 'Upload eseguito correttamente!';  
      }  
   }

Grazie anticipato a chi saprà aiutarmi
Max61
 
Puoi provare utilizzando la select

Inviato dal mio XT1068 utilizzando Tapatalk
 
per esempio nel form potresti inserire questa select in modo tale da scegliere la directory che ti interessa
HTML:
<select name="directory">
   <option value="directory1">directory1</option>
   <option value="directory2">directory2</option>
   <option value="directory3">directory3</option>
</select>

..altrimenti sempre nel form puoi mettere un input cosi ogni volta che fai l'upload scrivi in quale directory deve salvarsi il file
HTML:
<input type="text" name="directory" />

quindi nel php devi modificare la seguente stringa da :
PHP:
// settiamo alcune variabili coinvolte nello script:  

$cartella_upload = $_SERVER['DOCUMENT_ROOT'].'/ArchivioToponomastica/views/Delibere/';

a

PHP:
if isset($_POST['directory']) {
  $directory = $_POST['directory'];
}

$cartella_upload = $_SERVER['DOCUMENT_ROOT'].'/ArchivioToponomastica/views/'.$directory.'/';
 
per esempio nel form potresti inserire questa select in modo tale da scegliere la directory che ti interessa
HTML:
<select name="directory">
   <option value="directory1">directory1</option>
   <option value="directory2">directory2</option>
   <option value="directory3">directory3</option>
</select>

..altrimenti sempre nel form puoi mettere un input cosi ogni volta che fai l'upload scrivi in quale directory deve salvarsi il file
HTML:
<input type="text" name="directory" />

quindi nel php devi modificare la seguente stringa da :
PHP:
// settiamo alcune variabili coinvolte nello script:  

$cartella_upload = $_SERVER['DOCUMENT_ROOT'].'/ArchivioToponomastica/views/Delibere/';

a

PHP:
if isset($_POST['directory']) {
  $directory = $_POST['directory'];
}

$cartella_upload = $_SERVER['DOCUMENT_ROOT'].'/ArchivioToponomastica/views/'.$directory.'/';


Ciao e grazie per le dritte, ma cerco di spiegarti cosa vorrei fare:
ARCHIVIAZIONE DIGITALE TRAMITE SCANNERIZZAZIONE DI DOCUMENTI CHE SONO ALL'INTERNO DI FALDONI
Il programma è fatto e mi rimane da fare la parte dell'importazione nel server dei documenti scannerizzati, in questa fase utilizzo 3 form: form insert dati a video, form inserisci nel db e form upload file
Io avevo pensato di fare una cosa del genere
nella form insert l'utente digita tra gli altri 3 campi 'ARMADIO' 'PIANO' e 'FALDONE' di cui recupero i valori per la creazione della cartella che conterrà la documentazione scannerizzata e con questo codice
PHP:
//CREA CARTELLA NEL SERVER CON IL NOME DI: ARMADIO-PIANO-FALDONE 
$path="Delibere/"."Delibere Armadio ". $_POST['armadio']."-Piano ". $_POST['piano']."-Faldone ". $_POST['faldone']."-Faldone ". $_POST['ex_statistica']; 
mkdir("$path",0777);
creo la cartella con il nome univoco ARMADIO-PIANO-FALDONE (es. 1-A-1, 1-A-2, 1-A-3 ecc.) e così per ogni faldone che archivio.
Quindi arrivo alla form upload file con la quale vorrei andare a selezionare i file che fanno parte di quel faldone ed archiviarli nella cartella appena creata con l'insert e tramite comando
PHP:
<input type="submit" value="Apri cartella">
visualizzare tutta la documentazione all'interno del faldone senza dover andare a cercare nell'archivio cartaceo.
Quindi la tua idea è buona però dovrei recuperare il nome della cartella che viene creata al momento dell'inserimento nel db.
In conclusione dovrei fare una select che mi recuperi il percorso della cartella appena creta e me lo salvi nel db così da recuperare i dati velocemente.

Ho provato il tuo codice, mi da questo errore
Parse error: syntax error, unexpected 'isset' (T_ISSET), expecting '(' in C:\xampp\htdocs\ArchivioToponomastica\views\UploadDelibere.php on line 68
il rigo con l'errore è questo
PHP:
if isset($_POST['directory']) {

Con la speranza di essermi spiegato
Max61
 
Ultima modifica:
Ciao e grazie per le dritte, ma cerco di spiegarti cosa vorrei fare:
ARCHIVIAZIONE DIGITALE TRAMITE SCANNERIZZAZIONE DI DOCUMENTI CHE SONO ALL'INTERNO DI FALDONI
Il programma è fatto e mi rimane da fare la parte dell'importazione nel server dei documenti scannerizzati, in questa fase utilizzo 3 form: form insert dati a video, form inserisci nel db e form upload file
Io avevo pensato di fare una cosa del genere
nella form insert l'utente digita tra gli altri 3 campi 'ARMADIO' 'PIANO' e 'FALDONE' di cui recupero i valori per la creazione della cartella che conterrà la documentazione scannerizzata e con questo codice
PHP:
//CREA CARTELLA NEL SERVER CON IL NOME DI: ARMADIO-PIANO-FALDONE 
$path="Delibere/"."Delibere Armadio ". $_POST['armadio']."-Piano ". $_POST['piano']."-Faldone ". $_POST['faldone']."-Faldone ". $_POST['ex_statistica']; 
mkdir("$path",0777);
creo la cartella con il nome univoco ARMADIO-PIANO-FALDONE (es. 1-A-1, 1-A-2, 1-A-3 ecc.) e così per ogni faldone che archivio.
Quindi arrivo alla form upload file con la quale vorrei andare a selezionare i file che fanno parte di quel faldone ed archiviarli nella cartella appena creata con l'insert e tramite comando
PHP:
<input type="submit" value="Apri cartella">
visualizzare tutta la documentazione all'interno del faldone senza dover andare a cercare nell'archivio cartaceo.
Quindi la tua idea è buona però dovrei recuperare il nome della cartella che viene creata al momento dell'inserimento nel db.
In conclusione dovrei fare una select che mi recuperi il percorso della cartella appena creta e me lo salvi nel db così da recuperare i dati velocemente.

Ho provato il tuo codice, mi da questo errore
Parse error: syntax error, unexpected 'isset' (T_ISSET), expecting '(' in C:\xampp\htdocs\ArchivioToponomastica\views\UploadDelibere.php on line 68
il rigo con l'errore è questo
PHP:
if isset($_POST['directory']) {

Con la speranza di essermi spiegato
Max61

ciao, se ho capito bene a te serve recuperare l'ultima cartella inserita. Se cosi fosse potresti utilizzare la seguente funzione :
PHP:
mysql_insert_id();
questa funzione ti ritorna l'ultimo id inserito, quindi successivamente ti potresti far ritornare qualsiasi campo(IN QUESTO CASO IL NOME DELLA CARTELLA) relativo a quell'id.

Il codice che ti ho inviato ti da errore perche ho dimenticato a mettere la parentesi all'if
PHP:
 if (isset($_POST['directory'])) {
 
ciao, se ho capito bene a te serve recuperare l'ultima cartella inserita. Se cosi fosse potresti utilizzare la seguente funzione :
PHP:
mysql_insert_id();
questa funzione ti ritorna l'ultimo id inserito, quindi successivamente ti potresti far ritornare qualsiasi campo(IN QUESTO CASO IL NOME DELLA CARTELLA) relativo a quell'id.

Il codice che ti ho inviato ti da errore perche ho dimenticato a mettere la parentesi all'if
PHP:
 if (isset($_POST['directory'])) {


Ciao
l'ultimo id già lo recupero per stampare ed è questo, ho fatto alcune prove ma non riesco a recuperare l'ultima cartella inserita
allego codice che utilizzo per la stampa

PHP:
$ultimo_id = mysql_insert_id();
            //    ****************** ****************************************** ******************

			$id =$ultimo_id;	
			echo '
		<p>
		
		<a href="Edit_Libri.php?id=' .$id. '">Stampa</a>
		
		</p>
		<hr />';

Analogamente ho creato un campo di nome linkcartella
quindi...
PHP:
$linkcartella="Armadio ". $_POST['armadio']."-Piano ". $_POST['piano']."-Faldone ". $_POST['faldone']."". $_POST['ex_statistica']; 
		echo $linkcartella;
//		exit;
		$ultimo_idlinkcartella = mysql_insert_id();
            //    ****************** ****************************************** ******************

			$linkcartella =$ultimo_idlinkcartella;	
			echo $linkcartella;
			echo '
		<p>
		<hr />';

Ciao
Max61
 
Ultima modifica:
Ciao
l'ultimo id già lo recupero per stampare ed è questo, ho fatto alcune prove ma non riesco a recuperare l'ultima cartella inserita
allego codice che utilizzo per la stampa

PHP:
$ultimo_id = mysql_insert_id();
            //    ****************** ****************************************** ******************

			$id =$ultimo_id;	
			echo '
		<p>
		
		<a rel="nofollow" href="Edit_Libri.php?id=' .$id. '">Stampa</a>
		
		</p>
		<hr />';

Ciao
Max61

ciao, con quell'id dovresti fare un'altra query in modo tale da farti ritornare il nome della cartella
PHP:
$query = "SELECT NomeCartella FROM quellochevuoi WHERE id = $id";
 
Scusami ma mi son perso,
la cartella viene creata direttamente nel server e non ho traccia nella tabella ne del nome ne del link per arrivarci, come faccio a recuperare l'id e il nome della cartella?
Ciao
Max61
 
Allora quando crei la cartella dovresti anche salvarti il suo percorso nella tabella. In questo modo potrai recuperla con l'id

Inviato dal mio XT1068 utilizzando Tapatalk
 
Ultima modifica:
Fatto ho aggiunto il prefisso.
Funziona!!!
Ora manca da definire l'upload
Grazie
Max61
 
Ciao akp e grazie per il tuo prezioso aiuto, ho sostituito la parte di codice che mi hai suggerito ma ancora non riesco a centrare la cartella appena creata, infatti mette i files importati in 'http://localhost/ArchivioToponomastica/views/' e non riesco a passargli la cartella giusta...cosa sbaglio?
Ho anche provato a passargli tramite post il link della cartella che mi hai fatto creare ieri, ma niente, anzi mi da sempre questo errore:
Notice: Undefined variable: directory in C:\xampp\htdocs\ArchivioToponomastica\views\UploadDelibere.php on line 72
Allego codice che mi hai suggerito:
PHP:
<?php    
// settiamo alcune variabili coinvolte nello script:  
if (isset($_POST['directory'])) {  
  $directory = $_POST['directory'];
}

$cartella_upload = $_SERVER['DOCUMENT_ROOT'].'/ArchivioToponomastica/views/'.$directory.'/';
Qualche suggerimento?

Grazie
Max61
 
ciao dovresti allegrare il file che invii in questo modo
PHP:
$cartella_upload = $_SERVER['DOCUMENT_ROOT'].'/ArchivioToponomastica/views/'.$directory.'/'.$ilfilechevuoiinserire;
 
ciao dovresti allegrare il file che invii in questo modo
PHP:
$cartella_upload = $_SERVER['DOCUMENT_ROOT'].'/ArchivioToponomastica/views/'.$directory.'/'.$ilfilechevuoiinserire;

Ciao ho provato il codice che mi hai postato, una cosa del genere l'avevo provata ieri, ma non funziona perchè non riesco a passargli il valore del campo linkcartella è il campo che contiene l'indirizzo dell'ultima cartella creata.

Ho provato a fare anche una query select e mi da questo errore:
Undefined variable: id in C:\xampp\htdocs\ArchivioToponomastica\views\UploadDelibere.php on line 88,
ho messo un echo e mi restituisce il valore 0...
Codice utilizzato:
PHP:
// settiamo alcune variabili coinvolte nello script:  
if (isset($_POST['directory'])) {  
  $directory = $_POST['directory'];
}

$cartella_upload = $_SERVER['DOCUMENT_ROOT'].'/ArchivioToponomastica/views/'.$directory.'/'.$linkcartella;
HELP!
Ciao
Max61
 
Ultima modifica:
Ciao ho provato il codice che mi hai postato, una cosa del genere l'avevo provata ieri, ma non funziona perchè non riesco a passargli il valore del campo linkcartella è il campo che contiene l'indirizzo dell'ultima cartella creata.

Ho provato a fare anche una query select e mi da questo errore:
Undefined variable: id in C:\xampp\htdocs\ArchivioToponomastica\views\UploadDelibere.php on line 88,
ho messo un echo e mi restituisce il valore 0...
Codice utilizzato:
PHP:
// settiamo alcune variabili coinvolte nello script:  
if (isset($_POST['directory'])) {  
  $directory = $_POST['directory'];
}

$cartella_upload = $_SERVER['DOCUMENT_ROOT'].'/ArchivioToponomastica/views/'.$directory.'/'.$linkcartella;
HELP!
Ciao
Max61
Se riesci postami tutto il codice relativo all'upload

Inviato dal mio XT1068 utilizzando Tapatalk
 
questo POST da dove lo prendi?
PHP:
// settiamo alcune variabili coinvolte nello script:  
if (isset($_POST['directory'])) {  
  $directory = $_POST['directory'];
}

Poi devi controllare se nel database viene salvato il nome della cartella.
 
Ciao il post era una prova ed è rimasta, la puoi togliere

Nel database viene salvato l'indirizzo della cartella che utilizzo per aprirla il campo l'ho chiamato linkcartella

Ciao
Max61
 
Ultima modifica:

Discussioni simili