• User Newbie

    form contatti con allegato: problemi con estensione allegato

    Buonasera a tutti!
    Premettendo che sono una capra con il PHP (parlatemi come avessi 2 anni :)!), mi serviva un form con dei campi+allegato che una volta inviati, andassero dritti ad un indirizzo mail.

    Fin qui, ho trovato ciò che cercavo e l'ho fatto funzionare (anche se ciò che ricevo mi và nella posta indesiderata, c'è un modo per evitare ciò?)...ma...

    Vorrei mettere una restrizione per quanto riguarda le estensioni del file che si può allegare (che si possano allegare solo zip e rar)..

    Vi allego il codice, la stringa della restrizione c'è ma non và, riesco a spedire anche i jpeg ad esempio....

    
    // prints form
    function print_form(){
    ?>
    	<form method="post" action="<?php echo $_SERVER[?PHP_SELF?];?>" id="form" enctype="multipart/form-data">
    	<label for="nome">nome / nome gruppo</label>
    	<input name="nome" id="nome" type="text" value="<?= $_SESSION['myForm']['nome']; ?>" tabindex="1"/>
    	
    	<label for="email">e-mail</label>
    	<input name="email" id="email" type="text" value="<?= $_SESSION['myForm']['email']; ?>" tabindex="2"/>
    	
    	<label for="citta">città</label>
    	<input name="citta" id="citta" type="text" value="<?= $_SESSION['myForm']['citta']; ?>" tabindex="3"/>
    	
    	<label for="titolo">titolo opera</label>
    	<input name="titolo" id="titolo" type="text" value="<?= $_SESSION['myForm']['titolo']; ?>" tabindex="4"/>
    	
    	<label for="descrizione">breve descrizione dell'opera</span></label>
    	<textarea name="descrizione" id="descrizione" cols="45" rows="7" tabindex="5"/><?= $_SESSION['myForm']['descrizione']; ?></textarea>
    	
    	<label for="scheda">scheda tecnica</label>
    	<textarea name="scheda" id="scheda" rows="7" cols="45" tabindex="6"><?= $_SESSION['myForm']['scheda']; ?></textarea>
        
        <label for="curriculum">breve curriculum</label>
    	<textarea name="curriculum" id="curriculum" rows="7" cols="45" tabindex="7"><?= $_SESSION['myForm']['curriculum']; ?></textarea>
    	
    	<label for="allegato">carica immagine della tua opera e la liberatoria firmata che trovi nel bando (<a class="black" href="02_01.html">qui</a>)<br />
    <span class="grey">(sono ammessi solo file .zip<br />o .rar, max 3mb)</span></label>
    	<input name="allegato" id="allegato" type="file" tabindex="8">
    	
    	<input class="pulsante" type="submit" name="submit" id="submit" value="INVIA"  tabindex="9"/>
    	<input type="hidden" name="submitted"  value="true" />
    	</form>
    <?php
    }
    
    // enquiry form validation
    
    function process_form() {
    	// Read POST request params into global vars
    	// FILL IN YOUR EMAIL
    	$to = "indirizzoalqualearriverà@mail dot it";
    	$subject = 'nuovo iscritto al contest';
    	$nome = trim($_POST['nome']);
    	$email = trim($_POST['email']);
    	$citta = trim($_POST['citta']);
    	$titolo = trim($_POST['titolo']);
    	$descrizione = trim($_POST['descrizione']);
    	$scheda = trim($_POST['scheda']);
    	$curriculum = trim($_POST['curriculum']);
    	
    	
    	// Require a file to be attached: false = Do not allow attachments true = allow only 1 file to be attached
    	$requirefile="true";
    	
    	// Allowed file types. add file extensions WITHOUT the dot.
    	$allowtypes=array("zip", "rar");
    	
    	// Require a file to be attached: false = Do not allow attachments true = allow only 1 file to be attached
    	$requirefile="true";
    	
    	// Maximum file size for attachments in KB NOT Bytes for simplicity. MAKE SURE your php.ini can handel it,
    	// post_max_size, upload_max_filesize, file_uploads, max_execution_time!
    	// 2048kb = 2MB,       1024kb = 1MB,     512kb = 1/2MB etc..
    	$max_file_size="3072";
    	$max_execution_time="360";
    	
    	// Thank you message
    	$thanksmessage="Grazie per aver partecipato! Riceverai a breve la nostra conferma di avvenuta ricezione del materiale. In caso contrario, mandaci una mail. <hr />";
    
    	$errors = array(); //Initialize error array
    
    	//checks for a nome
    	if (empty($_POST['nome']) ) {
    		$errors[]='Hai dimenticato di inserire il tuo nome o il nome del gruppo.';
    		}
    
    	//checks for an email
    	if (empty($_POST['email']) ) {
    		$errors[]='Hai dimenticato di inserire il tuo indirizzo e-mail.<hr />';
    		} else {
    
    		if (!eregi ('^[[:alnum:]][a-z0-9_\.\-]*@[a-z0-9\.\-]+\.[a-z]{2,4}$', stripslashes(trim($_POST['email'])))) {
    			$errors[]='Per favore, inserisci un indirizzo mail valido.';
    		} // if eregi
    	} // if empty email
    
    	//checks for a citta
    	if (empty($_POST['citta']) ) {
    		$errors[]='Hai dimenticato di inserire la tua città di provenienza.';
    		}
    
    	//checks for a titolo
    	if (empty($_POST['titolo']) ) {
    		$errors[]='Hai dimenticato di inserire il titolo della tua opera.';
    		}
    		
    	//checks for a descrizione
    	if (empty($_POST['descrizione']) ) {
    		$errors[]='Hai dimenticato di inserire una descrizione della tua opera.';
    		}	
    		
    		//checks for a scheda
    	if (empty($_POST['scheda']) ) {
    		$errors[]='Hai dimenticato di inserire una scheda della tua opera.';
    		}	
    		
    		//checks for a curriculum
    	if (empty($_POST['curriculum']) ) {
    		$errors[]='Hai dimenticato di inserire il tuo curriculum.';
    		}	
    					
    		
     	// checks for required file
    	// htt://amiworks.co.in/talk/handling-file-uploads-in-php/
    	if($requirefile=="true") {
    		if($_FILES['allegato']['error']==4) {
    			$errors[]='Hai dimenticato di allegare la tua opera.';
    		}
    	}
    		
    	//checks attachment file
    	// checks that we have a file
    	if((!empty($_FILES["allegato"])) && ($_FILES['allegato']['error'] == 0)) {
    			// basename -- Returns filename component of path
    			$filename = basename($_FILES['allegato']['nome']);
    			$ext = substr($filename, strrpos($filename, '.') + 1);
    			$filesize=$_FILES['allegato'];
    			$max_bytes=$max_file_size*1024;
    			
    			
    			if($filesize > $max_bytes) {
    				$errors[]= "Il tuo file è troppo grande. La dimensione max consentita è di 3mb!";
    			}
    			
    	} // if !empty FILES
    
    	if (empty($errors)) { //If everything is OK
    		
    		// send an email
    		// Obtain file upload vars
    		$fileatt      = $_FILES['allegato']['tmp_name'];
    		$fileatt_type = $_FILES['allegato']['type'];
    		$fileatt_name = $_FILES['allegato']['name'];
    		
    		// Headers
    		$headers = "From: $emailfrom";
    		
    		// create a boundary string. It must be unique
    		  $semi_rand = md5(time());
    		  $mime_boundary = "==Multipart_Boundary_x{$semi_rand}x";
    
    		  // Add the headers for a file attachment
    		  $headers .= "\nMIME-Version: 1.0\n" .
    		              "Content-Type: multipart/mixed;\n" .
    		              " boundary=\"{$mime_boundary}\"";
    
    		  // Add a multipart boundary above the plain message
    		  $message ="This is a multi-part message in MIME format.\n\n";
    		  $message.="--{$mime_boundary}\n";
    		  $message.="Content-Type: text/plain; charset=\"iso-8859-1\"\n";
    		  $message.="Content-Transfer-Encoding: 7bit\n\n";
    		  $message.="Da: ".$nome."\n";
    		  $message.="E-mail: ".$email."\n";
    		  $message.="Città: ".$citta."\n";
    		  $message.="Titolo opera: ".$titolo."\n";
    		  $message.="Descrizione: ".$descrizione."\n";
    		  $message.="Scheda tecnica: ".$scheda."\n";
    		  $message.="Curriculum: ".$curriculum."\n\n";
    		
    		if (is_uploaded_file($fileatt)) {
    		  // Read the file to be attached ('rb' = read binary)
    		  $file = fopen($fileatt,'rb');
    		  $data = fread($file,filesize($fileatt));
    		  fclose($file);
    
    		  // Base64 encode the file data
    		  $data = chunk_split(base64_encode($data));
    
    		  // Add file attachment to the message
    		  $message .= "--{$mime_boundary}\n" .
    		              "Content-Type: {$fileatt_type};\n" .
    		              " name=\"{$fileatt_name}\"\n" .
    		              //"Content-Disposition: attachment;\n" .
    		              //" filename=\"{$fileatt_name}\"\n" .
    		              "Content-Transfer-Encoding: base64\n\n" .
    		              $data . "\n\n" .
    		              "--{$mime_boundary}--\n";
    		}
    		
    		
    		// Send the completed message
    		
    		$envs = array("HTTP_USER_AGENT", "REMOTE_ADDR", "REMOTE_HOST");
    		foreach ($envs as $env)
    		$message .= "$env: $_SERVER[$env]\n";
    		
    		if(!mail($to,$subject,$message,$headers)) {
    			exit("Spiacenti, ma non siamo riusciti a spedire la tua candidatura. Per favore, riprova o spediscici il tutto via mail, segnalandoci il problema.\n");
    		} else {
    			echo '<div id="formfeedback"><h3>Grazie!</h3><p>'. $thanksmessage .'</p></div>';
    			unset($_SESSION['myForm']);
    			print_form();
    			
    		} // end of if !mail
    		
    	} else { //report the errors
    		echo '<div id="formfeedback"><h3>Errore!</h3><p>Si sono riscontrati i seguenti errori:<br />';
    		foreach ($errors as $msg) { //prints each error
    				echo " - $msg<br />\n";
    			} // end of foreach
    		echo '</p><p>Riprova</p><hr /><p></p></div>';
    		print_form();
    	} //end of if(empty($errors))
    
    } // end of process_form()
    ?>
    
    

    Altra cosa, per la limitazione del peso, vorrei far sì che l'annuncio del file troppo pesante compaia subito appena si tenta di caricare il file, e non una volta a file caricato...

    Chiedo troppo?
    😄


  • ModSenior

    Ciao,
    basta aggiungere sotto:
    [php]$ext = substr($filename, strrpos($filename, '.') + 1);[/php]
    Questo:
    [php]
    if(!in_array($ext, $allowtypes))
    $errors[]='Estensione file non valida';
    [/php]


  • User Newbie

    Ho provato ma non và....ora non mi accetta nemmeno zip e rar, in pratica non accetta nulla e dà sempre errore di estensione 😞