• User Attivo

    Immagini nelle cartelle

    Buona Sera,
    Sul mio sito web memorizzo immagini inviate dagli utenti su un database mysql.

    Però questo metodo non fa altro che consumare spazio al database.
    Se vorrei inserirle in una cartella, dopo come farei a richiamare le singole foto per ogni utente ?

    Grazie


  • Consiglio Direttivo

    Ciao infosicurezza,
    potresti salvare il nome del file sul Db ed associare ad ogni file l'id utente.
    🙂


  • User Attivo

    [...]

    E poi scusa il database non rispetta la normalizzazione, perchè avrei :
    ID 1 foto1.jpg
    ID 1 foto2.jpg
    ID 1 foto3.jpg
    ecc... o sbaglio ? poi metti caso che una foto abbia lo stesso nome. dovrei rinominare !


  • User Attivo

    Ciao Infosicurezza, al massimo potresti avere per ogni articolo

    img_1, img_2,....
    

    non appesantiresti il db, in quanto il suggerimento era per inserire nel db il nome dell'immagine, ma non l'immagine stessa.
    Altrimenti dovresti optare per un'inserimento diretto in cartella, ma quando caricheresti l'immagine gli dovresti associare l'id_articolo. Scegli tu tra le 2 quale preferisci
    Ciao


  • User Attivo

    Ciao Infosicurezza, Samyom non intendeva questo ovviamente.

    Supponendo che tu abbia una tabella così costituita:

    utenti: ID - NOME - INFOVARIE

    Ti crei un'ulteriore tabella, chiamandola IMMAGINI, così costituita:

    immagini:ID - utenti_id - filename

    Ora cosa fai quando un utente carica un'immagine?!

    • Prima cosa, rinomini l'immagine in modo univoco (con valori alfanumerici), in modo che le immagini non vengano mai sovrascritte in fase di upload all'interno della cartella (magari omogeneizzando anche il formato).
    • Inserisci all'interno della tabella immagini, l'id dell'utente e il nome del file rinominato.
      ES:[PHP] $query='insert into immagini ([idUtente], "[nomeImmagine]")';
      mysql_query($query);[/PHP]
    • Se devi recuperare tutte le immagini di un utente, non ti resta che fare una select.
      Supponendo che l'id dell'utente sia 10:
      [PHP]$query='select filename from immagini where utente_id=10';
      [/PHP]
      A questo punto, otterrai tutti i nomi dell'immagini, facilmente recuperabili conoscendo la cartella dove è stato effettuato l'upload.

    Spero sia chiaro.
    Ciao 🙂


  • User Attivo

    [...]

    Ciao Bazarop, come mai creare un'altra tabella, e non inserire degli ulteriori campi nella tabella articoli, tipo

    id_articolo, descrizione, img_1, img_2, img_3
    ```voglio dire una cosa, non sono una cima, quindi i miei consigli si fermono a quello che è la mia esperienza, e non posso essere che contento quando leggo una soluzione migliore.
    Ciao da danny :ciauz:

  • User Attivo

    Ciao Danny,
    questo perchè non puoi sapere quante immagini l'utente caricherà.
    Supponendo che un utente carichi 10 immagini, dovresti creare precedentemente almeno 10 attributi(campi) all'interno della tabella. Se un'utente ne dovesse caricare 20, dovresti crearne 20 e così via.

    Nel tuo caso quindi daresti un limite al numero di immagini che un utente può caricare. 🙂

    Questo metodo utilizzato è un tipo di relazione chiamato "Uno a molti", ovvero "un utente" in relazione con "molte immagini".
    In mysql, le relazioni possibile sono uno a uno, uno a molti, molti a molti.
    Per approfondire il modello relazionale delle tabelle in mysql, vi consiglio di visionare questa breve guida: http://database.html.it/articoli/leggi/1723/il-modello-di-relazioni-tra-tabelle-in-mysql/

    Ciao


  • User Attivo

    [...]

    Grazie, buona questa
    Ciao da danny alla prossima


  • User Attivo

    Si ora mi è tutto chiaro,
    Mica potreste postarmi qualche esempio di come rinominare il file inviato?
    P.s. siamo sicuri che poi aruba mette a disposizione lo spostamento delle immagini nelle cartelle ?

    P.s2 non ditemi niente ragazzi, per evitare nuovi post forse inutili avrei bisogno di chiarire alcune cose.
    Dovrei fare l'eliminazione dei contenuti che si trovano in un ciclo dopo che la query ha restituito il risultato. Io avrei pensato cosi :
    [php]
    $i = 0;
    while($row = mysql_fetch_array($var))
    {
    $i = $i +1;
    //ELEMENTI DA STAMPARE...
    <form method="POST" action="">
    <input type="text" name="elimina$i" value="Cancella">
    </form>
    }
    [/php]

    Vabbè e poi tutta la parte dinamica. Bene la domanda è : cosa ne pensate se passo la variabile $i così so cosa eliminare visto che sono tanti commenti di tutti gli utenti.
    Inoltre non vorrei quel bottone dell'input, vorrei un link, oppure un immagine al posto di essi, qualche idea ?? Grazie