Form invio file multipli

Salvo Salvi

Utente Attivo
14 Nov 2012
230
0
0
Se non riusciamo a zippare i file che l'utente mi invia, dovrei fare diversamente.
Creo 6 campi nella tabella ordine ed carico i file che l'utente mi invia dentro una cartella e salvo il percorso nel db credi che cosi sarà possibile?
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
sto cercando di fare delle prove, ma ho dei problemi con la classe
mo è comunque venuto un piccolo dubbio, sto cercando di capire se i file sono caricati nella cartella temp
 

Salvo Salvi

Utente Attivo
14 Nov 2012
230
0
0
allora io ho trovato lo sbaglio. Non trova i file da zippare,
quindi credo che bisogna caricare i file nella cartella uploads con un ciclo for credo...
dopodichè bisogna Creare lo zip e inserire i file che sono stati caricati dentro la cartella uploads,
salvare lo zip, ed eliminare i file. se riesci fammelo sapere io sto facendo delle prove
 

Salvo Salvi

Utente Attivo
14 Nov 2012
230
0
0
$lista = $_FILES['files']['tmp_name'];
$bomba = $_FILES['files']['name'];

$archivia = new ZipArchive();
$nome_file = time().".zip";
$archivia->open($nome_file, ZIPARCHIVE::CREATE);

foreach ($lista as $nome_immagine) {

$file = basename($nome_immagine);
/*operazioni di upload*/

$primonumeronome = rand(1,9);
$secondonumeronome = rand(1111,9999);
$terzonumeronome = rand(1, 111);
$quartonumeronome = rand (1, 11112);
$nomefile = $primonumeronome ."". $secondonumeronome ."". $terzonumeronome ."". $quartonumeronome;


move_uploaded_file($nome_immagine, $nomefile);

$info = pathinfo($nome_immagine);

echo "estenzione ".$info['extension'], "\n";


$archivia->addFile('$nomefile');





}

come faccio ad estrapolare il formato del file? cosi non funziona
 

Salvo Salvi

Utente Attivo
14 Nov 2012
230
0
0
PHP:
<?php


$lista = $_FILES['files']['tmp_name'];
 
 
 $archivia = new ZipArchive(); 
$nome_file = time().".zip"; 
$archivia->open($nome_file, ZIPARCHIVE::CREATE);  
 
foreach ($lista as $nome) {

   $file = ($nome);
   /*operazioni di upload*/

    $primonumeronome = rand(1,9);
	$secondonumeronome = rand(1111,9999);
	$terzonumeronome = rand(1, 111);
	$quartonumeronome = rand (1, 11112);
	$nomefile = $primonumeronome ."". $secondonumeronome ."". $terzonumeronome ."". $quartonumeronome;
   
   echo $file;
   
   move_uploaded_file($file, $nomefile.".txt");
      
   $archivia->addFile($nomefile.".txt");
   




  }

   echo "Sono stati zippati: " . $archivia->numFiles . " file.\n"; 
$archivia->close(); 
move_uploaded_file($nome_file, time().".zip");
?>

Questo script che ho creato funziona solo se carichiamo i file .txt come faccio da un file temporaneo a trovare l'estenzione
 

Salvo Salvi

Utente Attivo
14 Nov 2012
230
0
0
POSTO LO SCRIPT VINCITORE =)


PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Documento senza titolo</title>
</head>
<?php


$lista = $_FILES['files']['tmp_name'];
$bomba = $_FILES['files']['name']; 
 
 $archivia = new ZipArchive(); 
$nome_file = time().".zip"; 
$archivia->open($nome_file, ZIPARCHIVE::CREATE);  

foreach ($bomba as $estenzione) {
$n= 0;


$info = pathinfo($estenzione); 
 $estenzion[$n] = $info['extension'];
 echo $estenzion[$n] ;

$estenzion ++ ;
}

 
foreach ($lista as $nome) {

   $file = ($nome);

   /*operazioni di upload*/

    $primonumeronome = rand(1,9);
	$secondonumeronome = rand(1111,9999);
	$terzonumeronome = rand(1, 111);
	$quartonumeronome = rand (1, 11112);
	$nomefile = $primonumeronome ."". $secondonumeronome ."". $terzonumeronome ."". $quartonumeronome;
   
   echo $file;
   $n = 0;
   move_uploaded_file($file, $nomefile.".".$estenzion[$n]);
      
   $archivia->addFile($nomefile.".".$estenzion[$n]);
   $n ++;

//PROVO A ESTRAPOLARE L'ESTEZIONE



   
  }

   echo "Sono stati zippati: " . $archivia->numFiles . " file.\n"; 
$archivia->close(); 
move_uploaded_file($nome_file, time().".zip");

 ?>


<form id="" action="" method="post" enctype='multipart/form-data'>
<input id="file" name="files[]" type="file" multiple="multiple">
<input type="submit" value="carica">
</form>
</body>
</body>
</html>
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
sembrerebbe che finalmente tu sia riuscito.
c'è un però, così ad una prima occhiata ho un dubbio, ma può essere che sbagli.
prova ad archiviare tre file con estenzioni diverse es imm_1.jpg, imm_2.png e imm_3.gif
poi guarda nello zip cosa trovi
 
Ultima modifica:

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
secondo me devi correggere i due foreach, da
PHP:
<?php
//.....
foreach ($bomba as $estenzione) {
	$n= 0;//1° giro $n==0, 2° giro $n torna ==0, ecc...
	$info = pathinfo($estenzione); 
	$estenzion[$n] = $info['extension'];//1°giro $estenzion[0], 2° giro rimane $estenzion[0]
	echo $estenzion[$n] ;
	//forse qui intendevi $n++ ?
	$n++;//1° giro se era $n==0 ->$n==1, 2° giro se era $n==0 ->$n==1,ecc...
}
//.....
?>
portando fuori la variabile di incremento, a
PHP:
<?php
//.....
$n=0;
foreach ($bomba as $estenzione) {
	//1° giro $n==0, 2° giro $n==1, ecc...
	$info = pathinfo($estenzione); 
	$estenzion[$n] = $info['extension'];//1°giro $estenzion[0], 2° giro $estenzion[1],ecc...
	echo $estenzion[$n] ;
	//forse qui intendevi $n++ ?
	$n++;//1° giro se era $n==0 ->$n==1, 2° giro se era $n==1 ->$n==2,ecc...
}
//.....
?>
ne ho scritto solo uno, ma l'altro è la stessa cosa
poi se vuoi ritrovarti solo con lo zip e non i file non zippati
PHP:
<?php
//......
	move_uploaded_file($file, $nomefile.".".$estenzion[$n]);
	$archivia->addFile($nomefile.".".$estenzion[$n]);
	unset($nomefile.".".$estenzion[$n]);
	$n ++;
	//PROVO A ESTRAPOLARE L'ESTEZIONE
}
//...........
?>
altro dubbio.
dato che ti fai caricare i file io valuterei la possibilità di caricare solo certi tipi di file (doc,txt,pdf,jpg,png,gif) perche, anche se zippato, non è mai sicuro avere un bel file .exe o altra estenzione eseguibile
prima di fare tutto lo zippaggio
PHP:
<?php
$lista = $_FILES['files']['tmp_name'];
$bomba = $_FILES['files']['name'];
$ammessi=array('doc','txt','pdf','jpg','png','gif');//e altri che ti interessano
foreach($bomba as $ch => $val){
	$est = pathinfo($val);
	 if(!in_array($est,$ammessi)){
	 	unset($lista['files']['tmp_name'][$ch]);//elimino i file non ammessi
		unset($bomba['files']['name'][$ch]);
	 }
}
if(!is_array($bomba){//tutti i file non ammessi
	exit();//e rinnvio al form pulito
}
//....
?>
prova e sappimi dire
 

Salvo Salvi

Utente Attivo
14 Nov 2012
230
0
0
scusa sono preso un po dall agitazione e non mi sta riuscendo riassemblare il codice mi puoi mandare lo script finito? ti prego
 

Salvo Salvi

Utente Attivo
14 Nov 2012
230
0
0
Cosi funziona!!
GRAZIE MILLE MA cè un errore quando elimina i file mi dice che cè un carattere inaspettato e quindi lo commentato per adesso.
Dove inserisco lo script per controllare il file?
Ti ringrazio tanto tanto!

PHP:
<?php

$lista = $_FILES['files']['tmp_name'];
$bomba = $_FILES['files']['name']; 
 
 $archivia = new ZipArchive(); 
$nome_file = time().".zip"; 
$archivia->open($nome_file, ZIPARCHIVE::CREATE);  

//PRIMO PASSAGGIO
$n=0; 
foreach ($bomba as $estenzione) { 
    //1° giro $n==0, 2° giro $n==1, ecc... 
    $info = pathinfo($estenzione);  
    $estenzion[$n] = $info['extension'];//1°giro $estenzion[0], 2° giro $estenzion[1],ecc... 
    echo $estenzion[$n] ; 
    //forse qui intendevi $n++ ? 
    $n++;//1° giro se era $n==0 ->$n==1, 2° giro se era $n==1 ->$n==2,ecc... 
} 

 $n=0;
foreach ($lista as $nome) {

   $file = ($nome);

   /*operazioni di upload*/

    $primonumeronome = rand(1,9);
	$secondonumeronome = rand(1111,9999);
	$terzonumeronome = rand(1, 111);
	$quartonumeronome = rand (1, 11112);
	$nomefile = $primonumeronome ."". $secondonumeronome ."". $terzonumeronome ."". $quartonumeronome;
   
   echo $file;
   
   
   
   move_uploaded_file($file, $nomefile.".".$estenzion[$n]); 
    $archivia->addFile($nomefile.".".$estenzion[$n]); 
    //unset($nomefile.".".$estenzion[$n]); 
    $n ++; 
    
} 



   echo "Sono stati zippati: " . $archivia->numFiles . " file.\n"; 
$archivia->close(); 
move_uploaded_file($nome_file, time().".zip");

 
?>
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
prova a vedere se funzia, come detto ho dei problemi con la classe zip
PHP:
<!DOCTYPE html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Documento senza titolo</title>
</head>
<body>
<?php
if(isset($_POST['carica'])){//altrimenti come fa a sapere php che hai dato il submit?
	$lista = $_FILES['files']['tmp_name'];
	$bomba = $_FILES['files']['name']; 
	//qui il controllo del tipo di file ammessi
	$ammessi=array('doc','txt','pdf','jpg','png','gif');//e altri che ti interessano
	foreach($bomba as $ch => $val){
		$est = pathinfo($val);
	 	if(!in_array($est,$ammessi)){
	 		unset($lista['files']['tmp_name'][$ch]);//elimino i file non ammessi
			unset($bomba['files']['name'][$ch]);
	 	}
	}
	if(!is_array($bomba){//tutti i file erano non ammessi
		//dai un avviso e ritorni al form pulito o dove vuoi tu
		//io metto al form pulito, con un ritorno dopo 3 secondi
		echo "tutti i file eliminati<br />";
		echo "<meta http-equiv='Refresh' content='3; URL=".htmlspecialchars($_SERVER['PHP_SELF'])."'>";
		exit();//e rinnvio al form pulito
	}
	$archivia = new ZipArchive(); 
	$nome_file = time().".zip"; 
	$archivia->open($nome_file, ZIPARCHIVE::CREATE);  
	$n= 0;
	foreach ($bomba as $estenzione) {
		$info = pathinfo($estenzione); 
		$estenzion[$n] = $info['extension'];
		echo $estenzion[$n],"<br />" ;
		$n ++ ;
	}
	$n = 0;
	foreach ($lista as $nome) {
		$file = ($nome);
		/*operazioni di upload*/
		$primonumeronome = rand(1,9);
		$secondonumeronome = rand(1111,9999);
		$terzonumeronome = rand(1, 111);
		$quartonumeronome = rand (1, 11112);
		$nomefile = $primonumeronome ."". $secondonumeronome ."". $terzonumeronome ."". $quartonumeronome;
		echo $file;
		move_uploaded_file($file, $nomefile.".".$estenzion[$n]);
		$archivia->addFile($nomefile.".".$estenzion[$n]);
		//qui se vuoi eliminare i file originali, altrimenti la togli o la commenti
		unset($nomefile.".".$estenzion[$n]);
		$n ++;
		//PROVO A ESTRAPOLARE L'ESTEZIONE
	}
	echo "Sono stati zippati: " . $archivia->numFiles . " file.\n"; 
	$archivia->close(); 
	move_uploaded_file($nome_file, time().".zip");
	echo "<meta http-equiv='Refresh' content='3; URL=".htmlspecialchars($_SERVER['PHP_SELF'])."'>";
}else{
?>
<!-- ti conviene mettere l'avviso -->
tipo file ammessi: .doc, .txt, .pdf, .jpg, .png, .gif<br />
i file non ammessi verranno eliminati<br />
<form id="" action="<?php htmlspecialchars($_SERVER['PHP_SELF']);?>" method="post" enctype='multipart/form-data'>
<input id="file" name="files[]" type="file" multiple="multiple">
<input type="submit" name="carica" value="carica">
</form>
<!-- link per uscire -->
<?php
}
?>
</body>
</html>
poi mi sai dire
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
prova a fare queste correzzione ettendo degli echo (o dei var_dump) per verificare che i vari nomi siano sorretti
PHP:
<?php
//......
		$nomefile = $primonumeronome ."". $secondonumeronome ."". $terzonumeronome ."". $quartonumeronome;
		echo $file;
		move_uploaded_file($file, $nomefile.".".$estenzion[$n]);
		$archivia->addFile($nomefile.".".$estenzion[$n]);
		//qui se vuoi eliminare i file originali, altrimenti la togli o la commenti
		unset($nomefile.".".$estenzion[$n]);
		$n ++;
//.......

?>
correggi in
PHP:
<?php
//......
		$nomefile = $primonumeronome .$secondonumeronome .$terzonumeronome .$quartonumeronome.".".$estenzion[$n];
		echo "sposto $file con nome $nomefile<br />";//così vedi meglio poi puoi anche toglierla
		move_uploaded_file($file, $nomefile);
		$archivia->addFile($nomefile);
		//qui se vuoi eliminare i file originali, altrimenti la togli o la commenti
		unset($nomefile);
		$n ++;
//.......
	$archivia->close();
	$dove_spostare="cartella/";
	$nuovo_nome_zip=$dove_spostare.time().".zip";
	echo "spsosto $nome_file con nome $nome_file<br />";
    move_uploaded_file($nome_file, $nome_file);
//......
?>
 

Salvo Salvi

Utente Attivo
14 Nov 2012
230
0
0
per spostare il file zip lo devi spostare al momento della sua creazione
PHP:
   $archivia->open("PERCORSOFILE/".$nome_file, ZIPARCHIVE::CREATE);
 
Discussioni simili
Autore Titolo Forum Risposte Data
S Form invio mail html, con invio tramite file denominato invio.php PHP 8
asevenx invio dati da form a file xml XML 0
P ASP form invio dati + file per email Classic ASP 4
G Aiuto per creare un form di invio file Classic ASP 3
SolidSnake4 invio file video con form php PHP 8
T Invio mail da form contatti con annesso file attachment Classic ASP 1
pugia Invio file da form HTML e CSS 3
K [php]form invio dati PHP 0
G form invio multiplo con checkbox PHP 12
nivaria.achinet Intercettare form solo dopo invio Javascript 1
M Unire 2 funzioni per l'invio di un form e con l'apertura di un div Javascript 0
M Form: come tornare ai campi già compilati dopo invio PHP 1
G Invio form con PHP PHP 3
S Invio email da form PHP 8
U PHP bottone per invio mail o ritorno al form PHP 15
A [PHP] Invio automatico dati da form PHP 6
B [PHP] Invio mail automatico dopo compilazione form - db PHP 25
Cosina [PHP] Preservare i campi del form solo se l'invio non ha successo PHP 5
R [javascript]Form invio preventivo Javascript 0
paloppa [PHP] Invio mail da form dubbio PHP 17
G [PHP] FORM INVIO VALORI A QUERY CON TRE CONDIZIONI PHP 2
F Form mail php errore invio PHP 5
S Problema invio form php/html PHP 3
Samuele Ronzani [PHP] Validazione e invio campi form. PHP 7
Matteo Lorenzon [PHP][WORDPRESS] Form in Wordpress, creazione PDF con dati del form ed invio tramite email WordPress 1
I form invio mail HTML e CSS 1
Francesco Polese Errore form invio mail+php PHP 22
P invio mail da form con dati php PHP 7
Marco_88 Passare un valore prima dell'invio del form Ajax 0
P PHP mailer invio form con 2 allegati. PHP 3
G Form invio multiplo da database PHP 0
W Estrapolare un indirizzo mail di un form durante l'invio PHP 5
C Come posso integrare il bottone "paga adesso" di paypal e un form php per invio dati? PHP 1
I invio mail da form PHP 1
W Modifica su invio dati da form PHP 4
N impedire invio dati form jQuery 3
Il Matta Problema Form e invio mail PHP 2
P Caricare nuova pagina dopo invio dati form Javascript 11
P invio form non corretto dopo controllo dati PHP 8
asevenx problema invio email tramite form PHP 3
M [Richiesta] - Invio tramite form di dati ad un db mysql PHP 2
B Problema form mail per invio doppio allegato PHP 1
N Invio Form con un Ciclo For Javascript 8
A Problema invio dati form contatti PHP 12
A Problema orario invio mail per form PHP 4
L Recupero dati form in tabella e invio con ajax. Problemino jQuery 1
V problemi con l'invio di allegato in un form PHP 17
A Problema invio messaggio col form PHP 1
S php form invio mail PHP 3
L Form con invio mail PHP 1

Discussioni simili