Inserimento multiplo immagini

  • Creatore Discussione Creatore Discussione Snow4e
  • Data di inizio Data di inizio

Snow4e

Nuovo Utente
30 Apr 2016
13
1
3
Buongiorno ragazzi,
Vorrei inserire nel mio sito la possibilità di fare un upload per una gallery.(ovviamente multiplo)
Son riuscito con l'upload singolo ma mi serve un upload multiplo
dato questo codice :
HTML:
<div style="margin:1em auto; width:333px; text-align:center;">
 <form action="<?php echo $_SERVER['main.php?page=utente=']; ?>" method="POST" enctype="multipart/form-data" > 
  Upload File: <input type="file" name="fileup" /><br/>
  <input type="submit" name='submit' value="Upload" />
  <input type="hidden"
              value="<?php echo query_filter('get',$_REQUEST['pg']); ?>"
			  name="pg" /> 
 </form>

</div>
PHP:
<?php
$nome=($_SESSION['login']);

$uploadpath = 'pages/gallery/';      // directory to store the uploaded files
$max_size = 8000;          // maximum file size, in KiloBytes
$alwidth = 1500;            // maximum allowed width, in pixels
$alheight = 1500;           // maximum allowed height, in pixels
$allowtype = array('bmp', 'gif', 'jpg', 'jpe', 'png');        // allowed extensions

if(isset($_FILES['fileup']) && strlen($_FILES['fileup']['name']) > 1) {
  $uploadpath = $uploadpath."galleria_".$nome;       // gets the file name
  $sepext = explode('.', strtolower($_FILES['fileup']['name']));
  $type = end($sepext);       // gets extension
  list($width, $height) = getimagesize($_FILES['fileup']['tmp_name']);     // gets image width and height
  $err = '';         // to store the errors

  // Checks if the file has allowed type, size, width and height (for images)
  if(!in_array($type, $allowtype)) $err .= 'Questo file: <b>'. $_FILES['fileup']['name']. '</b> non ha un estensione conforme al sistema .';
  if($_FILES['fileup']['size'] > $max_size*8000) $err .= '<br/>Immagine troppo pesante: '. $max_size. ' KB.';
  if(isset($width) && isset($height) && ($width >= $alwidth || $height >= $alheight)) $err .= '<br/>La grandezza massima per immagine è di: '. $alwidth. ' x '. $alheight;

  // If no errors, upload the image, else, output the errors
  if($err == '') {
   
    if(move_uploaded_file($_FILES['fileup']['tmp_name'], $uploadpath)) { 
      
	  
      echo 'Upload  effetuato con successo!';
      if(isset($width) && isset($height)) 
	  
	 
	   $a=('http://'.$_SERVER['HTTP_HOST'].rtrim(dirname($_SERVER['REQUEST_URI']), '\\/').'/'.$uploadpath.'');
	milldigital_query("UPDATE utente SET url_img='".$a."' WHERE utente = '".$_SESSION['login']."'");

		
	


     
	
    }
    else echo '<b>Unable to upload the file.</b>';
  }
  else echo $err;
}
?>
Come effettuereste l'upload multiplo ?
 
Non ho mai provato, ma credo che potresti aggiungere n campi (fileup1, fileup2...) al form, poi fare un ciclo foreach nel motore dell'upload che ripete i controlli e le operazioni di upload per ogni file presente.
 
Inoltre, tanto per dire, potresti controllare più velocemente le estensioni di file con pathinfo(), ad esempio:

PHP:
$alloewd = array('png','bmp','gif','gif','jpeg','jpg');

$ext = pathinfo($_FILES['fileup']['name'], PATHINFO_EXTENSION);

if(in_array($ext, $allowed)) echo "OK";
else "Tipo non consentito";
 
vediamo un po', il form credo dovrebbe essere tipo:
HTML:
<!-- altro codice -->
<form action="motore.upload.php" method="POST" enctype="multipart/form-data" >
  <input type="hidden" name="MAX_FILE_SIZE" value="2100000" /> 
  Upload File 1: <input type="file" name="fileup1" /><br/>
  Upload File 2: <input type="file" name="fileup2" /><br/>
  Upload File 3: <input type="file" name="fileup3" /><br/>
  <input type="submit" name='submit' value="Upload" />
  <input type="hidden" value="<?php echo query_filter('get',$_REQUEST['pg']); ?>" name="pg" /> 
</form>
<!-- altro codice -->


mentre nella pagina che riceve i dati io farei:
PHP:
// tralascio le tue variabili per i controlli
//
// potresti creare una funzione per il controllo del file
function controllo_fileup($file){
    // qui effettui tutti i controlli di formato o altro...
    // la dimensione la controlli subito grazie al campo hidden del form MAX_FILE_SIZE
    // facendo tornare un valore bool true se va tutto bene
}

if(isset($_FILES['fileup1'] && $_FILES['fileup1']['name'] > 1 && $_FILES['fileup1']['error'] == 0){
    if(controllo_fileup($_FILES['fileup1']['tmp_name'])){
        move_uploaded_file($_FILES['fileup1']['tmp_name'], $uploadpath);
    }
}

if(isset($_FILES['fileup2'] && $_FILES['fileup2']['name'] > 1 && $_FILES['fileup2']['error'] == 0){
    if(controllo_fileup($_FILES['fileup2']['tmp_name'])){
        move_uploaded_file($_FILES['fileup2']['tmp_name'], $uploadpath);
    }
}


if(isset($_FILES['fileup3'] && $_FILES['fileup3']['name'] > 1 && $_FILES['fileup3']['error'] == 0){
    if(controllo_fileup($_FILES['fileup3']['tmp_name'])){
        move_uploaded_file($_FILES['fileup3']['tmp_name'], $uploadpath);
    }
}

Sicuramente ragionandoci un po' si può risparmiare righe di codice, adesso ho scritto la prima cosa che mi è venuta in mente, magari appena ho un po' di tempo ci provo...
 
Ultima modifica:
Potresti provare se la funzione controlla_fileup() funziona così:
PHP:
function controllo_fileup($fileup)
{
	// passare come parametro $_FILES['fileup1']

	// estensioni consentite
	$allowed = array('image/png','image/jpg','image/jpeg','image/pjpeg');

	if(!in_array($fileup['type'], $allowed)) die("ERRORE tipo file non ammesso!!!");

	if($fileup['error'] == 2) die("ERRORE, dimensioni eccessive");

	// e così via per tutti i controlli che vuoi oppure un controllo generico sugli errori
	if($fileup['error'] != 0) die("ERRORE generico ( ".$fileup['error'].")");
	
	return true;
}

Fammi sapere!
 
Tre è per fare un esempio, potresti metterne quante vuoi, anche se secondo me è meglio limitare, altrimenti diventa pesante lo script
 
Quindi così:
HTML:
<!-- altro codice -->
<form action="motore.upload.php" method="POST" enctype="multipart/form-data" >
  <input type="hidden" name="MAX_FILE_SIZE" value="2100000" /> 
  Upload File 1: <input type="file" name="fileup1" /><br/>
  Upload File 2: <input type="file" name="fileup2" /><br/>
  Upload File 3: <input type="file" name="fileup3" /><br/>
  <input type="submit" name='submit' value="Upload" />
  <input type="hidden" value="<?php echo query_filter('get',$_REQUEST['pg']); ?>" name="pg" /> 
</form>
<!-- altro codice -->

PHP:
function controllo_fileup($fileup) 
{ 
    // passare come parametro $_FILES['fileup1'] 

    // estensioni consentite 
    $allowed = array('image/png','image/jpg','image/jpeg','image/pjpeg'); 

    if(!in_array($fileup['type'], $allowed)) die("ERRORE tipo file non ammesso!!!"); 

    if($fileup['error'] == 2) die("ERRORE, dimensioni eccessive"); 

    // e così via per tutti i controlli che vuoi oppure un controllo generico sugli errori 
    if($fileup['error'] != 0) die("ERRORE generico ( ".$fileup['error'].")"); 
     
    return true; 
}  

if(isset($_FILES['fileup1'] && $_FILES['fileup1']['name'] > 1 && $_FILES['fileup1']['error'] == 0){
    if(controllo_fileup($_FILES['fileup1']['tmp_name'])){
        move_uploaded_file($_FILES['fileup1']['tmp_name'], $uploadpath);
    }
}

if(isset($_FILES['fileup2'] && $_FILES['fileup2']['name'] > 1 && $_FILES['fileup2']['error'] == 0){
    if(controllo_fileup($_FILES['fileup2']['tmp_name'])){
        move_uploaded_file($_FILES['fileup2']['tmp_name'], $uploadpath);
    }
}


if(isset($_FILES['fileup3'] && $_FILES['fileup3']['name'] > 1 && $_FILES['fileup3']['error'] == 0){
    if(controllo_fileup($_FILES['fileup3']['tmp_name'])){
        move_uploaded_file($_FILES['fileup3']['tmp_name'], $uploadpath);
    }
}

Però se fosse che l'immagine avesse lo stesso nome ? non sarebbe giusto assegnarli un valore o una lettera a caso tipo nomefile_a1.jpg?
Adesso inizio a vedere se funziona così anche perchè devo aggiungere che crea una cartella col nome dell'utente in modo tale da aver ogni utente la propria galleria
___

Post Prova:
Errore a tutti e tre le righe
PHP:
if(isset($_FILES['fileup3'] && $_FILES['fileup3']['name'] > 1 && $_FILES['fileup3']['error'] == 0){
 
Ultima modifica:
certamente..... manca una parentesi!!!

PHP:
if(isset($_FILES['fileup3']) && $_FILES['fileup3']['name'] > 1 && $_FILES['fileup3']['error'] == 0)

poi certamente poi implementare il tuo codice come vuoi, modificando il nome, cambiando la path di destinazione in base al tipo di file, quello che vuoi
 
Ultima modifica:
Ho provato così non mi sposta il file. ho provato anche a inserire manualmente il nome utente(nel uploadpath) ma niente. crea la cartella come gli dico ma poi non mi sposta il file :0
HTML:
<form action="<?php echo $_SERVER['main.php?page=galleria&pg=']; ?>" method="POST" enctype="multipart/form-data" >
  <input type="hidden" name="MAX_FILE_SIZE" value="2100000" /> 
  Upload File 1: <input type="file" name="fileup1" /><br/>
  Upload File 2: <input type="file" name="fileup2" /><br/>
  Upload File 3: <input type="file" name="fileup3" /><br/>
  <input type="submit" name='submit' value="Upload" />
  <input type="hidden" value="<?php echo query_filter('get',$_REQUEST['pg']); ?>" name="pg" /> 
</form>
PHP:
<?php 
$nome=($_SESSION['login']); 
$carte=mkdir("pages/gallery/$nome/", 0777);
$uploadpath = 'pages/gallery/';      // directory to store the uploaded files 
function controllo_fileup($fileup) 
{ 
    // passare come parametro $_FILES['fileup1'] 

    // estensioni consentite 
    $allowed = array('image/png','image/jpg','image/jpeg','image/pjpeg'); 

    if(!in_array($fileup['type'], $allowed)) die("ERRORE tipo file non ammesso!!!"); 

    if($fileup['error'] == 2) die("ERRORE, dimensioni eccessive"); 

    // e così via per tutti i controlli che vuoi oppure un controllo generico sugli errori 
    if($fileup['error'] != 0) die("ERRORE generico ( ".$fileup['error'].")"); 
     
    return true; 
}  

if(isset($_FILES['fileup1'])  && $_FILES['fileup1']['name'] > 1 && $_FILES['fileup1']['error'] == 0){
    if(controllo_fileup($_FILES['fileup1']['tmp_name'])){
        move_uploaded_file($_FILES['fileup1']['tmp_name'], $uploadpath);
    }
}

if(isset($_FILES['fileup2']) && $_FILES['fileup2']['name'] > 1 && $_FILES['fileup2']['error'] == 0){
    if(controllo_fileup($_FILES['fileup2']['tmp_name'])){
        move_uploaded_file($_FILES['fileup2']['tmp_name'], $uploadpath);
    }
}


if(isset($_FILES['fileup3']) && $_FILES['fileup3']['name'] > 1 && $_FILES['fileup3']['error'] == 0){
    if(controllo_fileup($_FILES['fileup3']['tmp_name'])){
        move_uploaded_file($_FILES['fileup3']['tmp_name'], $uploadpath);
    }
}  
?>
 
per vedere se ti da un errore prova a correggere la riga che sposta il file in
PHP:
move_uploaded_file($_FILES['fileup1']['tmp_name'], $uploadpath) or die("impossibile spostare ".$_FILES['fileup1']['tmp_name']." in ".$uploadpath." !!");
e vediamo che ti dice
 
anzi, forse meglio ancora prova così

PHP:
try
{
  move_uploaded_file($_FILES['fileup1']['tmp_name'], $uploadpath);
  echo "file ".$_FILES['fileup1']['tmp_name']." correttamente spostato in "$uploadpath." !";
}
catch(Exception $e){
  echo "impossibile spostare ".$_FILES['fileup1']['tmp_name']." in "$uploadpath." !<br>".
        $e->getMessage();
  exit();
}
 
anzi, forse meglio ancora prova così

PHP:
try
{
  move_uploaded_file($_FILES['fileup1']['tmp_name'], $uploadpath);
  echo "file ".$_FILES['fileup1']['tmp_name']." correttamente spostato in "$uploadpath." !";
}
catch(Exception $e){
  echo "impossibile spostare ".$_FILES['fileup1']['tmp_name']." in "$uploadpath." !<br>".
        $e->getMessage();
  exit();
}

nessun errore :crying::dipser:
Non capisco perchè
 
ho notato nel tuo codice che crei una cartella $carte (pages/gallery/utente/) con il nome utente, praticamente dentro il percorso di $uploadpath (pages/gallery/), ma poi le immagini le carichi in $uploadpath (pages/gallery/) e non nella cartella utente, si sicuro di controllare la cartella corretta dopo l'esecuzione dello script?

poi un'altra cosa, i test li stai facendo in locale con sw tipo XAMPP o MAMP, oppure in un sito vero?
tempo fa, proprio nell'upload immagini, in locale anche ioavevo problemi e non capivo il perchè, caricato lo script sul sito funzionava...
 
allora no lo testo su sito vero.
Li era la seconda prova dove inserivo io manualmente la cartella ma nella prima era :
PHP:
$nome=($_SESSION['login']); 
$carte=mkdir("pages/gallery/$nome/", 0777);
$uploadpath = 'pages/gallery/$carte/';      // directory to store the uploaded files
 
Scusa ma c'era un errore, mancava un punto prima di $uploadpath

PHP:
try
{
  move_uploaded_file($_FILES['fileup1']['tmp_name'], $uploadpath);
  echo "file ".$_FILES['fileup1']['tmp_name']." correttamente spostato in ".$uploadpath." !";
}
catch(Exception $e){
  echo "impossibile spostare ".$_FILES['fileup1']['tmp_name']." in ".$uploadpath." !<br>".
        $e->getMessage();
  exit();
}
 
Scusa ma c'era un errore, mancava un punto prima di $uploadpath

PHP:
try
{
  move_uploaded_file($_FILES['fileup1']['tmp_name'], $uploadpath);
  echo "file ".$_FILES['fileup1']['tmp_name']." correttamente spostato in ".$uploadpath." !";
}
catch(Exception $e){
  echo "impossibile spostare ".$_FILES['fileup1']['tmp_name']." in ".$uploadpath." !<br>".
        $e->getMessage();
  exit();
}
L'avevo già corretto.
 
allora no lo testo su sito vero.
Li era la seconda prova dove inserivo io manualmente la cartella ma nella prima era :
PHP:
$nome=($_SESSION['login']); 
$carte=mkdir("pages/gallery/$nome/", 0777);
$uploadpath = 'pages/gallery/$carte/';      // directory to store the uploaded files

secondo me così però non è corretto, prova con
PHP:
$uploadpath = 'pages/gallery/$nome/';
 

Discussioni simili