Un Evento Unico. 5 Sale. 27 Interventi. SEO, SOCIAL, E-Commerce, Mobile, Turismo.
CLICCA QUI e SCOPRI DI PIù X Chiudi
 
Forum GT: Condividiamo idee e conoscenza Forum GT: Condividiamo idee e conoscenza


Condividi questo contenuto nei Social Network:
Ti stiamo aspettando: Registrati subito e gratis. Entra a far parte di una delle comunità più attive in Italia. Se hai dimenticato i tuoi dati li puoi recuperare subito.


Vai indietro   Forum per Webmaster: Condividiamo Idee e Conoscenza > Sviluppo e Gestione siti web > Php - Mysql
Benvenuto! Forum Regole FAQ Lista utenti Calendario Segna come letti


Rispondi
 
LinkBack Strumenti di discussione
Vecchio 13-02-09, 09:56   #1 (permalink)
User
 
Data di registrazione: Sep 2006
Ubicazione: Bologna
Messaggi: 81
Upload e controlli form

Ciao,
volevo tornare sul discorso degli upload per capire meglio questa cosa:

ho un form che richiede dei campi input text e alcuni upload di files.

Ho messo i controlli per i campi obbligatori/errati dei campi POST e FILES e avverto se c'è qualcosa che non va.
Se va tutto bene il record viene registrato nel DB. Ma se c'è il messaggio di errore devo ripresentare il modulo per la correzione.
I campi POST me li ripresenta eventualmente per la modifica, ma i FILES come li posso gestire? Io pensavo di fare l'upload vero e proprio solo quando non c'erano più errori nel form, come faccio a non perdere i file che ho già inserito? Grazie!!

Patpat
Patpat non in linea   Rispondi citando
Vecchio 14-02-09, 14:54   #2 (permalink)
Moderatore
 
L'avatar di ilnetsurfer
 
Data di registrazione: Jun 2007
Ubicazione: Napoli
Messaggi: 535
Invia un messaggio tramite MSN a ilnetsurfer
Ciao, perchè non provi questa classe per l'upload ?
LINK
Se c'è qualcosa che non capisci, posta pure
__________________
He knows not where he's going.For the ocean will decide.It's not the DESTINATION...It's the glory of the RIDE.
ilnetsurfer non in linea   Rispondi citando
Vecchio 16-02-09, 09:37   #3 (permalink)
User
 
Data di registrazione: Sep 2006
Ubicazione: Bologna
Messaggi: 81
Ciao ilnetsurfer!
Ho provato la tua classe per l'upload e volevo chiederti questo:
supponi che i file che devi caricare siano 2.
Il mio dubbio sta in $this->link, perchè se i file sono ok va bene, ma se 1 dei 2 ad esempio non è dell'estensione giusta come faccio a mantenere anche $this->link del file giusto al precedente upload?
Li vorrei vedere entrambi perchè li voglio registrare sul db... registrazione che faccio solo quando tutti i campi del form (anche quelli S_POST) sono ok
Che cosa mi sfugge?
Grazie
Ciao
Patpat
Patpat non in linea   Rispondi citando
Vecchio 16-02-09, 15:12   #4 (permalink)
Moderatore
 
L'avatar di ilnetsurfer
 
Data di registrazione: Jun 2007
Ubicazione: Napoli
Messaggi: 535
Invia un messaggio tramite MSN a ilnetsurfer
Allora...puoi fare così :

Codice PHP:
<?php
##################################
#           PHP CLASS 1.2        #
#         CLASSE PER L'UPLOAD    #
#       TUTORIAL E GUIDA ALL'USO #
#       IL NET-SURFER            #
##################################

$max_file_size 102400;//Dimensione massima di un file.102400 Bytes = 100 KiloByte;1024 Bytes = 1 KiloByte
$image_type = array('jpeg''jpg''png''gif''bmp'); //Estensioni accettate.Badate bene di scriverle in minuscolo!
if(isset($_FILES['file'])){//Se esiste $_FILES
require "class.upload.php";//includiamo la classe
$obj = new upload($_FILES['file'],"car/",$max_file_size,$image_type); //Inizializziamo la classe!
/*Il primo parametro è il file
il secondo la cartella con le immagini(E ricordate di inserire / dopo il nome);
Il terzo parametro è il limite massimo di grandezza dei files
il quarto parametro è l'array contenente le estensioni accettate
*/
}
if(isset(
$_FILES['file2'])){//carichiamo la seconda img
$image_type_2 = Array("jpg","raw");
$obj2 = new upload($_FILES['file2'],"car/",$max_file_size,$image_type); //Inizializziamo la classe!
}
?>

<?php
echo "Estensioni accettate : ";//Scrive, tramite foreach, tutte le estensioni accettate
foreach($image_type as $type){
echo 
$type." ";
}
?>
<form enctype="multipart/form-data" action="index.php" method="post">
<input type="hidden" name="MAX_FILE_SIZE" value="<?php echo $max_file_size?>" />
<input type="file" name="file" /><br />
<input type="file" name="file2" />
<input type="submit" name="upload" value="Upload">

</form>
Facendo così, obj e obj2 sono le due classi inizializzate!
Il problema non si pone, in quanto ogni inizializzazione è una cosa a se.
Poi, se vuoi il link, devi semplicemente usare $obj->link oppure $obj2->link...
Il nome della variabile inizializzata più ->link!
__________________
He knows not where he's going.For the ocean will decide.It's not the DESTINATION...It's the glory of the RIDE.
ilnetsurfer non in linea   Rispondi citando
Vecchio 17-02-09, 10:31   #5 (permalink)
User
 
Data di registrazione: Sep 2006
Ubicazione: Bologna
Messaggi: 81
Ciao, grazie per la tua risposta!
Spero di non essere troppo pesante , ma anche con il codice che mi hai indicato tu succede quello che ti ho descritto prima:
se inserisco i due file senza errori il problema non esiste: vedo

Il link della tua immagine : ...localhost/prova/car/img1.jpg
Il link della tua immagine : ...localhost/prova/car/img2.jpg
Estensioni accettate : jpeg jpg png gif bmp

Ma supponi di inserire il primo file giusto e il secondo con l'estensione sbagliata allora ho:

Il link della tua immagine : ...localhost/prova/car/img1.jpg
Sono stati riscontrati i seguenti errori : Estensione non accetta!

Dopo di che se inserisco solo il secondo file:

Sono stati riscontrati i seguenti errori : Non è stato selezionato alcun file!
Il link della tua immagine : ...localhost/prova/car/img2.jpg Estensioni accettate : jpeg jpg png gif bmp

E il primo file giusto non è più disponibile per la registrazione nel DB.

Che ne pensi? Vorrei solo capire come si deve trattare questo tipo di problema... grazie mille per la tua disponibilità

Patpat
Patpat non in linea   Rispondi citando
Vecchio 17-02-09, 15:54   #6 (permalink)
Moderatore
 
L'avatar di ilnetsurfer
 
Data di registrazione: Jun 2007
Ubicazione: Napoli
Messaggi: 535
Invia un messaggio tramite MSN a ilnetsurfer
Beh,allora bisogna solo modificare un pochino la classe...Così :
Codice PHP:
<?php

 
##################################
#           PHP CLASS  1.2          #
#         CLASSE PER L'UPLOAD    #
#       TUTORIAL E GUIDA ALL'USO #
#       IL NET-SURFER            #
##################################
class upload{//Il nome della classe
public $files;//Variabile pubblica di classe contenente il file
public $dir;//Variabile pubblica di classe contenente la cartella
public $max_size;//Variabile pubblica di classe contenente la dimensione massima dei files
public $ext;//Variabile pubblica di classe contenente l'estensione del file
public $ammissed_ext;//Variabile pubblica di classe contenente l'array con le estensioni accettate
public $error;//Variabile pubblica di classe contenente gli errori
public $complete;//Variabile pubblica di classe contenente il path sul disco dell'immagine
public $link;//Variabile pubblica di classe  contenente l'URL dell'immagine
public $my_err;//Variabile pubblica di classe  contenente l'errore finale
function load($esito,$err ""){//Funzione load .Prevede due variabili :
//esito(true o false, true se non c'è errore, false se c'è);
//Err : se esito è false allora dentro contiene l'errore.Altrimenti sarà vuoto



if(empty($err) && $esito true){//Se non ci sono errori e l'esito è ok

$this->error "";
if(!
$this->is_ammissed_file()){ //Qui si fa uso di una funzione interna alla classe
//Con $this->miafunc(); apriamo la funzione.Se la classe è statica utilizzeremo self::miafunc();
$this->error[] = "Estensione non accetta!";//Aggiungiamo un errore nell'array
}



if(empty(
$this->error)){
{
$this->files['name'] = str_ireplace(" ","_",$this->files['name']);//Eliminiamo gli spazi e sostituiamoli con -

$id 0;
if(
file_exists($this->dir.$id."_".$this->files['name'])){//Se esiste il file con quel nome..
while(file_exists($this->dir.$id."_".$this->files['name'])){//Finchè esiste il file con quel nome...

   
$id++;//incrementa l'id
   
$this->complete $this->dir.$id."_".$this->files['name']; //Crea il file con il nome : n_nomefile.ext dove n sta per un numero

}

if(!@
move_uploaded_file($this->files['tmp_name'],$this->complete)){   //Se l'upload è andato a buon fine...

$this->error[] = "Impossibile copiare il file nella directory";


}
$this->link "http://".$_SERVER['SERVER_NAME'].substr($_SERVER['REQUEST_URI'],0,-9).$this->complete//Crea il link!
}else{//Se non esiste un file con quel nome...
 
if(!@move_uploaded_file($this->files['tmp_name'],$this->dir.$id."_".$this->files['name']))//Upload!
{

$this->error[] = "Impossibile copiare il file nella directory";


}
$this->link "http://".$_SERVER['SERVER_NAME'].substr($_SERVER['REQUEST_URI'],0,-9).$this->dir.$id."_".$this->files['name'];
}

}


}
 else{
$this->error[] = $err;//Altrimenti aggiunge l'errore
  
}


 }
 
$this->no_error() ? print($this->link):die("Sono stati riscontrati i seguenti errori :
 "
.$this->my_err);
 }


function 
set_file_ext($_resource_file_name){//Funzione che restituisce l'estensione del file

$ext_file explode("." $_resource_file_name);//Dividiamo la stringa in tante parti quante sono i punti + 1
//ES: $stringa = "ciao.mi.chiamo.valerio";
//$stringa_array = explode(".",$stringa);
//$stringa contiene:
//$stringa[0] = "ciao"
//$stringa[1] = "mi"
//$stringa[2] = "chiamo"
//$stringa[3] = "valerio"
$count_ext_files count($ext_file)-1;//Contiamo il numero di elementi nell'array
//ES: $array = Array("Ciao","xx","xxxx","jjb");
//$count = count($array);
//Restituisce 4
$myext $ext_file[$count_ext_files];
return 
$myext;//La funzione darà come risultato l'estensione

}

function 
is_ammissed_file(){//Funzione che restituisce true o false se l'estensione dei file è accettata
$this->ext $this->set_file_ext($this->files['name']);      //Tramite la nostra funzione creata prima settiamo l'estensione
if(in_array(strtolower($this->ext),$this->ammissed_ext))//Se l'estensione è contenuta nell'array della estensioni(con la funzione strtolower tutti i caratteri diventano in minuscolo(es .PHP diventa .php)
{
return 
true;//Restituisce true
}else{
return 
false;//Restituisce false
}

}

function 
__construct($files,$dir,$max_size,$ammissed_ext){// __construct, funzione che parte alla dichiarazione della classe
//Da notare l'uso di $this->files invece di $files
// la variabile globale di classe $this-> si usa nelle funzioni della classe
//nelle classi di tipo statico non si utilizza $this-> ma self::
//Assegnamo ad ogni variabile di classe il rispettivo contenuto
$this->files $files;
$this->dir =  $dir;
$this->max_size $max_size;
$this->ammissed_ext =   $ammissed_ext;
switch(
$this->files['error'])

                       {   
//Fa uno switch degli errori presenti all'interno della variabile error di $this->files

case UPLOAD_ERR_NO_FILE://Se non è stato selezionato alcun file...
$this->error[] = "Non &egrave; stato selezionato alcun file!";
$this->load(false,$this->error);
break;

case 
UPLOAD_ERR_INI_SIZE://Se si superano le dimensioni massime secondo php.ini...
$this->error[] = "&egrave; stato riscontrato un errore!Il file &egrave; troppo grande secondo le impostazioni del file php.ini!";
$this->load(false,$this->error);
break;

case 
UPLOAD_ERR_FORM_SIZE://Se si superano le dimensioni massime di max_file_size...
$this->error[] = "Le dimensioni superano il valore massimo consentito!";
$this->load(false,$this->error);
break;

case 
UPLOAD_ERR_PARTIAL://Se si riscontra un errore nell'upload...
$this->error[] = "&egrave; stato riscontrato un errore nell'upload!";
$this->load(false,$this->error);
break;

case 
UPLOAD_ERR_OK://Nessun errore
$this->load(true);
break;

default: 
//S c'è un errore sconosciuto...
$this->error[] = "&egrave; stato riscontrato un errore sconosciuto!";
$this->load(false,$this->error);
break;
                       }

                       }
                       
function 
no_error(){ //Funzione che controlla se ci sono errori
if(!empty($this->error)){//Se $this->error (variabile di classe) non è vuoto, vuol dire che ci sono errori

foreach($this->error as $err){//Scorre l'array ...
$this->my_err .= $err."<br />";  //E lo riempe!
}
return 
false;
}else{ 
//Altrimenti...
$this->link "Il link della tua immagine : <a href = \"".$this->link."\">".$this->link."</a>";
return 
true;
}


}
                       }

?>
Ho modificato solo questa parte :

Codice PHP:
 $this->no_error() ? print($this->link):die("Sono stati riscontrati i seguenti errori :
 "
.$this->my_err); 


Ola!
__________________
He knows not where he's going.For the ocean will decide.It's not the DESTINATION...It's the glory of the RIDE.
ilnetsurfer non in linea   Rispondi citando
Vecchio 19-02-09, 09:43   #7 (permalink)
User
 
Data di registrazione: Sep 2006
Ubicazione: Bologna
Messaggi: 81
Ciao ilnetsurfer!
Non ne vengo proprio a capo.

Ora sono a questo punto:

Il link della tua immagine : ..localhost/prova/car/img1.jpg
Sono stati riscontrati i seguenti errori : Non è stato selezionato alcun file!

Ma per inserire il secondo e mantenere il primo?


Ciao Patpat
Patpat non in linea   Rispondi citando
Vecchio 20-02-09, 11:33   #8 (permalink)
User
 
Data di registrazione: Sep 2006
Ubicazione: Bologna
Messaggi: 81
Ciao !

Credo di sbagliare proprio la logica del problema.
Si deve separare l'upload delle immagini dalla associazione ad un DB?
Cioè se carico l'immagine di un prodotto ad esempio
prima faccio l'upload
poi nell'inserimento dei dati del prodotto scelgo l'immagine relativa ma già caricata?

Ciao

Patpat
Patpat non in linea   Rispondi citando
Rispondi
Tags: ,



Strumenti di discussione

Regole di scrittura
Non puoi postare nuove discussioni
Non puoi rispondere alle discussioni
Non puoi allegare file
Non puoi editare i tuoi post

BB code is Attivo
smilies è Attivo
[IMG] il codice è Attivo
Il codice HTML è Disattivato
Trackbacks are Attivo
Pingbacks are Attivo
Refbacks are Disattivato
Vai al forum



Tutti gli orari sono GMT +3. Attualmente sono le 15:19.




Forum GT - © 2004-2009 GT idea S.r.l P.iva 02418200800 - Privacy/Disclaimer

SEO by vBSEO 3.2.0 ©2008, Crawlability, Inc.