Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it L'avatar di pappolo
    Registrato dal
    Mar 2003
    Messaggi
    251

    C'è un modo migliore per fare sta cosa? (Stringhe)

    Ho un campo foto nel db che è una stringa fatta in questo modo: image0001.jpg,image002.jpg,image0021321.jpg...

    Devo poter eliminare delle foto, quindi una volta eliminate devo levare dalla stringa il nome della foto e rifare la stringa. Il problema è che levando solo il nome della stringa mi posso trovare situazioni "scomode" come una doppia virgola, o una virgola a fine stringa (se elimino l'ultima foto)

    Ho scritto sta cosa, ma non mi soddisfa molto

    $foto_da_cancellare è il nome del file
    $result[foto] è la stringa con tutte le foto

    Codice PHP:
    //Levo la foto selezionata dalla stringa delle foto
    $nuovo_foto=str_replace($foto_da_cancellare''$result[foto]);
    $nuovo_foto=str_replace(",,"","$nuovo_foto); //Nel caso ci fossero 2 virgole consecutive ne levo 1
    //controllo se l'ultimo campo è una virgola
    $ultimo=strlen($nuovo_foto);
    $ultimo=$ultimo-1;
    $pos=strrpos($nuovo_foto",");//ultima virgola della stringa
    echo "ultimo è $ultimo - pos è $pos
    "
    //Lasciate perdere, era un semplice controllo
    if($pos == $ultimo) {
    $nuovo_foto=substr_replace($nuovo_foto""$ultimo);
    }
    echo 
    "$nuovo_foto
    "

    In effetti funziona, ma mi sembra molto maccheronico. Visto che ci ho eprso un sacco di tempo, mi piacerebbe sapere se c'era un metodo migliore per risolvere il problema, così capisco la prossima volta che ragionamenti fare.


    Grazie

  2. #2
    In effetti il ragionamento che hai fatto tu per roganizzare il db è sbagliato in partenza.

    Ogni campo del db deve contenere solo un dato.

    Ti starai chiedendo: "ma io voglio inserire più di una foto! Come faccio?".
    La risposta è molto semplice: join.

    Mysql mette a disposizione questa funzione che permette di unire due o più tabelle.

    Il mio cnsiglio, quindi, è quelli di creare un'altra tabella che magari chiamerai images e che conterrà due campi: id_articolo e foto.

    Ovviamente poi i nomi li scegli tu.

    Per ognu foto che inserisci aggiungi un record che memorizzerà il nome della foto (campo foto) e l'id dell'articolo corrispondente.

    In questo modo nella tabella articles avrai solo il testo degli articoli.

    Ti faccio un esempio per farti capire:

    codice:
    id  titolo  testo
    1    art 1  questo è l'art 1
    2    art 2  questo è l'art 2
    3    art 3  questo è l'art 3
    Se vorrai aggiungere una foto all'articolo 3 nella tabella images aggiungerai questa riga

    codice:
    id_articolo   foto
    3             Foto1.jpg
    Per adesso organizza il db in questo modo. Se non trovi atre info riguardo join apri una nuova discussione che ti aiuteremo a creare anche la query per estrarre e visualizzare il tutto. Ciao!

  3. #3
    Utente di HTML.it L'avatar di M4rko
    Registrato dal
    Dec 2000
    Messaggi
    619
    Probabilmente ti conviene usare explode ed implode per passare da array a stringa e viceversa
    www.php.net/implode
    www.php.net/explode
    con gli array magari sei piu comodo

    una cosa del genere:
    codice:
    $foto = explode(',' $result['foto']);
    $nuova = array_diff($foto, array($foto_da_cancellare));
    echo implode(',', $nuova);
    edit:
    fermo restando che l'organizzazione del database che ti ha proposto mircov è piu corretta
    Tutti hanno bisogno di credere in qualcosa.
    Io credo che mi farò un'altra birra.


  4. #4
    Utente di HTML.it L'avatar di pappolo
    Registrato dal
    Mar 2003
    Messaggi
    251
    Beh, si quello che dici è sicuramente giusto, in partenza l'organizzazione del db non è comodissima, portandosi dietro le stringhe, esplodendole, facendo le operazioni e implodendole di nuovo...

    Però al punto a cui sono arrivato col lavoro, è troppo scomodo tornare indietro e cambiare il tutto

    Dalla prossima volta però sicuramente prenderò questa strada

    Cmq ho anche risolto il problema delle stringhe, lavoro con gli array, èmolto + semplice:

    Codice PHP:
    $foto=explode(",",$result[foto]);
    $chiave=array_search($foto_da_cancellare$foto);
    $nuovo_foto=array_splice($foto,$chiave,1);
    $nuova=implode(",",$foto);
    echo 
    $nuova
    Grazie per la dritta

  5. #5
    Utente di HTML.it L'avatar di pappolo
    Registrato dal
    Mar 2003
    Messaggi
    251
    [supersaibal]Originariamente inviato da M4rko
    Probabilmente ti conviene usare explode ed implode per passare da array a stringa e viceversa
    www.php.net/implode
    www.php.net/explode
    con gli array magari sei piu comodo

    una cosa del genere:
    codice:
    $foto = explode(',' $result['foto']);
    $nuova = array_diff($foto, array($foto_da_cancellare));
    echo implode(',', $nuova);
    edit:
    fermo restando che l'organizzazione del database che ti ha proposto mircov è piu corretta [/supersaibal]
    Grazie M4rco, più o meno questa è la soluzione a cui sono arrivato io

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.