ciao
se hai pazienza riparto da zero e facccio delle prove
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title></title>
</head>
<body>
<?php
if(isset($_POST['invia'])){
	$ammessi=array('jpg','gif');
	$size=2097152;
	$dir="pinco_pallo/";
	//metto questi due per vedere meglio la query
	$nome="Sempronio";
	$prezzo="5000";
	if($_FILES['files']['name'][0]==""){
		echo "non hai selezionato alcun file<br />";
	}else{//inizio i controlli
		foreach($_FILES['files']['name'] as $ch => $nome_file){
			$est=strtolower(pathinfo($nome_file, PATHINFO_EXTENSION));
			if (!in_array($est, $ammessi)) {//verifica estenzione
				//se non ammessi elimino
				unset($_FILES['files']['name'][$ch],$_FILES['files']['type'][$ch], $_FILES['files']['tmp_name'][$ch],$_FILES['files']['error'][$ch],$_FILES['files']['size'][$ch]);
			}else{
				//verifico che sia rimasto qualcosa
				if(count($_FILES['files']['name'])>0){
					if($_FILES['files']['size'][$ch] >$size){
						//verifico la grandezza se maggiore elimino
						unset($_FILES['files']['name'][$ch],$_FILES['files']['type'][$ch], $_FILES['files']['tmp_name'][$ch],$_FILES['files']['error'][$ch],$_FILES['files']['size'][$ch]);
					}else{
						//riverifico che sia rimasto ancora qualcosa
						if(count($_FILES['files']['name'])>0){
							//sposto nella cartella
							if(move_uploaded_file($_FILES['files']['tmp_name'][$ch],$dir.$_FILES['files']['name'][$ch])){
								//file caricato quindi prendo il nome del file per il db
								$per_db[]=$_FILES['files']['name'][$ch];
							}//fine if spostamento
						}//fine controllo grandezza
					}//fine secndo if rimasri
				}//fine primo if rimasri
			}//fine if ammessi
		}//fine del foreach controlli
		//a questo punto dovrebbero essere rimasti solo i nomi di files validi se ne sono rimasti
		//riverifico se ci sono file OK
		if(count($per_db) > 0){
			//devo considerare che in tabella ho 4 posti riservati al nome delle immagini
			//quindi se ne ho caricati meno devo comunque preparari per il db
			for($k=0; $k < 4; $k++){
				//verifico che l'elemento $k esista o no
				if(!isset($per_db[$k])){
					//non esiste quindi lo prdispongo
					$per_db[$k]="";
				}
			}
			//e qui dovrei aver finito (finalmente)
			//dati di connessione
			$query="INSERT INTO prova(nome, prezzo,immagine, img2, img3,img4) 
                        VALUES('$nome','$prezzo','".$per_db[0]."','".$per_db[1]."','".$per_db[2]."','".$per_db[3]."')";
			var_dump($query);
			//mysql_query($query);
		}else{
			echo "file non caricati o non inseriti";
		}
	}//fine files esistono
}//fine submit
?>
<form action="<?php echo $_SERVER['PHP_SELF'] ?>" method="POST" enctype="multipart/form-data">
    <input type="file" name="files[]" id="files" size="40" multiple/>
    <input type="submit" name="invia"/>
</form>
</body>
</html>
	ciao
a parte che non so da dove provengano $nome e $prezzo (devi aggiungerle) e che non ho fatto il db quindi non provato a mysql_query, per il resto funzia tutto, il var_dump della query risulta corretto.
una piccola cosa devo verificare che non ti carichi più di 4 immagini nella cartella comunque si puo fare uno script a parte che elimini quelle in eccesso che non sono in tabella (forse si fa prima)
penso di aver messo commenti in abbondanzaPHP:<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <title></title> </head> <body> <?php if(isset($_POST['invia'])){ $ammessi=array('jpg','gif'); $size=2097152; $dir="pinco_pallo/"; //metto questi due per vedere meglio la query $nome="Sempronio"; $prezzo="5000"; if($_FILES['files']['name'][0]==""){ echo "non hai selezionato alcun file<br />"; }else{//inizio i controlli foreach($_FILES['files']['name'] as $ch => $nome_file){ $est=strtolower(pathinfo($nome_file, PATHINFO_EXTENSION)); if (!in_array($est, $ammessi)) {//verifica estenzione //se non ammessi elimino unset($_FILES['files']['name'][$ch],$_FILES['files']['type'][$ch], $_FILES['files']['tmp_name'][$ch],$_FILES['files']['error'][$ch],$_FILES['files']['size'][$ch]); }else{ //verifico che sia rimasto qualcosa if(count($_FILES['files']['name'])>0){ if($_FILES['files']['size'][$ch] >$size){ //verifico la grandezza se maggiore elimino unset($_FILES['files']['name'][$ch],$_FILES['files']['type'][$ch], $_FILES['files']['tmp_name'][$ch],$_FILES['files']['error'][$ch],$_FILES['files']['size'][$ch]); }else{ //riverifico che sia rimasto ancora qualcosa if(count($_FILES['files']['name'])>0){ //sposto nella cartella if(move_uploaded_file($_FILES['files']['tmp_name'][$ch],$dir.$_FILES['files']['name'][$ch])){ //file caricato quindi prendo il nome del file per il db $per_db[]=$_FILES['files']['name'][$ch]; }//fine if spostamento }//fine controllo grandezza }//fine secndo if rimasri }//fine primo if rimasri }//fine if ammessi }//fine del foreach controlli //a questo punto dovrebbero essere rimasti solo i nomi di files validi se ne sono rimasti //riverifico se ci sono file OK if(count($per_db) > 0){ //devo considerare che in tabella ho 4 posti riservati al nome delle immagini //quindi se ne ho caricati meno devo comunque preparari per il db for($k=0; $k < 4; $k++){ //verifico che l'elemento $k esista o no if(!isset($per_db[$k])){ //non esiste quindi lo prdispongo $per_db[$k]=""; } } //e qui dovrei aver finito (finalmente) //dati di connessione $query="INSERT INTO prova(nome, prezzo,immagine, img2, img3,img4) VALUES('$nome','$prezzo','".$per_db[0]."','".$per_db[1]."','".$per_db[2]."','".$per_db[3]."')"; var_dump($query); //mysql_query($query); }else{ echo "file non caricati o non inseriti"; } }//fine files esistono }//fine submit ?> <form action="<?php echo $_SERVER['PHP_SELF'] ?>" method="POST" enctype="multipart/form-data"> <input type="file" name="files[]" id="files" size="40" multiple/> <input type="submit" name="invia"/> </form> </body> </html>
....
//e qui dovrei aver finito (finalmente) 
            //dati di connessione 
			$sql = new mysqli("localhost", "root", "", "luca_db");
            $query="INSERT INTO prova(nome, prezzo,immagine, img2, img3,img4)  
                        VALUES('$nome','$prezzo','".$per_db[0]."','".$per_db[1]."','".$per_db[2]."','".$per_db[3]."')"; 
            var_dump($query); 
            mysql_query($query); 
        }else{ 
            echo "file non caricati o non inseriti"; 
        } 
    }//fine files esistono 
}//fine submit
....
	ciao
si mescoli mysqli con mysql
$sql = mysql_connect("localhost","root","");
			mysql_selectdb("my_luca",$sql);
	//*******CNTR TESTO ********
	$err="";//metti a vuoto una stringa  
    $nome=trim($_POST['nome']);  
    //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)){ 
        $err.="prezzo non valido<br />"; 
    }
	//*******FINE CNTR TESTO **********
	if(isset($_POST['invia'])){ 
   $err="";//metti a vuoto una stringa  
    $nome=trim($_POST['nome']);  
    //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)){ 
        $err.="prezzo non valido<br />"; 
    }
    //*******FINE CNTR TESTO ********** 
   if($err==""{
   //presegui con le immagini
  }else{
     //mostri l'errore e torni al form
  }//....
	ciao
scusa avevo letto male
i controlli devi metterli subito dop l'if isset
PHP:if(isset($_POST['invia'])){ $err="";//metti a vuoto una stringa $nome=trim($_POST['nome']); //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)){ $err.="prezzo non valido<br />"; } //*******FINE CNTR TESTO ********** if($err==""{ //presegui con le immagini }else{ //mostri l'errore e torni al form }//....
ciao
se hai un po' di pazienza te lo posto
<?php
$dir="pinco_pallo/";
$file_excess=glob($dir."*.jpg");
$file_excess=array_merge($file_excess,glob($dir."*.JPG"));//il difetto di glob è che è casesensitive
//e se le hai gli altri tipi di immagini
$file_excess=array_merge($file_excess,glob($dir."*.png"));
$file_excess=array_merge($file_excess,glob($dir."*.gif"));
//ricavo i nomi dei file senza percorso
$file_excess=array_map("basename",$file_excess);
//qui i dati di connessione
foreach($file_excess as $ch => $excess){
	//se c'è puo essere in uno dei 4 campi riservati alle immagini
	$query="SELECT * FROM prova WHERE immagine='$excess' OR img2='$excess' OR img3='$excess' OR img4='$excess'";
	$ris=mysql_query($query);
	if(mysql_num_rows($ris)==0){//se 0 il nome non è in tabella
		unlink($dir.$excess);//quindi lo cancello
	}
}
?>
	<?php
if(isset($_POST['invia'])){ 
   $err="";//metti a vuoto una stringa  
    $nome=trim($_POST['nome']);  
    //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)){ 
        $err.="prezzo non valido<br />"; 
    }
    //*******FINE CNTR TESTO ********** 
   if($err==""{
   //presegui con le immagini
   //alla fine se tutto ok
   require_once "pulisci.php";//qui
  }else{
     //mostri l'errore e torni al form
  }//....  
?>
	ciao
come hai visto in tabella ci possono andare al massimo 4 nomi di immagini, se es un utente carica 5 immagini
solo i nomi di 4 antrano in tabella, uno no.
quindi potresti fare: script che legge i file immagini nella directori e verifica se sono in tabella, se non lo trova elimina il file
io personalmente non lo metterei assieme a quello con cui l'utente carica le immagini, ma mi farei un file a partePHP:<?php $dir="pinco_pallo/"; $file_excess=glob($dir."*.jpg"); $file_excess=array_merge($file_excess,glob($dir."*.JPG"));//il difetto di glob è che è casesensitive //e se le hai gli altri tipi di immagini $file_excess=array_merge($file_excess,glob($dir."*.png")); $file_excess=array_merge($file_excess,glob($dir."*.gif")); //ricavo i nomi dei file senza percorso $file_excess=array_map("basename",$file_excess); //qui i dati di connessione foreach($file_excess as $ch => $excess){ //se c'è puo essere in uno dei 4 campi riservati alle immagini $query="SELECT * FROM prova WHERE immagine='$excess' OR img2='$excess' OR img3='$excess' OR img4='$excess'"; $ris=mysql_query($query); if(mysql_num_rows($ris)==0){//se 0 il nome non è in tabella unlink($dir.$excess);//quindi lo cancello } } ?>
chiamato es. pulisci.php e lo lancerei ogni tanto
oppure farei sempre un file a parte da inserire con un include
PHP:<?php if(isset($_POST['invia'])){ $err="";//metti a vuoto una stringa $nome=trim($_POST['nome']); //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)){ $err.="prezzo non valido<br />"; } //*******FINE CNTR TESTO ********** if($err==""{ //presegui con le immagini //alla fine se tutto ok require_once "pulisci.php";//qui }else{ //mostri l'errore e torni al form }//.... ?>
ciao
si ne vengona caricati anche 5 o 6 o 7....., ma lo script che ti ho postato dovrebbe eliminarli, elimina i file che non sono presenti in tabella
ciao
lo script funziona (dovrebbe) così, ti faccio un esempio
l'utente usando il ctrl_click ti carica:
uno.jpg, due.jpg, tre.jpg, quattro.jpg, cinque.jpg e anche altri
in tabella vengono scritti solo i nomi (solo 4)
uno.jpg, due.jpg, tre.jpg, quattro.jpg
glob crea un array, leggendo nella cartella, equivalente a
$file_excess=array('uno.jpg', 'due.jpg', 'tre.jpg', 'quattro.jpg', 'cinque.jpg') e altri se ci sono
$file_excess viene ciclato con il foreach e interrogato il db
se il nome è in tabella (caso di: uno.jpg, due.jpg, tre.jpg, quattro.jpg) non fa nulla
se non lo trova (caso di: cinque.jpg) lo elimina (unlink)
alla fine ti troverai in cartella solo i file che sono salvati nel db
con percorso/file.jpgciao
come hai salvato i nomi in tabella, es.
file.jpg
o
percorso/file.jpg?