• User

    Associare descrizione ad un'immagine variabile, senza DB

    Ciao a tutti, ho cercato la soluzione al mio problema con il "cerca" ma non ho trovato ancora nulla che mi aiuti a risolvere.

    La mia situazione attuale è questa:

    Si tratta di una galleria immagini con Lightbox; l'ho resa dinamica e ho implementato un sistema di upload.

    Ho implementato un sistema di upload multiplo che mi carica più immagini alla volta semplicemente selezionandole in una volta sola, per intendersi: posso uploadare 1-10-50 file in una volta sola. Le immagini vengono caricate su una directory specifica SENZA db MySql.
    E fin qui OK.

    Integrando questo sistema con una semplice manager posso eseguire azioni come vedere, rinominare, eliminare file, tutto tramite browser.

    A questo punto, richiamo le immagini nella pagina del mio sito tramite il codice php:

    
        echo '<li><a href="'.$path.'/'.$file.'" title="prova"> <img src="'.$newpath.'/'.$file.'" /></a></li>';
    
    

    dove "path" è la cartella, e "file" è il nome del file (che ovviamente è sempre diverso).

    Abbinato ad uno script che mi ridimenziona le immagini, mi inserisce tutte le immagini esistenti dentro la mia cartella, e crea automaticamente le miniature corrispendenti.

    Il mio problema è questo:

    Vorrei inserire nel codice qui sopra anche il campo "title" per la descrizione delle immagini. Ma col metodo che ho usato, se lo inserissi normalmente, mi verrebbe per tutte le immagini uguale, ho bisogno che vari anch'esso, al variare dell'immagine.

    Non so bene cosa mi conviene fare, dovrei in qualche modo associare l'immagine alla propria descrizione. Ho provato a fare tutto utilizzando un db mysql, ma mi si sballa tutto il lavoro precedente, compreso l'upload multiplo.

    Qualche suggerimento su come potrei fare??

    Ringrazio tutti quelli che risponderanno anticipatamente!


  • ModSenior

    Ciao Wasp9,
    ti conviene fare una tabella nel database formata da 2 campi, nome immagine e descrizione, in maniera tale che oltre ad effettuare l'upload inserisci anche nel database la descrizione.


  • User Attivo

    Crei dei file .txt cn la descrizione ed altro che hanno lo stesso nome dell'immagine. Potrebbe essere pesante in prestazioni.


  • User

    @Thedarkita: eh anche la mia idea era quella, è che non sono riuscita a fare l'upload con selezione multipla sul db, riesco a farla solo su cartella specifica. Era una cosa che volevo mantenere..
    Avevo già provato a creare un uploader con nome immagine e descrizione, con la tabella a due campi sul database, e funziona, il fatto è che in questo modo perdo tutte le funzionalità di upload che avevo previsto.. Non c'è un altro modo?

    @linoma: la soluzione del txt potrebbe anche funzionare.. anche se siccome la galleria è generata automaticamente mi si incasina un po', dovrei inserire degli if eccetera..

    Domanda ad entrambi (dimenticavo, grazie per la risposta):
    Non c'è modo di creare un documento legato al una variabile dentro al campo "title".. tipo:

    title="$descrizione";

    dove la variabile $descrizione riporta ad una serie di elementi tipo per l'immagine "1.jpg" scrivi "olio su tela", per l'immagine "2.jpg", un altra cosa? Ma soprattutto, avrei bisogno che questo documento fosse modificabile dall'esterno, cioè non da me ma da altri tramine pannello di controllo..

    Che ne pensate di questa possibile soluzione?


  • User Attivo

    Non riesco a capire il perchè dici che perderesti le funzionalità di upload previste.
    Immagino che crei dinamicamente una cartella per ogni galleria. Esatto?


  • User

    no, le cartelle non sono create dinamicamente, ma ce nè cmq una per ogni galleria.. è che l'uploader che stò utilizzando utilizza anche ajax per la selezione multipla dei file da caricare, e non sono proprio riuscita a farlo funzionare su db.

    Se conoscete uploader che supportino la selezione multipla delle immagini da caricare su db, potrei provare a rivoluzionare il lavoro fatto fino ad ora.. è una gran palla ma almeno vado avanti! Ora sono ferma.. 😞

    Fatemi sapere e grazie!


  • User

    Con il MySQL sn un po' una pippa.. Però forse sono giunta ad una soluzione, il problema è che non riesco ad applicarla al codice.
    Sono sicura che qualcuno di voi saprà aiutarmi! 🙂

    Attualmente ho fatto questo codice, ma non va bene:

    
    $query = "SELECT * FROM images_tab";
    $result = mysql_query($query, $myconn) or dire ("Errore..");
    
    $numrows = mysql_num_rows($result);
    
    if ($numrows==0){
    echo "Database vuoto!";
    }
    else
    {
    
    for($x=0; $x<$numrows; $x++){
        
    $resrow = mysql_fetch_row($result);
    $id = $resrow[0];
    $name = $resrow[1];
    $desc = $resrow[2];
    
        echo '<li><a href="'.$path.'/'.$file.'" title="'.$desc.'"> <img src="'.$newpath.'/'.$file.'" width="130" /></a></li>';
        
    }
    }
    
    mysql_query();
    
    ```Questo codice non va bene, perchè nella galleria ripropone una singola immagine tante volte quante le descrizioni nel database. (nel db ho 6 descrizioni e nella galleria mi propone l'"immagine1" 6 volte, stessa cosa con l'immagine2, eccetera).
    
    Io vorrei fare in modo che:
    Se il nome dell'immagine nella cartella, è uguale al campo "nome" della tabella sul db, allora riporta la descrizione associata al "nome".
    (la variabile $file è il nome del file nella cartella)
    
    E' sicuramente una cosa banale, ma nn riesco proprio a risolvere! :cry:
    Qualche buon anima può aiutarmi? Grazie in anticipo!

  • User Attivo

    Non sei obbligata a caricare le immagini nel db... si può anche memorizzarne solo il nome.
    Poi, riguardo alle cartelle: se non le crei dinamicamente significa che le fai direttamente via ftp; soluzione poco comoda se il sito dovranno aggiornarlo altre persone.


  • User

    Non sei obbligata a caricare le immagini nel db... si può anche memorizzarne solo il nome.

    Infatti volevo fare così!! E' che non riesco a collegare tutto a modo, leggi il codice che ho messo sopra, non riesco a completarlo.. non sono una cima nei collegamenti mysql!

    Sapresti darmi una mano?:gtsad:

    ps. per le cartelle non devono venire create dall'utente quindi va bene così! no? :dull:


  • User Attivo

    Lascia perdere quel codice... così non vai avanti...
    Non pensare ai codici adesso... devi ragionare prima!

    Devi analizzare bene, solo nella tua testa, come vuoi organizzare il tutto...

    Ad esempio...

    Domanda: cosa deve fare il form html?
    Risposta: permettere di selezionare le immagini e permettere di inserire una descrizione per ogni immagine.

    Domanda: cosa deve fare lo script php?
    Risposta:
    fase 1: procedere all'upload, resize e rename delle immagini in modo univoco
    fase 2: ricevere i testi delle descrizioni
    fase 3: inserire nel db i dati (dopo vedremo come strutturare il db...)

    Domanda: come strutturiamo il db?
    Risposta: dipende da come vuoi organizzare il tutto...!
    Esempio: personalmente, invece di una cartella per ogni galleria, io farei una tabella nel db per ogni galleria... e una cartella unica per le immagini oppure, una cartella per le miniature e una per le big; in questo modo, ogni riga di una tabella (galleria) conterrebbe tutte le informazioni di ogni singola immagine... ed il nome di quella tabella, potrebbe essere un nome scelto in fase di form.


  • User

    Si ok, come dici di fare tu viene un lavoro sicuramente più pulito, io non ho utilizzato MySQL dall'inizio perchè non lo conosco benissimo, ma soprattutto non conosco le porzioni di codice da usare in php per richiamare le varie funzioni sql, quindi non riesco a far interagire bene insieme le due cose.

    A come organizzare il tutto ci ho già pensato..
    Anche se volessi fare una tabella per ogni galleria, poi non saprei come fare a far interagire il database con la pagina effettiva.. non parlo di form, quelli non sono un problema, ho difficoltà invece con i comandi mysql_query che invece non conosco!

    Non so.. hai qualche tutorial da suggerirmi? o se conosci tipologie di gallerie che utilizzano un sistema simile a quello che vorrei usare io, dal quale potrei osservare il funzionamento del codice..

    Grazie, fammi sapere..


  • User Attivo

    Perchè vuoi copiare?
    No no... fai da sola che è più bello! :wink3:

    Anch'io all'inizio mi ostinavo a NON usare il database; non sai quanti casini e spappolamenti di cervello per lavorare sui txt... :arrabbiato:
    Poi mi son deciso e mi son detto: perchè non l'ho fatto prima?

    Fai delle prove con questi script...

    File (connect.inc.php) con i dati di connessione, da includere in tutti gli script che fanno operazioni sul db:

    
    <?php
    ///////////////////////////////////
    // INSERIRE QUI I DATI DI MYSQL ///
    $host='xxx.xxx.xxx.xxx'; ///////////
    $username=''; ////////////
    $password=''; /////////////
    $database=''; //////////
    ///////////////////////////////////
    $dbconnect = mysql_connect($host,$username,$password);
    if (!$dbconnect) exit ('<p>Errore nella connessione al server</p>');
    if (!mysql_select_db($database)) exit ('<p>Errore nella connessione al database</p>');
    ?>
    
    

    File (install.php) da lanciare per cancellare la tabella e ricrearla (utile anche per 'resettare'):

    
    <?php
    require 'connect.inc.php';
    $query="DROP TABLE tabella_prova"; // cancella la tabella
    mysql_query($query);
    $query="CREATE TABLE tabella_prova (id INT (5) UNSIGNED not null AUTO_INCREMENT, campo_1 TEXT not null, campo_2 TEXT not null, campo_3 TEXT not null, KEY (id))"; // crea la tabella con 3 campi oltre al campo ID
    mysql_query($query);
    mysql_close();
    ?>
    
    

    E poi, per inserire i dati:

    
    <?php
    $valore1='Lorem';
    $valore2='ipsum';
    $valore3='dolor...';
    require_once 'connect.inc.php';
    $query='INSERT INTO tabella_prova (campo_1, campo_2, campo_3) VALUES ("'.$valore1'", "'.$valore2.'", "'.$valore3.'")';
    mysql_query($query);
    mysql_close();
    ?>
    
    

    ... e per estrarli:

    
    <?php
    require_once 'connect.inc.php';
    $query='SELECT * FROM tabella_prova';
    $query=mysql_query($query, $dbconnect);
    while ($valori=mysql_fetch_assoc($query)) {
    echo '<p><strong>ID record: '.$valori['id'].'</strong> - '.$valori['campo_1'].' '.$valori['campo_2'].' '.$valori['campo_3'].'</p>';
    }
    mysql_close();
    ?>
    
    

    Dai... smanetta! :smile5:


  • User

    Ti ringrazio davvero per i codici che mi hai dato.. Ho preso un pochino spunto e sono quasi riuscita a risolvere..

    Vorrei*** sincronizzare*** i nomi delle immagini all'interno della cartella che contiene i file, con il campo "nome" nella tabella sul database.

    Praticamente voglio che quando aggiungo un file senza form, ma tramie ftp, nella cartella che contiene le immagini, il php che contiene la galleria faccia un **controllo del contenuto della cartella e SE un nome immagine manca nel database, lo aggiunga automaticamente.

    **In parte ci sono riuscita con questo codice:```

    if ($file == $valori['nome_img']) {
    break;
    }
    elseif ($file !== $valori['nome_img']) {

    $query2= "INSERT INTO img_gallery.galleria_1 (id, nome_img, descrizione, altro) VALUES (NULL, '$file', 'descrizione prova', '')";
    $query2=mysql_query($query2, $dbconnect);
    

    }

    
    dove $file è l'array dei nomi delle immagini contenute nella cartella.
    
    In parte funziona, perche quando il codice viene letto, i valori dei nomi dei file, vengono aggiunti tranquillamente nel db. 
    Il problema, è che se aggiorno la pagina che contiene il codice, questo mi aggiunge nuovamente tutti i nomi delle immagini un altra volta.
    
    Ho provato con degli if, o degli isset, ma non sn riuscita ancora a risolvere..
    
    Vorrei che il codice controllasse se i nomi della cartella sono all'interno del db, e qualora mancassero li aggiungesse, non che tutte le volte mi riaggiunge TUTTI i nomi dei file! 
    
    *Credo il problema principale sia che va sostituito "$file" nell'"INSERT INTO" in modo che mi aggiunga solo i valori che mancano al database, e non tutti, ma non so come fare!*
    
    Qualcuno è in grado di aiutarmi?

  • User Attivo

    @Wasp9 said:

    In parte ci sono riuscita con questo codice:
    Postalo completo altrimenti non si capisce.


  • User
    
    <?php
    
        // Includo la class
    include("classe.php");
    
    //definisco il percorso delle cartelle che contengono le immagini 
    $path = "galleria/gruppo/images";
    $newpath = "galleria/gruppo/thumb";
    
    //scandisco la cartella con le immagini
    $dir_handle = @opendir($path) or die("Unable to open folder");
    
    while (false !== ($file = readdir($dir_handle))) {
     
    if($file == "index.php")
    continue;
    if($file == ".DS_Store")
    continue;
    if($file == ".")
    continue;
    if($file == "..")
    continue;
    
    //inserisco i dati di connessione al db
    require_once 'connect.inc.php';
    
    //queste sono prove
    $nome_file_db = $valori['nome_img'];
    $nome_file = $file;
    $uguali = $nome_file_db == $nome_file;
    $nonuguali = $nome_file_db !== $nome_file;
    
    //
    if ($file == $valori['nome_img']) {
        continue;
        }
    
        else {
    
    //dico di inserire il nome dei file contenuti nella cartella, nel campo della tabella "nome_img"
            
        $query2= "INSERT INTO img_gallery.galleria_1 (id, nome_img, descrizione, altro) VALUES (NULL, '$file', 'descrizione prova', '')";
        $query2=mysql_query($query2, $dbconnect);
        
        }
    
    //questa parte di codice va bene, perchè mi riporta nella galleria le immagini che hanno la corrispondenza del nome sul database
    $query='SELECT * FROM galleria_1';
    $query=mysql_query($query, $dbconnect);
    while ($valori=mysql_fetch_assoc($query)) {
    
    if ($file == $valori['nome_img']) {
        
        echo '<li><a href="'.$path.'/'.$file.'" title="'.$valori['descrizione'].'"> <img src="'.$newpath.'/'.$file.'" width="130" /></a></li>';
        
    }
    
    }
    mysql_close();    
    
    //parametri che mi permettono il ridimenzionamento delle immagini per creare le miniature
        $resizeObj = new resize('galleria/gruppo/images/' . $file);
        $resizeObj -> resizeImage(130, 130, 'crop');
        $resizeObj -> saveImage('galleria/gruppo/thumb/' . $file, 100);
        
    }    
    
    //chiudo la directory
    closedir($dir_handle);    
    
    ?>
    
    

    L'ho commentato ora alla buona, spero si capisca..

    In sostanza cmq ho bisogno che lo script controlli se i nomi dei file nella cartella, sono presenti anche nel campo "nome_img" della tabella sul database, se si, non deve fare niente, se mancano dei nomi, di aggiungerli al database.. è possibile?

    Ricordo che attualmente ad ogni esecuzione dello script mi aggiunge al database TUTTI i nomi dei file presenti nella cartella, creando innumerevoli duplicati inutili.


  • User Attivo

    Te li aggiunge tutti perchè non effettua alcun controllo nel db...

    In particolare qui:

    
    //queste sono prove
    $nome_file_db = $valori['nome_img'];
    $nome_file = $file;
    $uguali = $nome_file_db == $nome_file;
    $nonuguali = $nome_file_db !== $nome_file;
    
    

    $valori['nome_img'] è nulla perchè non fai una query di estrapolazione dati prima...
    Guarda bene, tra i codici che ti ho postato ieri.


  • User
        
       $prova='SELECT * FROM galleria_1';
        $prova=mysql_query($prova, $dbconnect);
        while ($valori=mysql_fetch_assoc($prova)) {
            
            $nome_file_db = $valori['nome_img'];
    
    } //chiude while
    
    if ($file == $nome_file_db) {
        
        continue;
        
        }
        
        else {
    
        $query2= "INSERT INTO img_gallery.galleria_1 (id, nome_img, descrizione, altro) VALUES (NULL, '$file', 'descrizione prova', '')";
        $query2=mysql_query($query2, $dbconnect);
        
        }
    
    

    Non cambia praticamente niente.. mi duplica cmq le immagini se eseguo più volte lo script.
    Dove sbaglio?


  • User
    
    $query2= "INSERT INTO img_gallery.galleria_1 (id, nome_img, descrizione, altro) VALUES (NULL, '$file', 'descrizione prova', '')";
    $query2=mysql_query($query2, $dbconnect);
    
    

    ma il problema non è legato al fatto che nella stringa che ho riportanto qua sopra, ci sia la variabile $file (che è la lettura dei file nella directory)?

    In quel punto dovrebbe starci una variabile che indica i nomi dei file che mancano al database.. voglio dire, dovrei mettere a confronto in qualche modo i file nella cartella e i valori sul database.. poi dovrei inserire al posto di $file una variabile derivata dal confronto.. no?

    Non so più dove sbattere la testa.. :arrabbiato:


  • User Attivo

    Non vedi la soluzione perchè non applichi la logica...

    'SELECT * FROM galleria_1'
    

    che tradotto in italiano significa:

    Seleziona tutti i campi della tabella galleria_1

    Il ciclo while non fa altro che scorrere, uno per uno, tutti i record (righe) di quella tabella e la variabile $valori['nome_img'] assume il valore di quel campo ogni volta che cambia la riga...

    quindi?...

    Poi, selezioni una tabella ed inserisci i dati in un'altra? ($query2) :arrabbiato:


  • User Attivo

    Ciao tigrone,

    Credo di avere bisogno del tuo aiuto per le immagini. Vengo subito al dunque. inizio a dire che lavoro da un bel po (qualche mese) con il php e html, e devo dire che rispetto visual basic da cui venivo è tutto un'altro mondo. Premesso questo, mi piace anche presentarmi, mi chiamo Fabio da Roma. Piacere a tutto il forum. Fatte le dovute presentazioni, vengo subito al problema. Allora, vorrei realizare una specie di raccolta foto come in facebook per intenderci, ma con il database. Quindi, m'interessa la selezione multipla innanzi tutto, che posso selezionare una o più foto in contemporanea, e poi metterci ad ogni foto selezionata, il titolo e vederle in miniatura. In ultimo, una volta che si è creato chiamiamolo così album di miniature, dovrei avere la possibilità di cliccarci sopra e ingrandirle. Tutto ciò è fattibile ???? Mi potresti aiutare per favore ???? Ho provatop dei codici ed anche inventarmi qualcosa di mio mescolando le varie soluzioni, ma ho ottenuto solo cacate senza soluzione. I campi che m'interessano per la tabella sono i seguenti:

    Titolo (della foto)
    Nome della foto (credo corrisponda al link).

    Aspetto tue notisie, spero al più presto. Grazie.