[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.046
150
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.046
150
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.046
150
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.046
150
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.046
150
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
F Cerco Hosting con VECCHIE versioni di php Hosting 0
Cosina Captcha php PHP 1
S passare un valore da un form a un file .php con metodo post PHP 4
N php msyql PHP 6
N php problemi a visualizzare video PHP 3
A menu a tendina php PHP 1
D protezione cartelle: blocco visualizzazione/scaricamento contenuto, ma abilitazione utilizzo dati da parte di file .php presenti sul sito Web Server 1
F Php date_diff PHP 1
K [PHP] Aggiungere caratteri ad una stringa in base alla lunghezza della stessa PHP 2
C Wp-admin a file php WordPress 5
Lino80 [Retribuito] Cerco programmatore php per modifica/inserimento funzione/valori da un plugin importer wordpress Offerte e Richieste di Lavoro e/o Collaborazione 0
csi Inviare file jpg in locale alla stampante con php PHP 0
M Passaggio variabili array php su un tasto jq PHP 3
E Php aggiornamento tabella PHP 9
G phpmailer e php 8.1 con estensione mysqli PHP 6
M Invio dati database via email php PHP 0
K [php] Problema con inner join PHP 4
K [php]form invio dati PHP 0
P Codifica caratteri speciali mysql php PHP 0
K [PHP] Problema con variabili concatenate. PHP 1
E Stampante termica escpos-php PHP 6
JeiMax Modifica codice php personalizzato PHP 2
G Come modificare un pdf in php PHP 1
U Link a doppio file PHP PHP 0
E PHP & jQuery PHP 8
N Passare array da php a javascript PHP 5
F Applicazione PHP/MySQL per prenotazioni: limitare il numero massimo di posti prenotabili PHP 20
L tipo boolean non funzionante su mariadb (mysql). E codice php 7.4. PHP 0
U PHP creare un file excel dopo ricerca nel DB PHP 0
M PHP/MySQL - Estrarre valori min e max di ogni gruppo PHP 5
F Php e fatturazione elettronica PHP 0
P lanciare script asp (o php) da jquery Javascript 1
Couting95 inserire dati da un file di testo in una tabella in php PHP 1
P Data scraping in PHP non funziona PHP 4
C Calcoli matematici in php PHP 5
F Scrivere dei dati in word con php PHP 0
D PHP leggere cartella di Windows PHP 1
I dominio aruba versione php server linux Domini 3
G Colorare menu select attraverso ricerca php PHP 0
L PHP motore di ricerca nel sito PHP 1
S PHP e Mysqli PHP 0
Y Stampare da php su un foglio A6 attraverso una stampante esterna PHP 1
M Visulizzare immagine con php PHP 8
G [PHP] Creare script di prenotazione con controllo disponibilità. PHP 7
G leggere file txt e stampare con php il contenuto a video PHP 7
F Ricreare struttura php+mysql su Xampp Apache 0

Discussioni simili