[PHP] multi upload immagine da form

Kirsolo

Utente Attivo
17 Gen 2013
171
0
0
Salve, qualcuno mi può aiutare a realizzare il controllo di una form che upload 4 immagini nella cartella nel server ed il suo url nel database?
Son settimane che mi ci imbatto, ma senza esito :(

i controlli sono:
- che sia un immagine (.jpg, .bmp, .gif)
- il peso dell'immagine ( entro i 2M)
- e che siano al max 4 img

grazie
 

Kirsolo

Utente Attivo
17 Gen 2013
171
0
0
ciao
prova a cercare qui, da qualche parte c'è un 3d che ne parla

Avevo cercato, ma senza buoni risultati per me.
Il problema è come gestire più foto, non so farlo.
Poi sarebbe meglio mettere un input solo con la possibilità di uppare 4 foto che vanno in 4 record della tabella del db oppure 4 input , uno per ogni foto?
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
148
63
PR
www.borgo-italia.it
ciao
puoi usare l'input file multiple
HTML:
<input name="immagine[]" type="file" multiple >
oppure
quattro input file
HTML:
<input name="immagine[]" type="file">
<input name="immagine[]" type="file">
<input name="immagine[]" type="file">
<input name="immagine[]" type="file">
il secondo, a mio parere, per l'utente è più intuitivo, l'importante per facilitare il controllo è che il name sia un array
name="immagine[]"
poi per vedere come si sviluppa nella parte php del submit
PHP:
<?php
if(isset($_POST['submit'])){
	//...
	echo "<pre>";
	var_dump($_FILES['immagine']);//da questa vedi come viene costruito l'array provando a caricare più immagini
	echo "</pre>";
	//......
}
//...
?>
prova a buttare giu qualcosa, poi ti do una mano
 

giamma

Utente Attivo
4 Mag 2005
111
0
0
provo darti uno spunto

PHP:
<form id="uploader" action="upload.php" method="post" enctype='multipart/form-data'>
<input id="file" name="f[]" type="file" multiple="multiple">
<input type="submit" value="carica">
</form>

PHP:
$l = $_FILES['f']['name'];
 
foreach ($l as $nomefile) {
   $file = basename($nomefile);

move_uploaded_file($file,"upload/");

}

non so se ti và bene fammi sapere ciao...
 
Ultima modifica:

Kirsolo

Utente Attivo
17 Gen 2013
171
0
0
provo darti uno spunto

PHP:
<form id="uploader" action="upload.php" method="post" enctype='multipart/form-data'>
<input id="file" name="f[]" type="file" multiple="multiple">
<input type="submit" value="carica">
</form>

PHP:
$l = $_FILES['f']['name'];
 
foreach ($l as $nomefile) {
   $file = basename($nomefile);

move_uploaded_file($file,"upload/");

}


non so se ti và bene fammi sapere ciao...

ho provato a metter giu qualche riga...
HTML:
 <form id="provaF" enctype="multipart/form-data" method='post' action="<?php echo $_SERVER['PHP_SELF'] ?>">
<p>
<label for="nome">Nome</label>
<input type="text" name="nome" id="nome" /></p>
<p><label for="prezzo">prezzo</label>
<input type="text" name="prezzo" id="prezzo" /></p>
<p>
        <input name="image[]" type="file" size="40" multiple="multiple"/>   
        <!-- <input name="upload" type="submit" value="Carica immagini e visualizza" /></p> -->	
<p>
 <input type="submit" name="submit" id="submit" value="Invia Messaggio" />
 </p>
</form>
PHP:
<?php 
if(isset($_POST['submit'])){ 
	
    $err="";//metti a vuoto una stringa 
    $nome=trim($_POST['nome']); //metto solo nome il titolo è simile 
    //reg_match('/^[a-z0-9]{5,15}/i' 
    if(!preg_match('/^[a-zA-Z]{2,20}$/', $nome)){//verifico che siano solo lettere min 2 max 20 
        $err.="non hai inserito il nome o nome non valido<br />";//concateno gli errori 
	} 
	$prezzo=trim($_POST['prezzo'])+0.0; 
    if($prezzo==0 || !is_numerica($prezzo)){// potresti verificare anche che superi un certo valore 
        $err.="prezzo non valido<br />"; 
    } 
	else {
	//************* INIZIO CONTROLLLO CARICAMENTO IMMAGINI ***************
	var_dump($_FILES['immagine']);//da questa vedi come viene costruito l'array provando a caricare più immagini 
    echo "</pre>"; 
	// limite peso in byte 
	$peso_max = 1024 * 1024;
	// inizializziamo il messaggio
	$messaggio = "Carica una o piu immagini, fino ad un massimo di 4 consentite:";
	// estensioni ammesse
	$estensioni = array("jpg", "png", "bmp", "gif");
	// percosrso destinazione immagini la cartella deve esistere e il percorso deve essere corretto
	$cartella = "../provaF";
	// 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["submit"]["tmp_name"]) or $_FILES["submit"]["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["submit"]["name"]))),$estensioni))   
      {    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["submit"]["size"] > $max_byte)   
      {   echo ' eccede la dimensione massima!';  }  
    // verifichiamo che la cartella di destinazione settata esista   
    else if(!is_dir($cartella))   
        {    echo 'La cartella in cui si desidera salvare il file non esiste!';   }     
    // verifichiamo il successo della procedura di upload nella cartella settata   
    else if(!move_uploaded_file($_FILES["submit"]["tmp_name"], $cartella_upload.$_FILES["submit"]["name"]))   
      {    echo 'Ops qualcosa è andato storto nella procedura di upload!';    }   
   
    // altrimenti significa che è andato tutto ok   
     else   
      { 
	  $sql = new mysql("localhost", "root", "", "x");
						$query="INSERT INTO prova(nome, prezzo,immagine,img2,img3,img4) 
						VALUES('$nome','$prezzo','prova/...','','','')";  
						var_dump($query);//e qui verifichi che venga scritta come dovrebbe
						if(!$sql->query($query)) { 
							echo $sql->error; }
      echo 'Upload eseguito correttamente!'; 
	  //e torni al form pulito dopo 100 secondi 
    echo "<meta http-equiv='Refresh' content='100; URL=".htmlspecialchars($_SERVER['PHP_SELF'])."'>";
      }   
    }   	    
}
?>

come richiamo le immagini su INSERT INTO ? prova/... poi?
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
148
63
PR
www.borgo-italia.it
ciao
stasera non posso spiegarti bene, però attento quando ci si fa caricare dei file qualcuno potrebbe inviarti un_bel_visus.exe, senza contre che portevbbe caricarti un'immagine da 10MB, prima du uplod si deve fare i controlli
 

Kirsolo

Utente Attivo
17 Gen 2013
171
0
0
ciao
stasera non posso spiegarti bene, però attento quando ci si fa caricare dei file qualcuno potrebbe inviarti un_bel_visus.exe, senza contre che portevbbe caricarti un'immagine da 10MB, prima du uplod si deve fare i controlli

ma se cè il controllo sulle estensioni?! come fa?
 

giamma

Utente Attivo
4 Mag 2005
111
0
0
"INSERT INTO prova(nome, prezzo,immagine,img2,img3,img4) non capisco perche hai messo quatro attributi per le immagini...

per estrarre le immagini scrivi una cosa cosi:

PHP:
$team = nome;// per estrarre un immagine secondo il nome
$query = "SELECT * FROM prova WHERE team='$team'";
$risultato = mysql_query($query) or die (mysql_error());
$r = mysql_fetch_array($risultato);

echo $r['immagine'];

p.s. non è un codice che funziona
 

Longo8

Utente Attivo
28 Mar 2011
1.694
0
36
Non credo che in questo modo tu stia creando un multi-upload.
Provo a prenderne uno tra gli archivi :)
Tempo fa funzionava anche se, come puoi vedere, uso mysql.
L'ho appena testato e funziona.
PHP:
<?php
if(isset($_FILES['files'])){
    $estensioni = array("jpg", "png", "bmp", "gif"); 
    $errors= array();
	foreach($_FILES['files']['tmp_name'] as $key => $tmp_name ){
		$file_name = $key.$_FILES['files']['name'][$key];
		$file_size =$_FILES['files']['size'][$key];
		$file_tmp =$_FILES['files']['tmp_name'][$key];
		$file_type=$_FILES['files']['type'][$key];	
        if($file_size > 2097152){
			$errors[]='La grandezza del file deve essere minore di 2 MB';
        }		
		if(!in_array(strtolower(end(explode('.', $file_name))),$estensioni)){
      		echo 'Tipo di file non consentito';    
		}    
        $query="INSERT into upload_data (`USER_ID`,`FILE_NAME`) VALUES('$user_id','$file_name'); ";
        $directory="foto";
        if(empty($errors)==true){
            if(is_dir($directory)==false){
                mkdir("$directory", 0700);		// Create directory if it does not exist
            }
            if(is_dir("$directory/".$file_name)==false){
                move_uploaded_file($file_tmp,"$directory/".$file_name);
            }else{									// rename the file if another one exist
                $new_dir="$directory/".$file_name.time();
                 rename($file_tmp,$new_dir) ;				
            }
		 mysql_query($query);			
        }else{
                print_r($errors);
        }
    }
	if(empty($error)){
		echo "Operazione effettuata con successo";
	}
}
?>
<form action="" method="POST" enctype="multipart/form-data">
	<input type="file" name="files[]" multiple/>
	<input type="submit"/>
</form>
 

Kirsolo

Utente Attivo
17 Gen 2013
171
0
0
Non credo che in questo modo tu stia creando un multi-upload.
Provo a prenderne uno tra gli archivi :)
Tempo fa funzionava anche se, come puoi vedere, uso mysql.
L'ho appena testato e funziona.
PHP:
<?php
if(isset($_FILES['files'])){
    $estensioni = array("jpg", "png", "bmp", "gif"); 
    $errors= array();
	foreach($_FILES['files']['tmp_name'] as $key => $tmp_name ){
		$file_name = $key.$_FILES['files']['name'][$key];
		$file_size =$_FILES['files']['size'][$key];
		$file_tmp =$_FILES['files']['tmp_name'][$key];
		$file_type=$_FILES['files']['type'][$key];	
        if($file_size > 2097152){
			$errors[]='La grandezza del file deve essere minore di 2 MB';
        }		
		if(!in_array(strtolower(end(explode('.', $file_name))),$estensioni)){
      		echo 'Tipo di file non consentito';    
		}    
        $query="INSERT into upload_data (`USER_ID`,`FILE_NAME`) VALUES('$user_id','$file_name'); ";
        $directory="foto";
        if(empty($errors)==true){
            if(is_dir($directory)==false){
                mkdir("$directory", 0700);		// Create directory if it does not exist
            }
            if(is_dir("$directory/".$file_name)==false){
                move_uploaded_file($file_tmp,"$directory/".$file_name);
            }else{									// rename the file if another one exist
                $new_dir="$directory/".$file_name.time();
                 rename($file_tmp,$new_dir) ;				
            }
		 mysql_query($query);			
        }else{
                print_r($errors);
        }
    }
	if(empty($error)){
		echo "Operazione effettuata con successo";
	}
}
?>
<form action="" method="POST" enctype="multipart/form-data">
	<input type="file" name="files[]" multiple/>
	<input type="submit"/>
</form>
Ciao, ancora non l'ho provato, ma ho soltanto dato un occhiata...ti devo chiedere un paio di cose:
1) non mi serve che crei la directory 0700 perchè cè già una nel server, creando una di nome sbagliato poi non mi richiamerebbe le foto nel sito
2) non capisco bene cosa hai fatto nella query di insert into
3) manca la connessione al db o sbaglio?
4) purtroppo è una form e non ho solo il multiupload di immagine ma anche 2 controlli di testo da fare, dove li metto? subito dopo ISSET e prima di $estensioni?

grazie
 

Kirsolo

Utente Attivo
17 Gen 2013
171
0
0
ciao
puoi metterli prima o dopo il foreach per il controllo dei file comunque dopo $errors= array();

Grazie, ma la connessione al db e la query per inserire il testo nel db?

nb: qui rispondo ad un post precedente, ho al max 4 img da inserire ed ogni immagine deve andare in un record della tabella, non tutte e 4 in un'unico record.
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
148
63
PR
www.borgo-italia.it
ciao
ma la connessione al db
i dati di connessione li metterei nell'if quando tutto è ok
non tutte e 4 in un'unico record.
questo sta a te:
devi salvare anche il testo (hai 4 testi?), se hai un testo solo e 4 foto o

fai una tabella apposita per i testi
id_uno | id_utente | testo

e una per le foto
id _due | id_uno | nome_file (qui id_uno serve per collegare con la join le immagini al testo)


o la tabella deve avere oltre al campo del testo 4 campi per i 4 nomi_file
id | id_utente | testo | imm_1 | imm_2 | imm_3 | imm_4

edit dimenticavo
secondo quello che fai devi poi fare le/la query
 
Ultima modifica:

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
148
63
PR
www.borgo-italia.it
ciao
dimenticavo ancora
se fai il campo di input file multiple devi mettere nei controlli anche un contatore in modo che uno non ti carichi più di 4 foto, cosa non possibile se fai 4 campi di input files
 

Kirsolo

Utente Attivo
17 Gen 2013
171
0
0
ciao
dimenticavo ancora
se fai il campo di input file multiple devi mettere nei controlli anche un contatore in modo che uno non ti carichi più di 4 foto, cosa non possibile se fai 4 campi di input files

L'ultima tua idea è la mia ovvero la tabella con :

id | nome | prezzo | immagine | img2 | img3 | img4

diciamo che o 4 input o un unico input con contatore a me non cambia, devo farlo in qualche modo funzionare , con le buone o con le cattive! =)

In ogni caso come inserisco il contatore?
Non ho ben capito cosa intendi con le query?
Io vorrei che ci fosse un unico INSERT INTO con i valori di testo e le foto...non so se mi spiego
 

Longo8

Utente Attivo
28 Mar 2011
1.694
0
36
Intanto spiega perchè le 4 immagini le vuoi mettere tutte su una riga.
Se in futuro uno ne vuole inserire una quinta? oppure tu dai la possibilità di inserire una quinta o una sesta, non è che vai a modificare le tabelle ma basta inserire un altro record nella tabella immagini che è collegata con una relazione uno:molti con quella UTENTE (un utente può caricare più immagini).
Poi il limite lo controlli facilmente e per quanto riguarda la connessione al db avevo una riga che includeva il file di connessione ma l'ho tolta prima di pubblicare quindi basta inserire 2 righe di codice poco prima dell'esecuzione della query.
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
148
63
PR
www.borgo-italia.it
ciao
@kirsolo
intendo le query perche se fai due tabelle devi fare due query di insert (tra l'altro prelevando gli id relativi al testo), se fai una riga sola (una tabella) devi fare una query sola.

@longo
dipende, se ho predisposto una pagina che possa visualizzare solo 4 immagini e il testo è inutile che l'utente ne carichi 5 o più (mi intasa solamente il server), se decido che ne possa caricare solo 4 eventualmente e se l'utente vuole cambiarle/a: prima le/la elimina poi ricarica le/la nuove/a, comunque un limite conviene metterlo
 

Kirsolo

Utente Attivo
17 Gen 2013
171
0
0
ciao
@kirsolo
intendo le query perche se fai due tabelle devi fare due query di insert (tra l'altro prelevando gli id relativi al testo), se fai una riga sola (una tabella) devi fare una query sola.

@longo
dipende, se ho predisposto una pagina che possa visualizzare solo 4 immagini e il testo è inutile che l'utente ne carichi 5 o più (mi intasa solamente il server), se decido che ne possa caricare solo 4 eventualmente e se l'utente vuole cambiarle/a: prima le/la elimina poi ricarica le/la nuove/a, comunque un limite conviene metterlo

Si, io impongo che l'utente carichi da 0 o al massimo 4 foto. Quindi non può per certo caricarne più di 4.
Come detto ho una form con ( nome , prezzo , immagine ,img2, img3 , img4) e la tabella ( id | nome | prezzo | immagine | img2 | img3 |img4 ) , quindi i dati vanno inseriti corrispondentemente. Poi li richiamo io con una funzione in modo di visualizzarli nel modo che voglio io. Non so se mi sono spiegato.
 
Discussioni simili
Autore Titolo Forum Risposte Data
N problema script php mysql multi upload immagini PHP 31
ANDREA20 [PHP] multi lingue PHP 1
P [PHP] Multi-session PHP 1
M Multi PHP su IIS 6 Web Server 1
G Invio form con PHP PHP 1
T fatture con voci fattura in php PHP 0
T ALTRO PROBLEMA CON ARRAY PHP PHP 1
M Collegamento tra form html e script php PHP 4
M Problemi con la stampa dei valori in php PHP 1
W [Cerco collaborazioni] Sviluppatore Web (PHP) Offerte e Richieste di Lavoro e/o Collaborazione 1
D passare valori da database sql a php PHP 1
L Ricezione dei dati su file php da modulo html PHP 6
E Inviare variabile a PHP da ciclo in JS Javascript 0
A form PHP prenotazione tramite query PHP 2
A Form php prenotazione di un azienda sanitaria locale presso studio medico PHP 1
F menù select dinamico da db in php PHP 3
L Problemi form Pagina php HTML e CSS 3
L php mysql non salva solo id PHP 21
L php mysql cerca e visualizza pagina PHP 0
F Il codice php è giusto? PHP 2
R Aggiornare record mysql con Ajax, jQuery e php Ajax 2
A invio massivo dati a file php Javascript 4
Z MySql injection PHP PHP 1
V PHP form intersecate PHP 0
I [Offro][Retribuito] Programmatore Php Offerte e Richieste di Lavoro e/o Collaborazione 0
P Funzione jQuery Ajax invio file a php jQuery 1
C Dopo chiusura del tag php la stringa html va a capo PHP 1
E Transaction php PHP 11
B ciclare file xml con PHP PHP 1
L Estrazione dati php Database 6
A Aiuto per pagina php PHP 0
E Php select option e ajax PHP 23
I Aiuto php Dependent Lookup PHP 0
T arretramento versione PHP... PHP 3
D problema php mysql PHP 1
D problema php mysql PHP 1
E Barra di avanzamento codice PHP PHP 4
G creazione menu a tendina e invio a pagina php PHP 1
A inserire variabile php colore in div html PHP 2
Z Video protetto con PHP PHP 0
Z Problema di sincronizzazione PAYPAL con PHP PHP 1
I Eecuzione di javascript in ciclo foreach php. PHP 7
S Libreria PHP per creare file dwg o dxf PHP 0
A [cerco - retribuito] Sviluppatore Php freelance per progetti vari Offerte e Richieste di Lavoro e/o Collaborazione 2
L Google chart php mysql PHP 2
R Download file multipli da directory php PHP 0
F pagina dinamica PHP PHP 3
P Rimozione automatica url da sitemap.xml con PHP PHP 1
L php tinymce mi duplica la classe label PHP 3
S Errore PHP - Notice: Undefined index ... PHP 14

Discussioni simili