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?