• User Attivo

    [CENTER]IMPORTANTI MODIFICHE!

    [LEFT]Ho apportato delle importanti modifiche allo script...
    Da adesso non c'è bisogno di utilizzare foreach per gli errori, la classe agirà da sola...Quindi bisogna solo limitarsi al consueto
    [php]$obj = new upload($_FILES['file'],"car/",$max_file_size,$image_type);[/php]E niente più!
    Ecco il codice della classe :
    [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):print("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 è 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[] = "è stato riscontrato un errore!Il file è 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[] = "è 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[] = "è 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;
    }

    }
    }

    ?> [/php]Ecco la parte importante :
    [php]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;
    }

    }[/php]Per il resto, il codice della index sarà così:
    [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
    */
    }

    ?>

    <?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" />
    <input type="submit" name="upload" value="Upload">

    </form>[/php]Ciao!:ciauz:
    [/LEFT]
    [/CENTER]


  • User Attivo

    Ciao, ho dei dubbi sull'utilizzo me lo fai un esempi d'uso della classe? pure in pvt, grazie!!!!


  • User Attivo

    ho dei dubbi sull'utilizzo me lo fai un esempi d'uso della classe?
    Certamente!
    pure in pvt, grazie!!!!
    Meglio pubblicamente, così anche altri che si trovano in difficoltà come te potranno risolvere;)
    Iniziamo!
    Questa classe è molto semplice da utilizzare, sopratutto nella nuova versione, che non richiede il foreach degli errori.
    Considera questo codice :

    <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" />
    <input type="submit" name="upload" value="Upload">
    
    </form>
    

    Per eseguire l'upload di un immaigine , bisogna prima usare l'html e creare un form.

    <input type="hidden" name="MAX_FILE_SIZE" value="<?php echo $max_file_size; ?>" />
    

    Questo è un campo nascosto, ma serve perchè deve specificare la massima grandezza che un file uppato può avere.
    Anche se molti browser ignorano questo campo, è bene inserirlo, perchè poi ci penserà PHP a vedere se il file pesa eccessivamente.
    Detto questo, passiamo a php.
    Bisogna prima includere la classe :
    [PHP]<?php
    require "class.upload.php";//includiamo la classe
    ?>[/PHP]
    Dopodichè , istanziamo 2 variabili :
    [PHP]$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![/PHP]
    $max_file_size è la variabile che contiene un numero ce sarà la massima grandezza in bytes di un file.
    $image_type è un array che contiene tutti i tipi di estensioni di un file(raw,jpg,jpeg,bmp, ecc...).
    Prima di effettuare l'upload, è bene controllare che il file esista :
    [PHP]if(isset($_FILES['file'])){//Se esiste $_FILES[/PHP]
    Adesso upload!
    [PHP]$obj = new upload($_FILES['file'],"car/",$max_file_size,$image_type); //Inizializziamo la classe![/PHP]
    Dobbiamo inserire la variabile che contiene il file, la cartella di destinazione e le due variabili in precedenza istanziate.
    Non serve nient'altro!
    Quindi, il codice essenziale sarà :
    [PHP]<?php
    $max_file_size = 102400;
    $image_type = array('jpeg', 'jpg', 'png', 'gif', 'bmp');
    if(isset($_FILES['file'])){
    require "class.upload.php";
    $obj = new upload($_FILES['file'],"car/",$max_file_size,$image_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" />
    <input type="submit" name="upload" value="Upload">

    </form>[/PHP]
    Spero di essermi fatto capire;)
    Per qualsiasi dubbio, posta!:)
    Ola!:ciauz:


  • User Attivo

    Ciao ma se io non voglio inserire un'immagine ma un file zip, rar o exe basta cambiare l'estensioni nella $image_type, giusto?
    Rispondi perfavore


  • User Attivo

    Esattamente;)


  • Consiglio Direttivo

    Mi sto sbizzarrendo con questa classe. 😄
    Già te li ho fatti i complimenti per questa classe e te li rinnovo. 😉

    A questo punto pero' avrei una domanda:
    come lo struttureresti un multi-upload utilizzando questa classe? 🙂


  • User Attivo

    Ciao sam...
    Perdona la mia prolungata assenza, ma la scuola non mi lascia tregua!:o
    Comunque, per il multiupload basta fare così :
    [PHP]<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="file1" />
    <input type="file" name="file2" />
    <input type="submit" name="upload" value="Upload">

    </form>[/PHP]

    E così :
    [PHP]if(isset($_FILES['file1'])){//Se esiste $_FILES
    require "class.upload.php";//includiamo la classe
    $obj = new upload($_FILES['file1'],"car/",$max_file_size,$image_type); //Inizializziamo la classe!

    }
    if(isset($_FILES['file2'])){//Se esiste $_FILES
    require "class.upload.php";//includiamo la classe
    $obj = new upload($_FILES['file2'],"car/",$max_file_size,$image_type); //Inizializziamo la classe!

    }[/PHP]
    Però si potrebbe anche usare
    [PHP]<input type="file" name="file[]" />[/PHP]
    Però non l'ho mai usato...Non so come si fa...


  • Consiglio Direttivo

    @ilnetsurfer said:

    Perdona la mia prolungata assenza, ma la scuola non mi lascia tregua!:o
    Scusarti di che? 🙂
    Son io e tutti gli altri utenti a cui è servita questa classe che dobbiamo ringraziare te. 😉

    @ilnetsurfer said:

    Però si potrebbe anche usare
    [php]<input type="file" name="file[]" />[/php]Però non l'ho mai usato...Non so come si fa...
    Credo, e c'è un'alta probabilità che stia sbagliando, che in questo caso bisogna implementare un Js o similare per l'associazione (tipo quando permetti di scegliere quanti campi upload file vuoi fare - Aggiungi un altro - ). Arrivati alla classe poi si fa il count e quindi si cicla il risultato. Ma non ne son certissimo. 😉


  • User Attivo

    Ecco, ho questo script per aggiungere e rimuovere campi con js:

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" lang="it"><head><title>Aggiungere campi in un modulo - Esempio JavaScript scaricato da HTML.it</title>
    
    
    
        
        <meta http-equiv="Content-type" content="text/html; charset=iso-8859-1">
        <meta http-equiv="Content-Language" content="it">
    <script type="text/javascript">
    <!--
    
    var arrInput = new Array(0);
      var arrInputValue = new Array(0);
    
    function addInput() {
      //arrInput.push(createInput(arrInput.length));
      arrInput.push(arrInput.length);
      //arrInputValue.push(arrInputValue.length);
      arrInputValue.push("");
      display();
    }
    
    function display() {
      document.getElementById('parah').innerHTML="";
      for (intI=0;intI<arrInput.length;intI++) {
        document.getElementById('parah').innerHTML+=createInput(arrInput[intI], arrInputValue[intI]);
      }
    }
    
    function saveValue(intId,strValue) {
      arrInputValue[intId]=strValue;
    }  
    
    function createInput(id,value) {
      return "<input type='text' id='test  name='file[]' "+ id +"' onChange='javascript:saveValue("+ id +",this.value)' value='"+ value +"'><br>";
    }
    
    function deleteInput() {
      if (arrInput.length > 0) { 
         arrInput.pop(); 
         arrInputValue.pop();
      }
      display(); 
    }
    // -->
    </script></head><body>
    <br><br>
    <a href="javascript:addInput()">Aggiungi un campo al modulo</a><br>
    <a href="javascript:deleteInput()">Rimuovi un campo dal modulo</a>
    
    <div align="center">
    <p id="parah"></p>
    
    
    </div>
    
    
    </body></html>
    

    E questa è la funzione interessata :
    [HTML]function createInput(id,value) {
    return "<input type='text' id='test name='file[]' "+ id +"' onChange='javascript:saveValue("+ id +",this.value)' value='"+ value +"'><br>";
    }
    [/HTML]
    Si dovrebbe ciclare $_FILES['file']....Il fatto è che vorrei anche provare, ma ho formattato da poco il pc e php non ce l'ho..Adesso installo un pacchetto così faccio due prove...Ti faccio sapere più tardi!:)
    Ola!:ciauz:


  • User Attivo

    Ciao ti volevo chiedere una cosa, ma se io volessi che quando l'utente (ovviamente registrato) carichi un immagine ed essa viene rinominata con l'id del utnete, come dovrei fare?
    (Cosi poi posso richiamarla e creare un avatar).

    Grazie Salvatore.


  • ModSenior

    Ciao Zomer,
    Sostituendo:
    [php]
    if(!@move_uploaded_file($this->files['tmp_name'],$this->dir.$id."_".$this->files['name']))//Upload!

    [/php]
    Con:
    [php]
    if(!@move_uploaded_file($this->files['tmp_name'],$this->dir.$id."_".$VariabileConID))//Upload!

    [/php]
    Dovrebbe funzionare.


  • User Attivo

    Allora credo che funzioni ma una volta che l'utente carica l'immagine poi dopo come posso prenderla? dovrei fare qualcosa del tipo <IMG SRC="avatar/ID.gif"> non trovi? :bho: ma cosi facnedo richimarei l'id del utente che visualizza l'immagine qundi se l'untete A si conette visualizza la foto A perche il suo id chiama la foto A.gif e se l'utnete B vuole visitare la pagina dell'untete A vedera l'immagine B.gif!!!! come posso risolvere questo probolema?


  • ModSenior

    Devi semplicemente fare cosi:
    [php]
    <IMG SRC="avatar/<?php echo $VariabileConID; ?>.gif">[/php]


  • User Attivo

    Si funziona...ma ci sono dei problemi...

    1. Quando carico l'immagine è la visualizzo l'immagine, (che è una foto) è nella sua dimensione reale, ovvero gigantesca! a tutto schermo, potrei applicare dei semplici tag height e width...ma l'immagine potrebbe essere schiacciata.

    2. Questa è una cosa, che credo di poter risolver,e ma vorrei ugualtmente un consiglio...come posso modificare l'estensione del immagine, perchè se non no riuscirei a richiamarla 😉


  • User Attivo

    Scusate ma dove va inserita la directory dove deve essere copiato il file?

    Grazie in anticipo.


  • Consiglio Direttivo

    Ciao pusherxx, il file che contiene la classe lo puoi mettere dove vuoi, l'importante è che assegni il giusto percorso quando la richiami con il:
    [php]require "class.upload.php";[/php]
    😉


  • User Attivo

    No, volevo sapere dove devo inserire la directory su cui verranno salvate le foto!


  • User Attivo

    Scusate, forse non sono stato chiaro e mi scuso, m'interessa sapere il campo, del codice PHP, in cui inserire la directory dove vanno a finire le immagini che andiamo ad upload-are!
    Scusate ancora e grazie in anticipo!:bho::bho:


  • Consiglio Direttivo

    Nell'inizializzazione della classe. 😉

    $obj = new upload($_FILES['file'],**"car/"**,$max_file_size,$image_type); //Inizializziamo la classe!
    

  • User Attivo

    Ok, grazie per la risposta, ma mi dice ancora "impossibile salvare nella directory"!! Come mai? Dove sbaglio??❌x❌x:x