[PHP] multi upload immagine da form

  • Creatore Discussione Creatore Discussione Kirsolo
  • Data di inizio Data di inizio
ciao
sei sicuro che debba essere
if(trim($_FILES["submit"]["name"]) == '')
e non
if(trim($_FILES["immagine"]["name"]) == '')
?

con immagine

mi da questo:
array(5) { ["name"]=> array(1) { [0]=> string(9) "prova.jpg" } ["type"]=> array(1) { [0]=> string(10) "image/jpeg" } ["tmp_name"]=> array(1) { [0]=> string(51) "C:\Program Files (x86)\EasyPHP-12.1\tmp\php1657.tmp" } ["error"]=> array(1) { [0]=> int(0) } ["size"]=> array(1) { [0]=> int(7474) } }
Notice: Undefined offset: 1 in C:\Program Files (x86)\EasyPHP-12.1\www\Tropina\form\provaF.php on line 41

Notice: Undefined offset: 2 in C:\Program Files (x86)\EasyPHP-12.1\www\Tropina\form\provaF.php on line 42

Notice: Undefined offset: 3 in C:\Program Files (x86)\EasyPHP-12.1\www\Tropina\form\provaF.php on line 43

Notice: Undefined index: immagine in C:\Program Files (x86)\EasyPHP-12.1\www\Tropina\form\provaF.php on line 45
Non hai selezionato nessun file!

Sinceramente penso che ci siano un paio di errori nel codice....però essendo un neofita alle prime armi non son capace di scovarli/correggerli...non cè uno script già fatto x il multi upload di foto con inserimento nel db dell'url relativo?? in modo che poi io aggiunga solo i controlli max size e le estensioni?
 
ciao
oltre a quello che ha detto longo
id primary key e int spero

Si è un int.
Cmq a me non funziona, vi riposto il codice e gli errori:
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_numeric($prezzo)){// potresti verificare anche che superi un certo valore 
        $err.="prezzo non valido<br />"; 
    } 
	else {
	//************* INIZIO CONTROLLLO CARICAMENTO IMMAGINI ***************
	var_dump($_FILES['image']);//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";
	$immagine1 = $_FILES['image']['name'][0]; 
	$immagine2 = $_FILES['image']['name'][1]; 
	$immagine3 = $_FILES['image']['name'][2]; 
	$immagine4 = $_FILES['image']['name'][3]; 
	// verifichiamo che l'utente abbia selezionato un file   
    if(trim($_FILES["image"]["name"]) == '')   
      {   echo 'Non hai selezionato nessun file!';   }  
	 
    // verifichiamo che il file è stato caricato   
    else if(!is_uploaded_file($_FILES["image"]["tmp_name"]) or $_FILES["image"]["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["image"]["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["image"]["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["image"]["tmp_name"], $cartella_upload.$_FILES["image"]["name"]))   
      {    echo 'Ops qualcosa è andato storto nella procedura di upload!';    }   
   
    // altrimenti significa che è andato tutto ok   
     else   
      { 
	  $sql = new mysql("localhost", "root", "", "luca_db");
						$query="INSERT INTO prova(nome, prezzo,immagine,img2,img3,img4) 
						VALUES('$nome','$prezzo','provaF/imagine1','provaF/imagine2','prova/imagine3','prova/imagine4')";  
						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'])."'>";
      }   
    }   	    
}
?>
array(5) { ["name"]=> array(4) { [0]=> string(7) "b&w.jpg" [1]=> string(14) "Desgriglia.jpg" [2]=> string(9) "prova.jpg" [3]=> string(10) "tetto1.jpg" } ["type"]=> array(4) { [0]=> string(10) "image/jpeg" [1]=> string(10) "image/jpeg" [2]=> string(10) "image/jpeg" [3]=> string(10) "image/jpeg" } ["tmp_name"]=> array(4) { [0]=> string(51) "C:\Program Files (x86)\EasyPHP-12.1\tmp\phpF599.tmp" [1]=> string(51) "C:\Program Files (x86)\EasyPHP-12.1\tmp\phpF5B9.tmp" [2]=> string(51) "C:\Program Files (x86)\EasyPHP-12.1\tmp\phpF5D9.tmp" [3]=> string(51) "C:\Program Files (x86)\EasyPHP-12.1\tmp\phpF5DA.tmp" } ["error"]=> array(4) { [0]=> int(0) [1]=> int(0) [2]=> int(0) [3]=> int(0) } ["size"]=> array(4) { [0]=> int(63525) [1]=> int(153533) [2]=> int(7474) [3]=> int(63869) } }
Warning: trim() expects parameter 1 to be string, array given in C:\Program Files (x86)\EasyPHP-12.1\www\Tropina\form\provaF.php on line 45
Non hai selezionato nessun file!



ps: riuscite a provarlo?
 
ciao
se la riga 45 è questa
PHP:
 if(trim($_FILES["image"]["name"]) == '')   
      {
togli quel trim, non puoi trimmare un array in quel modo
 
Ultima modifica:
ciao
se la riga 45 è questa
PHP:
 if(trim($_FILES["image"]["name"]) == '')   
      {
togli quel trim, non puoi trimmare un array

tolto...l'errore seguente è:
Warning: is_uploaded_file() expects parameter 1 to be string, array given in C:\Program Files (x86)\EasyPHP-12.1\www\Tropina\form\provaF.php on line 49
Si sono verificati problemi nella procedura di upload!
su
PHP:
 else if(!is_uploaded_file($_FILES["image"]["tmp_name"]) or $_FILES["image"]["error"]>0)
 
ciao
stesso discorso, non puoi verificare se è uplodato un array
$_FILES["image"]["tmp_name"] è un array ed anche $_FILES["image"]["error"]
tanto per farti un esempio se carichi due imm imm_1 e imm_2 la prima si carica la seconda no
avrai quindi
$_FILES["image"]["error"][0] ==> 0
$_FILES["image"]["error"][1] ==> 333
 
ciao
stesso discorso, non puoi verificare se è uplodato un array
$_FILES["image"]["tmp_name"] è un array ed anche $_FILES["image"]["error"]
tanto per farti un esempio se carichi due imm imm_1 e imm_2 la prima si carica la seconda no
avrai quindi
$_FILES["image"]["error"][0] ==> 0
$_FILES["image"]["error"][1] ==> 333

ehm....e come si risolve? :$
 
ciao
per questo è facile
PHP:
<?php
$_FILES["image"]["name"]=array_map("trim",$_FILES["image"]["name"]);
?>
per l'aktro ci vuole un foreach, ci penso e forse ti so dire
 
trim su quello non andava perchè tolto il foreach in quella variabile ci sarà un vettore e non una stringa.
 
ciao
per questo è facile
PHP:
<?php
$_FILES["image"]["name"]=array_map("trim",$_FILES["image"]["name"]);
?>
per l'aktro ci vuole un foreach, ci penso e forse ti so dire

ciao sono andato avanti con il codice, per ora funzia una immagine, la carica sia nel db che nella cartella nel server. Unica cosa è come poter modificare in modo che carichi anche le altre 3?
PHP:
// limite peso in byte 
$peso_file = 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
$dir = "images_immobili";
// verifichiamo che sia stato premuto il submit
if (isset($_POST['submit'])) { // && $_POST['upload'] == "Carica immagini") {
    // azzeriamo il messaggio
    $messaggio = "";
    // recuperiamo e uniamo le informazionei sulle immagini
    $infoimages = array_combine($_FILES["image"]['name'], $_FILES["image"]['tmp_name']);
    // cicliamo le immagini
	$cnt=0;
    foreach ($infoimages as $k => $v) {
	if ($cnt < 4) {
		++$cnt;
        // nome del file
        $nomefile = strtolower($k);
		
        // controlliamo il peso immagine
        if (filesize($v) < $peso_file) {
            // recuperiamo l'estensione
            $estensionefile = pathinfo($nomefile, PATHINFO_EXTENSION);
            // controlliamo il tipo immagine
            if (in_array(strtolower($estensionefile), $estensioni)) {
                // controllo caricamento
                if (is_uploaded_file($v)) {
                    // spostiamo il file nella cartella immagini
                    if (!move_uploaded_file($v, "$dir/$nomefile")) {
                        $messaggio .= "<br/>Impossibile spostare il file $k";
                    } else {
                        $messaggio .= "<br/>Immagine $k caricata con successo";
						
						
                    }
                } else {
                    $messaggio .= "<br/>Errore nell'upload del file $k.";
					}
            } else {
                $messaggio .= "<br/>Tipo immagine non consentito : $k";
				}
        } else {
            $messaggio .= "<br/>Immagine $k non caricata : limite peso superato";
			}
	} else { $messaggio .= "<br/>Hai inserito più di 4 immagini";
		}
    }

}

nella query di INSERT INTO, nell record immagine metto images_immobili/$nomefile , però per i record img2,img3,im4 cosa metto?
 

Discussioni simili