Pagina 1 di 6 1 2 3 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 53
  1. #1
    Moderatore di Server Apache L'avatar di marketto
    Registrato dal
    Sep 2001
    Messaggi
    5,858

    [PILLOLA] Eseguire upload multipli con PHP

    Ciao, avete bisogno di effettuare un'upload multiplo con php?? Bene, il seguente codice potrebbe fare al caso vostro

    prima di tutto vi consiglio di leggere questo: Upload con PHP

    Il tutto si compone di 3 file:
    config.php <-- il file di configurazione
    upload.class.php <-- il file della classe per eseguire l'upload
    esterno.js <-- file javascript con il codice per mostrare i campi file multipli (http://www.xaraya.com/index.php/xarbb/topic/269)

    Per fare i primi test create un file index.php con il seguente codice:
    codice:
    <?php
    error_reporting(E_ALL);
    require_once("config.php");
    require_once("upload.class.php");
    
    // ISTANZIA LA CLASSE
    $upload=new upload();
    // SE L'ARRAY $_FILES CONTIENE QUALCOSA ESEGUI IL CODICE PER CARICARE I FILE
    if (count($_FILES) > 0)
    	$upload->caricafile();
    // ALTRIMENTI MOSTRA IL FORM PER L'UPLOAD
    else
    	$upload->mostraform();
    ?>
    il codice potrà essere aggiornato/modificato aggiungendo nuove funzioni, così come la parte HTML del form (uso di fogli di stile, etc.).




    ---------------------------------------------------------
    file config.php
    codice:
    <?php
    $dir_upload=""; // DIRECTORY DOVE EFFETTUARE L'UPLOAD
    $chmod_dir=0700; // PERMESSI DELLA DIRECTORY
    $debug=0; // 1=STAMPA ALCUNE SEMPLICI INFORMAZIONI DI DEBUG, 0=NON STAMPARE
    $sovrascrivi_file=0; // 1=SOVRASCRIVI I FILES SE ESISTENTI, 0=NON SOVRASCRIVERE I FILES
    $dim_massima=500; // DIMENSIONE MASSIMA UPLOAD IN KB
    $check_tipi=1; //1=CONTROLLA IL TIPO DI FILE, 0=NON CONTROLLARE
    $tipi_permessi=array( //ARRAY PER ALCUNI TIPI DI FILE
    	"text/plain",
    	"text/html",
    	"text/xml",
    	"image/jpeg",
    	"image/gif",
    	"image/png",
    	"video/mpeg",
    	"audio/midi",
    	"application/x-zip-compressed",
    	"application/vnd.ms-excel",
    	"application/x-msdos-program",
    	"application/octet-stream"
    );
    ?>
    ---------------------------------------------------------
    file upload.class.php
    codice:
    <?php
    // file upload.class.php
    //
    // Marco Barcaro
    // 27/12/2004
    // Testato con Apache 1.3.29, PHP 4.3.10, su winXP
    // Testato con Apache 1.3.26, PHP 4.1.2, su Debian
    
    $dir_upload=(substr($dir_upload,-1) != "/" && $dir_upload != "") ? $dir_upload."/" : $dir_upload;
    define("DIR_UPLOAD",$dir_upload);
    define("CHMOD_DIR",$chmod_dir);
    define("DEBUG",$debug);
    define("SOVRASCRIVI_FILE",$sovrascrivi_file);
    define("DIM_MASSIMA",$dim_massima*1024);
    define("CHECK_TIPI",$check_tipi);
    define("TIPI_PERMESSI",implode("|",$tipi_permessi));
    
    class upload {
    	function upload(){
    	}
    
    	function caricafile(){
    		//CODICE PER L'UPLOAD CON VARI CONTROLLI
    		if (count($_FILES) > 0){
    			$numero_file= count($_FILES['file']['tmp_name']);
    			for($i=0;$i<$numero_file;$i++){
    				if($_FILES['file']['size'][$i] == 0){
    					echo "L'UPLOAD DEL FILE {$_FILES['file']['name'][$i]} NON E' ANDATO A BUON FINE!
    \n";
    					unset( $_FILES['file']['name'][$i]);
    					unset( $_FILES['file']['type'][$i]);
    					unset( $_FILES['file']['size'][$i]);
    					unset( $_FILES['file']['error'][$i]);
    					unset( $_FILES['file']['tmp_name'][$i]);
    				}
    			}
    			$numero_file=count( $_FILES['file']['tmp_name']);
    			echo "Hai caricato $numero_file file(s)";
    			echo "
    
    \n";
    			foreach($_FILES['file']['name'] as $chiave=>$valore){
    				if (DEBUG == 1){
    					echo "Nome file: ".$_FILES['file']['name'][$chiave]."
    \n";
    					echo "Tipo file: ".$_FILES['file']['type'][$chiave]."
    \n";
    					echo "Dimensione: ".$_FILES['file']['size'][$chiave]." byte
    \n";
    					echo "Nome temporaneo: ".$_FILES['file']['tmp_name'][$chiave]."
    \n";
    				}
    				if (is_uploaded_file( $_FILES['file']['tmp_name'][$chiave])){
    					if ($_FILES['file']['size'][$chiave] <= DIM_MASSIMA){
    						if(CHECK_TIPI == 0 || (CHECK_TIPI == 1 && in_array( $_FILES['file']['type'][$chiave], explode("|",TIPI_PERMESSI)))){
    							if(!is_dir(DIR_UPLOAD) && DIR_UPLOAD != ""){
    								if( !@mkdir(DIR_UPLOAD,CHMOD_DIR))
    									die("ERRORE NELLA CREAZIONE DELLA DIRECTORY ".DIR_UPLOAD."");
    							}
    							if(!file_exists(DIR_UPLOAD.$_FILES['file']['name'][$chiave]) || SOVRASCRIVI_FILE == 1){
    								if (@move_uploaded_file( $_FILES['file']['tmp_name'][$chiave], DIR_UPLOAD.$_FILES['file']['name'][$chiave]))
    									echo "FILE {$_FILES['file']['name'][$chiave]} TRASFERITO!";
    								else
    									die("ERRORE NEL TRASFERIMENTO DEL FILE ".$_FILES['file']['name'][$chiave]."");
    							} else
    								echo ("IL FILE ".$_FILES['file']['name'][$chiave]." E' ESISTENTE!");
    						} else 
    							echo ("IL TIPO DI FILE ".$_FILES['file']['type'][$chiave]." NON E' CONSENTITO!");
    					} else
    						echo ("LA DIMENSIONE DEL FILE ".$_FILES['file']['type'][$chiave]." NON E' CONSENTITA!");
    				} else
    					die("ERRORE NEL TRASFERIMENTO DEL FILE ".$_FILES['file']['name'][$chiave]."");
    				echo "<hr />\n";
    			}
    		}
    	}
    
    	function mostraform(){
    		//FORM PER EFFETTUARE L'UPLOAD
    		echo "<html>
    		<head>
    		<script type=\"text/javascript\" src=\"esterno.js\"></script>
    		</head>
    		<body>
    		<form action=\"{$_SERVER['PHP_SELF']}\" method=\"POST\" name=\"modulo\" enctype=\"multipart/form-data\">
    		<div id=\"attachment\" style=\"display:none\">
    			 <input id=\"file\" name=\"file\" type=\"file\" size=\"55\" />
    			 <a href=\"#\" onclick=\"javascript:removeFile(this.parentNode.parentNode,this.parentNode);\"> Rimuovi</a>
    		</div>
    		<div id=\"attachments\">
    			
    <a id=\"addupload\" href=\"javascript:addUpload('file')\">Aggiungi file</a>
    
    
    			<input name=\"file[]\" type=\"file\" size=\"55\" />
    			<span id=\"attachmentmarker\"></span>	
    		</div>
    		<input type=\"hidden\" name=\"MAX_FILE_SIZE\" value=\"".DIM_MASSIMA."\" />
    		<input type=\"submit\" value=\"invia\" />
    		</form>
    		</body>
    		</html>\n";
    	}
    }
    ?>
    ---------------------------------------------------------
    file esterno.js
    codice:
    var max = 0;				// maximum # of attachments allowed
    var currentUploads = 0;		// current # of attachment sections on the web page
    var nameDesc = '';			// Name property for the Description Input field
    var nameFile = '';			// Name property for the File Input field
    var scrollPosVert = 0;		// stores the current scroll position on the form
    
    // for some reason when a div is taken out, the form
    // will scroll to the top on both Firefox and IE
    
    // SCROLL FUNCTIONS
    function saveScrollPos(offset){
    	scrollPosVert=(document.all)?document.body.scrollTop:window.pageYOffset-offset;
    }
    
    function setScrollPos(){
    	window.scrollTo(0, scrollPosVert);
    	setTimeout('window.scrollTo(0, scrollPosVert)',1);
    }
    
    
    // This function adds a new attachment section to the form
    // It is called when the user clicks the "Attach a file" button...
    // It takes three arguments:
    //      maxUploads			- the maximum number of attachments allowed
    //		descFieldName		- the field name for the Description Input field
    //		fileFieldName		- the field name for the File Input field
    function addUpload(fileFieldName){
    	nameFile=fileFieldName;
    	currentUploads++;
    	if (currentUploads>0)
    		document.getElementById('addupload').childNodes[0].data='Aggiungi file';
    	// First, clone the hidden attachment section
    	var newFields = document.getElementById('attachment').cloneNode(true);
    	newFields.id = '';
    	// Make the new attachments section visible
    	newFields.style.display = 'block'; 
    	// loop through tags in the new Attachment section
    	// and set ID and NAME properties
    	//
    	// NOTE:	the control names for the Description Input
    	//			field and the file input field are created
    	//			by appending the currentUploads variable
    	//			value to the nameFile and nameDesc values
    	//			respectively
    	//
    	//			In terms of Xaraya, this means you'll need to name your
    	//			DD properties will need names like the following:
    	//				"AttachmentDesc1"
    	//				"AttachmentFile1"
    	//				"AttachmentDesc2"
    	//				"AttachmentFile2"
    	//				"AttachmentDesc3"
    	//				"AttachmentFile3"
    	//				et cetera...
    	var newField = newFields.childNodes;
    	for (var i=0;i<newField.length;i++){
    		if (newField[i].name==nameFile){
    			newField[i].id=nameFile+currentUploads;
    			newField[i].name=nameFile+'[]';
    			//newField[i].name=nameFile+currentUploads;
    		}
    	}
    	// Insert our new Attachment section into the Attachments Div
    	// on the form...
    	var insertHere = document.getElementById('attachmentmarker');
    	insertHere.parentNode.insertBefore(newFields,insertHere);
    }
    
    
    
    // This function removes an attachment from the form
    // and updates the ID and Name properties of all other
    // Attachment sections 
    function removeFile(container, item){
    	// get the ID number of the upload section to remove
    	var tmp = item.getElementsByTagName('input')[0];
    	var basefieldname = '';
    	basefieldname = nameFile;
    	var iRemove=Number(tmp.id.substring(basefieldname.length, tmp.id.length));
    	// Shift all INPUT field IDs and NAMEs down by one (for fields with a
    	// higher ID than the one being removed)
    	var x = document.getElementById('attachments').getElementsByTagName('input');
    	for (i=0;i<x.length;i++){
    		basefieldname=nameFile;
    		var iEdit = Number(x[i].id.substring(basefieldname.length, x[i].id.length));
    		if (iEdit>iRemove){
    			x[i].id=basefieldname+(iEdit-1);
    			x[i].name=basefieldname+(iEdit-1);
    		}
    	}
    
    	// Run through all the DropCap divs (the number to the right of the attachment
    	// section) and update that number...
    	x=document.getElementById('attachments').getElementsByTagName('div');
    	for (i=0;i<x.length;i++){
    		// Verify this is actually the "dropcap" div
    		if (x[i].id.substring(0, String('dropcap').length)=='dropcap'){
    			ID = Number(x[i].id.substring(String('dropcap').length, x[i].id.length));
    			// check to see if current attachment had a higher ID than the one we're
    			// removing (and thus needs to have its ID dropped)
    			if (ID>iRemove){
    				x[i].id='dropcap'+(ID-1);
    				x[i].childNodes[0].data=(ID-1);
    			}
    		}
    	}
    
    	currentUploads--;
    	saveScrollPos(0);
    	container.removeChild(item);
    	setScrollPos();
    	document.getElementById('addupload').style.visibility='visible';
    	if (currentUploads==0)
    		document.getElementById('addupload').childNodes[0].data='Aggiungi file';
    }
    think simple think ringo

  2. #2
    codice:
    		<form action=\"{$_SERVER['PHP_SELF']}\" method=\"POST\" name=\"modulo\" enctype=\"multipart/form-data\">
    		<div id=\"attachment\" style=\"display:none\">
    			 <input id=\"file\" name=\"file\" type=\"file\" size=\"55\" />
    			 <a href=\"#\" onclick=\"java script:removeFile(this.parentNode.parentNode,this.parentNode);\"> Rimuovi</a>
    		</div>
    		<div id=\"attachments\">
    			
    <a id=\"addupload\" href=\"java script:addUpload('file')\">Aggiungi file</a>
    
    
    			<input name=\"file[]\" type=\"file\" size=\"55\" />
    			<span id=\"attachmentmarker\"></span>	
    		</div>
    		<input type=\"hidden\" name=\"MAX_FILE_SIZE\" value=\"".DIM_MASSIMA."\" />
    		<input type=\"submit\" value=\"invia\" />
    		</form>

    C'è un errore in questo form. Al posto di "java script" ci deve andare "javascript"

  3. #3
    Moderatore di Server Apache L'avatar di marketto
    Registrato dal
    Sep 2001
    Messaggi
    5,858
    Originariamente inviato da Patatino


    C'è un errore in questo form. Al posto di "java script" ci deve andare "javascript"
    è il forum che ha tagliato


    cmq grazie x la segnalazione...
    think simple think ringo

  4. #4
    il forum agiunge uno spazio, non è possibile toglierlo

    edit:

    Aggiunta alle pillole come l'altro SQLite che mi avevi segnalato marketto

  5. #5
    Utente di HTML.it
    Registrato dal
    Jun 2002
    Messaggi
    1,476
    Complimenti bellissima pillola.

    Se voglio limitare il numero di campi per fare l'upload, come devo intervenire sul javascript?

    grazie


    dies

  6. #6
    Utente di HTML.it
    Registrato dal
    Jun 2002
    Messaggi
    1,476
    Ciao,

    vedendo il codice, volevo chiederti è questa la parte dove inserire i dati provenienti dal form in un Database mysql

    codice:
    if (@move_uploaded_file( $_FILES['file']['tmp_name'][$chiave], DIR_UPLOAD.$_FILES['file']['name'][$chiave]))
    									echo "FILE {$_FILES['file']['name'][$chiave]} TRASFERITO!";
    //in questa riga inserire sql -> insert, è giusto?
    ....

    grazie


    ciao

    dies

  7. #7
    Moderatore di Server Apache L'avatar di marketto
    Registrato dal
    Sep 2001
    Messaggi
    5,858
    si, puoi sostiture l'echo per mettere la query, oppure lasciare l'echo ed inserire delle graffe dopo if (@move_uploaded_file(...


    think simple think ringo

  8. #8
    Utente di HTML.it
    Registrato dal
    Jun 2002
    Messaggi
    1,476
    Originariamente inviato da marketto
    si, puoi sostiture l'echo per mettere la query, oppure lasciare l'echo ed inserire delle graffe dopo if (@move_uploaded_file(...


    ciao,

    potresti farmi un piccolo esempio.
    Per limitare la possibilità di inserire infinti campi per fare l'upload?

    Grazie


    dies

  9. #9
    Moderatore di Server Apache L'avatar di marketto
    Registrato dal
    Sep 2001
    Messaggi
    5,858
    Originariamente inviato da dies
    ciao,

    potresti farmi un piccolo esempio.
    Per limitare la possibilità di inserire infinti campi per fare l'upload?

    Grazie


    dies
    infiniti campi nel db o nel form?
    think simple think ringo

  10. #10
    Utente di HTML.it
    Registrato dal
    Jun 2002
    Messaggi
    1,476
    no, nel form.
    Voglio dire se si clicca su aggiungi, lo script aggiunge (giustamente) tanti campi per fare l'upload dei files.. ecco io vorrei limitarne solo a 4.

    ciao

    dies

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.