• User Attivo

    [Script] Fotogallery con Resize + LightBox + Categorie

    Ciao a tutti!
    Essendo sempre al lavoro per ottimizzare la mia fotogallery, questa volta ne è nata una nuova e mi sembrava doveroso renderla disponibile a chi, come me, avesse bisogno di una cosa semplice che, senza tanti fronzoli, ridimensioni le immagini, creandone le anteprime, e divida le foto in categorie (se lo si vuole).

    Features:
    ? Resize automatico delle foto in una data cartella, sia delle foto originali che delle anteprime mantenendo inalterate le proporzioni
    ? Visualizzazione foto tramite Lightbox 2
    ? Possibile divisione delle foto in infinite categorie
    ? Paginazione delle anteprime

    Demo:
    http://www.sanpaolosassari.it/fotogallery.php?mode=choose

    Script:
    http://rapidshare.com/files/208422598/easyfotogallery.zip.html

    Il cuore dello script sta nella pagina script.fotogallery.php in cui è necessario modificare le prime 5 variabili secondo le proprie esigenze:
    [php]
    <?php
    ##########################################

    EasyPhotogallery

    Script by Inverter

    Per info: [email protected]

    Lo script è liberamente modificabile

    ##########################################

    Variabili di Configurazione.

    Settarle secondo il proprio utilizzo

    $SizeTh = 130; //Grandezza dell'anteprima
    $SizePh = 580; //Grandezza della foto originale
    $DirGallery = "foto"; //Nome della cartella in cui sono contenute le sottocartelle o le foto
    $MaxPhoto = 20; //Numero massimo di foto per pagina. 0 = tutte.
    $Compression = 100; //Compressione dell'immagine

    Inizio dello script

    ini_set("memory_limit", "128M"); //Settaggio a 128mb del limite imposto dal php.ini
    set_time_limit(3000); //Prolungamento del limite imposto dal timer del php.ini

    /**

    • Controllo dell'esistenza di eventuali categorie e sottocattegorie passate via GET (col nome £cat1, $cat2, ...) i cui nomi sono inseriti nell'array $cat
      /
      $link_cat = ""; //Valorizzazione della variabile link_cat utilizzata per creare il link in caso siano usate le categorie
      if(isset($_GET['cat1']))
      {
      $var_cat = "";
      $i = 1;
      while ($i < 100)
      {
      $cat
      = $_GET['cat'.$i];
      $var_cat .= $cat*."/";
      $link_cat .= "cat".$i."=".$cat*."&";
      $i = $i + 1;
      if (!isset($_GET['cat'.$i]))
      break;
      }
      }

    /**

    • Creazione delle variabili $photo_path ed $thumb_path
      */
      if (!empty($var_cat))
      {
      $photo_path = $DirGallery."/".$var_cat;
      $thumb_path = $DirGallery."/".$var_cat."thumbnails";
      }
      else
      {
      $photo_path = $DirGallery."/";
      $thumb_path = $DirGallery."/thumbnails";
      }

    /**

    • Controllo dell'esistenza della cartella thumbnails all'interno della categoria scelta.
    • Se non esiste verrà creata
      */
      if (!file_exists($thumb_path))
      mkdir($thumb_path);

    /**

    • Apertura cartella e inserimento delle foto nell'array $photos solo se la foto è in formato jpeg
      */
      if ($handle = opendir($photo_path)) {
      while (false !== ($file = readdir($handle))) {
      if ($file != '.' && $file != '..' && $file != "Thumbs.db" && $file != "thumbnails")
      {
      list($width, $height, $type) = getimagesize($photo_path.$file) or die("Impossible to get the file data");
      if ($type == 2)
      $photos[] = $file;
      }
      }
      closedir($handle);
      }
      else
      echo "Impossibile aprire la cartella";

    /**

    • Recupero della pagina passata via GET
      */
      if (isset($_GET['page']))
      $page_num = $_GET['page'];
      else
      $page_num = 1;

    /**

    • Resize delle foto da visualizzare nella pagina mantenendo le proporzioni.
      */

    //Calcolo dell'indice di inizio delle foto da ridimensionare
    if ($page_num == 1 || $MaxPhoto == 0)
    $z = 0; //Indice della prima foto per il loop
    else
    $z = $MaxPhoto * ($page_num - 1);

    //Controllo del numero di foto per pagina. Se $MaxPhoto = 0 verrrano ridimensionate tutte le foto in una volta sola.
    $MaxPhoto = ($MaxPhoto == 0) ? count($photos) : $MaxPhoto;

    //Calcolo dell'indice dell'ultima foto da ridimensionare
    $last = (($MaxPhoto * $page_num) >= count($photos)) ? count($photos) : $MaxPhoto * $page_num;

    //Inizio ciclo per il ridimensionamento della foto originale e della relativa anteprima
    for ($i = $z; $i < $last; $i++)
    {
    //Ritorna le dimensioni della foto originale
    list($width, $height, $type) = getimagesize($photo_path.$photos*) or die("Impossible to get the file data");

    //Calcolo delle nuove dimensioni per la foto originale.
    if($width > $height)  
    {  
        $new_width = $SizePh;
        $new_height = ($SizePh * $height) / $width;
        $new_height = number_format($new_height, 0);
    }                        
    elseif($height > $width)  
    {  
        $new_height = $SizePh;
        $new_width = ($SizePh * $width) / $height;
        $new_width = number_format($new_width, 0);
    }
    elseif($height == $width)  
    {
        $new_width = $SizePh;
        $new_height = $SizePh;
    }
    
    //Controllo se è già stata ridimensionata la foto. In caso contrario procedo con il ridimensionamento
    //La foto ridimensionata verrà sovrascritta a quella originale
    if ($new_width != $width && $new_height != $height) 
    {                
        $destimg = imagecreatetruecolor($new_width,$new_height) or die("Problemi nelle creazioni dell'immagine");
        $srcimg = ImageCreateFromJPEG($photo_path.$photos*) or die("Problemi nell'aprire l'immagine");
        ImageCopyResampled($destimg,$srcimg,0,0,0,0,$new_width,$new_height,ImageSX($srcimg),ImageSY($srcimg)) or die("Problemi nel ridimensionamento");
        ImageJPEG($destimg, $photo_path.$photos*, $Compression) or die("Problemi nel salvataggio");
    }
    
    //Ritorna le dimensioni della foto originale utili per creare l'anteprima
    list($width, $height, $type) = getimagesize($photo_path.$photos*) or die("Impossible to get the file data");
    
    //Calcolo delle dimensioni dell'anteprima
    if($width > $height)  
    {  
        $new_width = $SizeTh;
        $new_height = ($SizeTh * $height) / $width;
        $new_height = number_format($new_height, 0);
    }                        
    elseif($height > $width)  
    {  
        $new_height = $SizeTh;
        $new_width = ($SizeTh * $width) / $height;
        $new_width = number_format($new_width, 0);
    }
    elseif($height == $width)  
    {
        $new_width = $SizeTh;
        $new_height = $SizeTh;
    }
    
    //Controllo se esiste già l'anteprima della foto.
    //Se non esiste verrà creata e salvata nella cartella di destinazione delle anteprime
    if (!file_exists($thumb_path."/".$photos*)) 
    {                
        $destimg = imagecreatetruecolor($new_width,$new_height) or die("Problemi nelle creazioni dell'immagine");
        $srcimg = ImageCreateFromJPEG($photo_path.$photos*) or die("Problemi nell'aprire l'immagine");
        ImageCopyResampled($destimg,$srcimg,0,0,0,0,$new_width,$new_height,ImageSX($srcimg),ImageSY($srcimg)) or die("Problemi nel ridimensionamento");
        ImageJPEG($destimg, $thumb_path."/".$photos*, $Compression) or die("Problemi nel salvataggio");
    }
    

    }

    /**

    • Stampa a video delle foto in base al numero di foto per pagina scelto.
      */
      // Inizio del ciclo per stampare a video le foto
      $i = 0;
      foreach ($photos as $key => $value) {
      //Creazione del titolo della foto dal nome della stessa
      $title = explode('.' , $value);
      $title = str_replace('_' , ' ' , $title[0]);

      //Se l'indice iniziale è minore dell'indice della prima anteprima da mostrare, viene stampato a video solo il link nascosto della foto, utile per la lightbox
      if ($i < $z)
      echo "<a href="".$photo_path.$value."" rel="lightbox[roadtrip]" title="".$title."" style="display:none;"> </a>\n";

      // Se l'indice iniziale è maggiore o uguale dell'inidce della prima foto da mostrare ed è anche minore dell'indice dell'ultima foto, allora stampo a video l'anteprima
      elseif ($i >= $z && $i < $last)
      echo " <a href="".$photo_path.$value."" rel="lightbox[roadtrip]" title="".$title.""><img src="".$thumb_path."/".$value."" title="".$title."" border="0" alt="".$title."" class="img-indice" /></a> \n";

      // Se l'indice iniziale è maggiore o uguale dell'ultima foto da mostrare, allora stampo solo il link nascosto per la lightbox
      elseif ($i >= $last)
      echo "<a href="".$photo_path.$value."" rel="lightbox[roadtrip]" title="".$title."" style="display:none;"> </a>\n";

      $i++;
      }

    /**

    • Paginazione dell'array $photos
      */

    $maxPage = ceil(count($photos)/$MaxPhoto); //Conteggio delle pagine
    $self = $_SERVER['PHP_SELF'];

    //Navbar
    $nav = '';
    for($page = 1; $page <= $maxPage; $page++) {
    if ($page == $page_num) // Se siamo nella pagina corrente, allora non verra mostrato il link allla stessa pagina
    $nav .= " $page ";
    else // altrimenti viene mostrato
    $nav .= " <a href="".$self."?".$link_cat."page=".$page."" title="Pagina $page di $maxPage">$page</a> ";
    }

    //Previous Link
    if ($page_num > 1) {
    $page = $page_num - 1;
    $prev = " <a href="".$self."?".$link_cat."page=".$page."" title="Pagina $page di $maxPage"><< precedente</a> ";
    }
    else {
    $prev = ''; // Il link non verrà mostrato se siamo nella prima pagina
    }

    //Next Link
    if ($page_num < $maxPage) {
    $page = $page_num + 1;
    $next = " <a href="".$self."?".$link_cat."page=".$page."" title="Pagina $page di $maxPage">successivo >></a> ";
    }
    else {
    $next = ''; // Il link non verrà mostrato se siamo nell'ultima pagina
    }

    //Mostra i Links di paginazione
    echo "<br />Pagine: ", $prev . $nav . $next ;
    ?>
    [/php]Il resto poi vien da se. Bisogna includere lo script nella pagina in cui si vogliono mostrare le anteprime con un include:
    fotogallery.php
    [php]<?php include 'script.fotogallery.php'; ?>[/php]All'interno della quale, nel tag head, vanno inseriti i link relativi alla lightbox (che, se volete la versione più aggiornata, potete scaricare QUI😞
    [html]
    <script type="text/javascript" src="lightbox/js/prototype.js"></script>
    <script type="text/javascript" src="lightbox/js/scriptaculous.js?load=effects,builder"></script>
    <script type="text/javascript" src="lightbox/js/lightbox.js"></script>
    <link rel="stylesheet" href="lightbox/css/lightbox.css" type="text/css" media="screen" />[/html]A questo punto non vi resta che mandare un link alla pagina fotogallery.php. Se avete diviso le foto in tante cartelle (che devono stare dentro la cartella principale settata con la variabile $DirGallery), aggiugete al link il valore cat1 più il nome della cartella. Se le categorie sono a loro volta divise in altre sottocategorie dovete passare anche il vaolre cat2 più il nome della sottocartella (e così via per tutte le sotto cartelle all'infinito).

    Se non avete categorie quindi il link punterà semplicemente alla pagina fotogallery.php, altrimenti sarà una cosa del genere:

    <a href="fotogallery.php?cat1=NomeCartella&cat2=NomeSottoCartella&cat3=NomeSottoSottoCartella">Fotogallery</a>
    ```Spero vi sia utile!
    Ciao!

  • User Attivo

    Riuppo il file con lo script perchè mi hanno fatto notare che rapidshare lo ha eliminato per aver superato il limite.
    Ecco qui:

    http://inverter.ilbello.com/script/fotogallery.zip
    

    :ciauz:


  • User

    Grazie per la fotogallery. Promette davvero bene.

    Nel mio test ho riscontrato questi "problemi":

    1. Ho inserito la cartella "fotogallery" in una sottocartella del mio sito. In modo da ottenere un indirizzo "script/fotogallery/fotogallery.php"
      A questo punto ho notato che la variabile $DirGallery andava settata con il percorso intero della cartella e che quindi va settata: "script/fotogallery/foto". (può essere utile alle altre persone che devono configurarlo)

    2. Ho creato 2 sottocartelle nella cartella "foto". "Fotografie" e "Imm".
      Se ora richiamo lo script:

     <?php include 'script.fotogallery.php'; ?>  
    

    Mi viene restituito l'errore:

    **Warning**:  getimagesize(script/fotogallery/foto/Imm) [function.getimagesize]: failed to open stream: Permission denied in **C:*xampp\htdocs\miosito\script\fotogallery\script.fotogallery.php** on line **76**
    Impossible to get the file data
    

    Se invece richiamo tramite:

    http***localhost/apl/script/fotogallery/fotogallery.php?cat1=Imm
    

    Mi vengono restuiti questi errori:

    
    **Warning**:  include(common/config.php) [function.include]: failed to open stream: No such file or directory in **C*xampp\htdocs\apl\script\fotogallery\fotogallery.php** on line **9**
    
    **Warning**:  include(common/config.php) [function.include]: failed to open stream: No such file or directory in **C*xampp\htdocs\apl\script\fotogallery\fotogallery.php** on line **9**
    
    **Warning**:  include() [function.include]: Failed opening 'common/config.php' for inclusion (include_path='.;C**xampp\php\pear\') in **C*xampp\htdocs\apl\script\fotogallery\fotogallery.php** on line **9**
    
    **Warning**:  include(common/header.php) [function.include]: failed to open stream: No such file or directory in **C*xampp\htdocs\apl\script\fotogallery\fotogallery.php** on line **10**
    
    **Warning**:  include(common/header.php) [function.include]: failed to open stream: No such file or directory in **C*xampp\htdocs\apl\script\fotogallery\fotogallery.php** on line **10**
    
    **Warning**:  include() [function.include]: Failed opening 'common/header.php' for inclusion (include_path='.;C:\xampp\php\pear\') in **C*xampp\htdocs\apl\script\fotogallery\fotogallery.php** on line **10**
       ? Fotogallery
       	 	
    **Warning**:  include(classes/script.fotogallery.php) [function.include]: failed to open stream: No such file or directory in **C*xampp\htdocs\apl\script\fotogallery\fotogallery.php** on line **58**
    
    **Warning**:  include(classes/script.fotogallery.php) [function.include]: failed to open stream: No such file or directory in **C*xampp\htdocs\apl\script\fotogallery\fotogallery.php** on line **58**
    
    **Warning**:  include() [function.include]: Failed opening 'classes/script.fotogallery.php' for inclusion (include_path='.;C*xampp\php\pear\') in **C*xampp\htdocs\apl\script\fotogallery\fotogallery.php** on line **58**
    	 	
    Pagine: 	
     	    
    **Warning**:  include(common/footer.php) [function.include]: failed to open stream: No such file or directory in **C*xampp\htdocs\apl\script\fotogallery\fotogallery.php** on line **72**
    
    **Warning**:  include(common/footer.php) [function.include]: failed to open stream: No such file or directory in **C*xampp\htdocs\apl\script\fotogallery\fotogallery.php** on line **72**
    
    **Warning**:  include() [function.include]: Failed opening 'common/footer.php' for inclusion (include_path='.;C*xampp\php\pear\') in **C*xampp\htdocs\apl\script\fotogallery\fotogallery.php** on line **72
    ```**

  • User Attivo

    Errore mio, ti ringrazio per la segnalazione.

    Nel pacchetto che ho riupputo avevo inserito un file "fotogallery.php" che c'entrava ben poco con lo script. Ho rinserito tutto e puoi scaricare la versione corretta sempre dallo stesso link! 😉

    Comunque, se tu hai una cartella "fotogallery" al cui interno inserisci sia la cartella "foto" sia i due file necessari, non devi inserire in $DirGallery l'intero percorso della cartella "foto", bensì devi inserire solo il nome di quest'ultima, senza slash finale.

    Se hai altri problemi, sono qui 🙂


  • User

    Eccomi 😄

    Ora il richiamo tramite URL nel browser della pagina fotogallery.php?cat1=img funziona perfettamente.

    Non so se è una pratica evitabile o che mi sconsigli, ma se effettuo un:

    require ('script/fotogallery/fotogallery.php?cat1=Imm');
    ```per inserire la galleria in una pagina che ho già costruito, continuano ad uscirmi questi errori:
    

    Warning: require(script/fotogallery/fotogallery.php?cat1=Imm) [function.require]: failed to open stream: No such file or directory in C:\xampp\htdocs\apl\index.php on line 55

    Warning: require(script/fotogallery/fotogallery.php?cat1=Imm) [function.require]: failed to open stream: No such file or directory in C:\xampp\htdocs\apl\index.php on line 55

    Fatal error: require() [function.require]: Failed opening required 'script/fotogallery/fotogallery.php?cat1=Imm' (include_path='.;C:\xampp\php\pear') in C:\xampp\htdocs\apl\index.php on line 55

    
    Altrimenti mi costruisco un piccolo pannello di amministrazione e amen :D

  • User Attivo

    [..]

    Più che altro non capisco cosa intendi fare con questo 😄
    Se tu hai già una pagina con il layout costruito e preferisci utilizzare quella, ti basta inserire l'include in questa pagina.

    Cioè, se la tua pagina si chiama ciao.php, all'interno di questa inserisci la funzione:
    [php] <?php include 'script.fotogallery.php'; ?> [/php]Fatto ciò, sarà questa pagina a gestire e a visualizzare le foto. Quindi se vorrai vedere la categoria "Imm", dovrai richiamarla tramite il link: ciao.php?cat1=Imm

    Per quanto riguarda il pannello di controllo, avevo una mezza intenzione di farlo, però poi ho cambiato idea perchè solitamente inserisco una grande quantità di foto tutte in una volta, perciò utilizzare un pannello mi avrebbe solo fatto sprecare tempo;)
    Se vuoi, puoi fartelo.. devi solo uploadare le foto all'interno della cartella che ti interessa!


  • User

    Scusami mi era andato in pappa il cervello.

    Ho creato un pannello di amministrazione per inserire una descrizione alla galleria ed associarla ad una cartella precedentemente caricata, in modo che nel sito (avendo un grande numero di gallerie) mi venga mostrata la lista gallerie.
    Cliccando sulla descrizione/nome di ogni galleria l'utente accede alla pagina con le thumbnails.

    Per il resto il tuo script mi sembra che faccia benissimo il suo dovere 😉

    Grazie mille!


  • User

    Bel lavoro, sto effettivamente per testarlo ti faccio i miei complimenti. Ti aggiornerò! 😉 spero di non aver problemi.


  • User

    @Pepozzo said:

    Scusami mi era andato in pappa il cervello.

    Ho creato un pannello di amministrazione per inserire una descrizione alla galleria ed associarla ad una cartella precedentemente caricata, in modo che nel sito (avendo un grande numero di gallerie) mi venga mostrata la lista gallerie.
    Cliccando sulla descrizione/nome di ogni galleria l'utente accede alla pagina con le thumbnails.

    Per il resto il tuo script mi sembra che faccia benissimo il suo dovere 😉

    Grazie mille!

    Ciao Pepozzo, senti vorrei chiderti la cortesia se è possibile ovviamente. Puoi passarmi quello che hai fatto a livello anche di pannello di amministrazione perchè sto facendo un piacere a un amico e non il tempo materiale di mttermi a giochicchiare sopra.. anche se l'ho gia scaricato.
    Attendo notizie. Se vuoi ti mando un PM con la mia e-mail.
    Saluti e grazie per la gentilezza


  • User Attivo

    Ciao ti volevo chiedere una cosa ho trovato questo script per l'upload

    h**p://wwwgiorgiotaveit/forum/scripting-e-risorse-utili/101524-script-classe-per-lupload.html

    ora vorrei che qunado io carico un immagine viene creata una miniatura come posso fare?


  • User Attivo

    Se ho ben capito tu vuoi effettuare il resize di una sola immagine nello stesso istante in cui viene uploadata?
    Se è così ti conviene cercare degli script appositi (c'è ne sono un sacco in giro) che permettono proprio il resize di una immagine per volta.

    se altrimenti ti interessa utilizzare proprio quella classe per qualche motivo in particolare, vediamo cosa si può fare 😉


  • User Attivo

    Non so, dammi tu qualche link 🙂 ora ti spiego io ed un mio amico stiamo creando un social network ora io vorrei che l'utnete possa caricare una sua immagine che poi io posso richiamare. Il mio problema avviene quando carico l'immagine. Essa viene richiamata a grandezza natuarale e mi occupa tutta la pagina! :arrabbiato: ho provato con i tag height e wight ma ho capito che ogni utnete uploada un immagine differenze e che è difficile trovare uno standar...io ho anche provato da solo a modificare il tuo script ma con sacrsi risultati come puoi notarea questo link h**p://forum.it.altervistaorg/php-mysql-e-file-database/95116-problema-con-script-per-il-ridimensionamento-immagini-era-mi-concedetehtml
    Mi aiuteresti?

    Ciao! :ciauz:


  • User Attivo

    Uno può essere questo:
    php.html.it/script/vedi/4792/image-upload-with-resize/

    Comunque, con un pò di pazienza si può fare tutto: la prima cosa necessaria è il form, che come saprai deve essere contrassegnato dall'attributo enctype="multipart/form-data" utile a inviare i files.

    <form action="submit.php" method="post" enctype="multipart/form-data">
              <input name="image_upload" type="file" />
              <input type="submit" name="submit" value="Upload image" />
    </form>     
    ```Dopo, non ti resta che creare lo script vero è proprio a cui rimanda lo stesso form:
    [php]
    <?php
    $SizePh = 580; //Dimensione della foto dopo l'elaborazione
    $DirGallery = "foto/"; //Nome della cartella in cui salvare la foto
    $Compression = 100; //Compressione dell'immagine
    
    
    ini_set("memory_limit", "128M"); //Settaggio a 128mb del limite imposto dal php.ini
    set_time_limit(3000); //Prolungamento del limite imposto dal timer del php.ini
    
    
    //Ritorna le dimensioni della foto originale
    list($width, $height, $type) = getimagesize($_FILES["image_upload"]["tmp_name"]) or die("Impossible to get the file data");
        
    //Calcolo delle nuove dimensioni per la foto originale.
    if($width > $height)  
    {  
            $new_width = $SizePh;
            $new_height = ($SizePh * $height) / $width;
            $new_height = number_format($new_height, 0);
    }                        
    elseif($height > $width)  
    {  
            $new_height = $SizePh;
            $new_width = ($SizePh * $width) / $height;
            $new_width = number_format($new_width, 0);
    }
    elseif($height == $width)  
    {
            $new_width = $SizePh;
            $new_height = $SizePh;
    }
    
    $destimg = imagecreatetruecolor($new_width,$new_height) or die("Problemi nelle creazioni dell'immagine");
    $srcimg = ImageCreateFromJPEG($_FILES["image_upload"]["tmp_name"]) or die("Problemi nell'aprire l'immagine");
    ImageCopyResampled($destimg,$srcimg,0,0,0,0,$new_width,$new_height,ImageSX($srcimg),ImageSY($srcimg)) or die("Problemi nel ridimensionamento");
    ImageJPEG($destimg, $DirGallery.$_FILES["image_upload"]["name"], $Compression) or die("Problemi nel salvataggio");
    ?>
    [/php]Ho cercato di renderlo il più semplice possibile, ma ovviamente uno script del genere ha alcune limitazione, non ultima quella che processa solo immagini Jpeg.
    Comunque questo può servire per farti capire come procedere, dopodichè esistono parecchie guide su come usare le librerie GD per creare semplici anteprime:)

  • User Attivo

    ma ovviamente uno script del genere ha alcune limitazione, non ultima quella che processa solo immagini Jpeg.

    propio per questo avevo pensato di fare un upload con database, ho trovato questo:

    [PHP]
    <?php
    // Verifico eventuali problemi nell'upload del file
    if((!isset($_FILES["file_inviato"])) || ($_FILES["file_inviato"]["error"] != UPLOAD_ERR_OK))
    echo "Errore nell'invio del file. Riprova!");

    // Connessione e selezione del database
    mysql_connect("localhost", "***", "")
    or die("Connessione non riuscita: " . mysql_error());

    if(!mysql_select_db("my_zomer"))
    die("Selezione database fallita!");

    // Recupero delle informazioni sul file inviato
    $nome_file_temporaneo = $_FILES["file_inviato"]["tmp_name"];
    $nome_file_vero = $_FILES["file_inviato"]["name"];
    $tipo_file = $_FILES["file_inviato"]["type"];

    // Leggo il contenuto del file
    $dati_file = file_get_contents($nome_file_temporaneo);

    // Preparo il contenuto del file per la query sql
    $dati_file = addslashes($dati_file);

    // Query per inserire il file nel DB
    $query = "INSERT INTO tabella_file SET
    nome = '$nome_file_vero',
    tipo = '$tipo_file',
    dati = '$dati_file'";

    mysql_query($query)
    or die("Query non valida: " . mysql_error());

    // Messaggio di successo
    echo "Memorizzazione del file <b>$nome_file_vero</b> nel database eseguita correttamente!");
    ?>
    [/PHP]

    con una tabella cosi:

    [PHP]
    CREATE TABLE immagini_gruppi
    (
    id INT (10) NOT NULL auto_increment,
    nome VARCHAR (255) default NULL,
    tipo VARCHAR (128) default NULL,
    dati BLOB,
    PRIMARY KEY (id)
    )
    [/PHP]

    dove memorizzo anche il formato poi basta richiamre l'id e il formato corrispondenete all'id e il gioco è fatto, ma come potrei intregratre questa pagina con quella che hai fatto tu?


  • User

    Questa galleria e ben fatta
    ma come tutti i clienti chiedono... ma nn si puo mettere la descrizione all'immaggine??

    ed ecco che si deve per forza avere un db!

    Giusto?


  • User Attivo

    Pova a vedere qui

    h**p://xhtml.html*it/guide/lezione/1678/inserire-le-immagini/

    ATTENZIONA CMABIA GLI ASTERISCHI


  • User Attivo

    @Zomer said:

    propio per questo avevo pensato di fare un upload con database, ho trovato questo:
    ...

    Più che altro continuo a non capire se ti interessa che l'immagine sia ridimensionata al momento dell'upload o al momento della visualizzazione.
    Perchè, nel primo caso, ti basterebbe inserire l'ultima porzione di codice che ho scritto nel mmio ultimo post, alla fine di questo che hai scritto tu, così da ottenere:

    [php]
    <?php
    // Verifico eventuali problemi nell'upload del file
    if((!isset($_FILES["file_inviato"])) || ($_FILES["file_inviato"]["error"] != UPLOAD_ERR_OK))
    echo "Errore nell'invio del file. Riprova!");

    $SizePh = 580; //Dimensione della foto dopo l'elaborazione
    $DirGallery = "foto/"; //Nome della cartella in cui salvare la foto
    $Compression = 100; //Compressione dell'immagine

    ini_set("memory_limit", "128M"); //Settaggio a 128mb del limite imposto dal php.ini
    set_time_limit(3000); //Prolungamento del limite imposto dal timer del php.ini

    // Connessione e selezione del database
    mysql_connect("localhost", "***", "")
    or die("Connessione non riuscita: " . mysql_error());

    if(!mysql_select_db("my_zomer"))
    die("Selezione database fallita!");

    // Recupero delle informazioni sul file inviato
    $nome_file_temporaneo = $_FILES["file_inviato"]["tmp_name"];
    $nome_file_vero = $_FILES["file_inviato"]["name"];
    $tipo_file = $_FILES["file_inviato"]["type"];

    // Leggo il contenuto del file
    $dati_file = file_get_contents($nome_file_temporaneo);

    // Preparo il contenuto del file per la query sql
    $dati_file = addslashes($dati_file);

    // Query per inserire il file nel DB
    $query = "INSERT INTO tabella_file SET
    nome = '$nome_file_vero',
    tipo = '$tipo_file',
    dati = '$dati_file'";

    mysql_query($query)
    or die("Query non valida: " . mysql_error());

    //Ritorna le dimensioni della foto originale
    list($width, $height, $type) = getimagesize($nome_file_temporaneo) or die("Impossible to get the file data");

    //Calcolo delle nuove dimensioni per la foto originale.
    if($width > $height)
    {
    $new_width = $SizePh;
    $new_height = ($SizePh * $height) / $width;
    $new_height = number_format($new_height, 0);
    }
    elseif($height > $width)
    {
    $new_height = $SizePh;
    $new_width = ($SizePh * $width) / $height;
    $new_width = number_format($new_width, 0);
    }
    elseif($height == $width)
    {
    $new_width = $SizePh;
    $new_height = $SizePh;
    }

    $destimg = imagecreatetruecolor($new_width,$new_height) or die("Problemi nelle creazioni dell'immagine");
    $srcimg = ImageCreateFromJPEG($nome_file_temporaneo) or die("Problemi nell'aprire l'immagine");
    ImageCopyResampled($destimg,$srcimg,0,0,0,0,$new_width,$new_height,ImageSX($srcimg),ImageSY($srcimg)) or die("Problemi nel ridimensionamento");
    ImageJPEG($destimg, $DirGallery.$nome_file_vero, $Compression) or die("Problemi nel salvataggio");

    // Messaggio di successo
    echo "Memorizzazione del file <b>$nome_file_vero</b> nel database eseguita correttamente!");

    ?>
    [/php]Nel secondo dei due casi invece dovresti semplicemente spostare il file temporaneo, nella cartella da te selezionata come cartella principale della fotogallery. Ci sarebberò cioè due script che collaborano: uno che carica l'immagine in una cartella e l'altro che, quando viene richiamato, ridimensiona tutte le foto e le visualizza.

    😉

    @mcmmultimedia said:

    Questa galleria e ben fatta
    ma come tutti i clienti chiedono... ma nn si puo mettere la descrizione all'immaggine??

    ed ecco che si deve per forza avere un db!

    Giusto?

    Come ho scritto nel primo post, ho costruito questa gallery, proprio nell'intento di creare una cosa semplice e funzionale al tempo stesso, tralasciando tutto ciò che può sembrare superfluo. Nessuno però impedisce di creare una piccola tabella mysql su cui inserire il nome della foto e una sua descrizione. In questo modo non ci sarà bisogno di aprire una cartella per eseguire il ridimensionamento, ma basterà una query.

    Con un pò di fantasia e pazienza si può fare tutto, ma non è l'obbiettivo principale di questa fotogallery 😉


  • User

    Perfetto...
    Attualmente le foto relative alle gallerie gia le carico anche nel db, ho anche creato dal back and anche la funzione per eliminarle (anche fisicamente dalla cartella)

    Puoi darmi una mano a fare in modo che sotto ogni immaggine venga visualizzata anche una descrizione!


  • User Attivo

    Più che altro continuo a non capire se ti interessa che l'immagine sia ridimensionata al momento dell'upload o al momento della visualizzazione.

    Allora ora ti spiegho quello che ho fatto. Io in collaborazione con un mio amico ho creato un social network dve gli utenti si registrano è possono creare un profilo, in questo profilo l'utente inserisce i suoi dati e un'immagine ora quello che voglio creare io è un metodo per careicare un immagine è inserirla nella pagina del profilo dell'utente. Ora ti posto una screen di quello che accede su facebook

    h**p://img81imageshackus/img81/4093/cartaidentitai*jpg

    Ora proviamo a ricavare il link dell'immagine

    hp://w.facebookcom/albumphp?profile=1&id=163966*

    ***Qello che vedi in grasetto e sottolineato :quote: è il mio id ciò cosa significa? che facebook ha richiamato la mia immagine con il mio id.****Ora io non sò se facebook ha ridiensionato l'immagine o cosa ha fatto (anche sentito parlare di Thumbnail). Comuque io voglio creare qualcosa del genere sei si deve, anche con il database (per me sarebbe meglio) io so che tu ne sei capace, perchè sei molto bravo e non credo che ti toglierà più di 10 minuti. :wink3:

    Grazie



  • User Attivo

    @mcmmultimedia said:

    Perfetto...
    Attualmente le foto relative alle gallerie gia le carico anche nel db, ho anche creato dal back and anche la funzione per eliminarle (anche fisicamente dalla cartella)

    Puoi darmi una mano a fare in modo che sotto ogni immaggine venga visualizzata anche una descrizione!

    Allora, consideriamo una banale tabella mysql così formata: ID | NOME | DESCRIZIONE
    Suggerirei a questo punto, per non stravolgere il codice, di inserire una query solo al momento della visualizzazione delle anteprime, inserendo nel "title" la descrizione delle stesse.
    Quindi la porzione di codice da cambiare è successiva al resize e precedente alla paginazione:
    [php]
    /**

    • Stampa a video delle foto in base al numero di foto per pagina scelto.
      */
      //Query per recuperare le descrizioni delle foto
      $result = mysql_query("SELECT * FROM nometabella") or die ("Impossibile recuperare le informazioni dal db. Errore: ".mysql_error());

    // Inizio del ciclo per stampare a video le foto
    $i = 0;
    while ($row = mysql_fetch_array($result)) {
    //Creazione del titolo della foto dal nome della stessa
    $title = explode('.' , $value);
    $title = str_replace('_' , ' ' , $title[0]);

    //Se l'indice iniziale è minore dell'indice della prima anteprima da mostrare, viene stampato a video solo il link nascosto della foto, utile per la lightbox    
    if ($i < $z)  
        echo "<a href=\"".$photo_path.$row['nome']."\" rel=\"lightbox[roadtrip]\" title=\"".$row['descrizione']."\" style=\"display:none;\">&nbsp;</a>\n";
    
    //    Se l'indice iniziale è maggiore o uguale dell'inidce della prima foto da mostrare ed è anche minore dell'indice dell'ultima foto, allora stampo a video l'anteprima            
    elseif ($i >= $z && $i < $last)
        echo " <a href=\"".$photo_path.$row['nome']."\" rel=\"lightbox[roadtrip]\" title=\"".$row['descrizione']."\"><img src=\"".$thumb_path."/".$row['nome']."\" title=\"".$row['descrizione']."\" border=\"0\" alt=\"".$row['descrizione']."\" class=\"img-indice\" /></a> \n";            
    
    // Se l'indice iniziale è maggiore o uguale dell'ultima foto da mostrare, allora stampo solo il link nascosto per la lightbox
    elseif ($i >= $last) 
        echo "<a href=\"".$photo_path.$row['nome']."\" rel=\"lightbox[roadtrip]\" title=\"".$row['descrizione']."\" style=\"display:none;\">&nbsp;</a>\n";
        
    $i++;
    

    }
    [/php]Questo cambiamento impone che tu NON utilizzi la suddivisione in categorie, altrimenti bisognerebbe strutturare il back-end e la tabella mysql in modo più complicato
    🙂

    @Zomer said:

    Allora ora ti spiegho quello che ho fatto. Io in collaborazione con un mio amico ho creato un social network dve gli utenti si registrano è possono creare un profilo, in questo profilo l'utente inserisce i suoi dati e un'immagine ora quello che voglio creare io è un metodo per careicare un immagine è inserirla nella pagina del profilo dell'utente. Ora ti posto una screen di quello che accede su facebook

    h**p://img81imageshackus/img81/4093/cartaidentitai*jpg

    Ora proviamo a ricavare il link dell'immagine

    hp://w.facebookcom/albumphp?profile=1&id=163966*

    ***Qello che vedi in grasetto e sottolineato :quote: è il mio id ciò cosa significa? che facebook ha richiamato la mia immagine con il mio id.Ora io non sò se facebook ha ridiensionato l'immagine o cosa ha fatto (anche sentito parlare di Thumbnail). Comuque io voglio creare qualcosa del genere sei si deve, anche con il database (per me sarebbe meglio) io so che tu ne sei capace, perchè sei molto bravo e non credo che ti toglierà più di 10 minuti. :wink3:

    Grazie

    Ok, adesso ho capito finalmente cosa ti serve, e ho anche capito che in realtà c'entra poco con il mio script iniziale. Sarebbe bello continuare la discussione in un altro topic separato, li potremmo parlare senza trarre in inganno chi cerca di capire come funziona questa specie di "tutorial" 😉
    Ci rivediamo in un altro topic!:)