Visualizzazione risultati 1 fino 19 di 19

Discussione: php visualizza immagini da cartella e associa con i campi

  1. #1
    blackskyisback non è connesso Utente attivo
    Data registrazione
    29-05-2012
    Messaggi
    452

    Predefinito php visualizza immagini da cartella e associa con i campi

    Problema,
    questo codice scansiona le immagini da una cartella salvati precedentemente, il nome del file ha questo formato
    Alberto Sordi nm0814773.jpg, notare questo, nm0814773, e il codice imdb per gli attori, lo stesso codice e' salvato nel mio database
    quello che vorrei ottenere e associare questo codice con il file e il campo del database, che sarebbe questo actors.imdbid
    se presente nella pagina allora visualizza l'immagine

    questo scansiona la cartella e trova le immagini, ma poi non so come procedere

    Codice PHP:
    $search_dir = 'images_actors_profile/';

    $images = glob("$search_dir/*.jpg");

    //var_dump($images);

    foreach ($images as $img)

    {
    echo
    $img .'<br>';
    }
    qui dovrei visualizzare le immagini, non e' una, perche' ogni film ha diversi attori,

    attualmente vedo una solo immagine, ed e' quella sbagliata

    Codice PHP:
    div class="castbox"><p><?php echo "<img src='$img' height='150' width='180' /> "; ?>
    se serve la query la posto

    grazie
    Ultima modifica di blackskyisback : 22-11-2022 alle ore 15.17.01

  2. #2
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,145

    Predefinito

    Non mi è chiarissimo il tutto, o meglio non mi è chiaro perché devi partire dall'immagine: nella cartella avrai n immagini. Come fai a capire quale attore vuoi mostrare? Vuoi mostrarli tutti quelli presenti nella cartella? E nel database cosa vuoi leggere? Il nome dell'attore?

    Se non ho capito male dalla tua frase:
    qui dovrei visualizzare le immagini, non e' una, perche' ogni film ha diversi attori,
    Quindi avrai una pagina di un determinato film, noto (dipende dall'URL immagino). A questo punto selezioni dal database tutti gli attori di quel film (questa query dipende come hai strutturato le tabelle) e quindi mostri l'immagine corrispondente all'attore. Quindi non mi è chiaro perché partire dalle immagini invece che dal film voluto. Sbaglio?

    Se invece il tuo codice è corretto (e non ho capito nulla di quel che vuoi fare ), puoi comunque ottenere il codice che hai evidenziato in grassetto e fare una query del tipo SELECT * FROM actors WHERE imdbid = basename($img, '.jpg')

    Però poi non ho capito cosa vuoi ricavare con quella query, o meglio come ottenere altre immagini.

    Ciao!
    Ultima modifica di alemoppo : 22-11-2022 alle ore 23.22.47

  3. #3
    blackskyisback non è connesso Utente attivo
    Data registrazione
    29-05-2012
    Messaggi
    452

    Predefinito

    ciao alemoppo

    spero che questa volta riesco a farmi capire, e' presente una cartella con dentro le foto del profilo attore, questa

    images_actors_profile

    i filename hanno tuttiil codice imdbid nel nome, esempio questo

    Linda Blair nm0000304.jpg

    vedi screen




    adesso visualizzo tutti gli attori con una sola foto, l'ultima caricata, ma devono essere associati con imdbid memorizzato nel database (se presente) e quello del filename con imdbid




  4. #4
    blackskyisback non è connesso Utente attivo
    Data registrazione
    29-05-2012
    Messaggi
    452

    Predefinito

    Citazione Originalmente inviato da alemoppo Visualizza messaggio

    Se invece il tuo codice è corretto (e non ho capito nulla di quel che vuoi fare ), puoi comunque ottenere il codice che hai evidenziato in grassetto e fare una query del tipo SELECT * FROM actors WHERE imdbid = basename($img, '.jpg')

    Ciao!
    la query in questo caso serve solo per visualizzare imdbib (ed altro), penso che si deve effettuare un match tra filename e codice imdb

    Linda Blair nm0000304.jpg = $row->imdbid (se e' presente, in caso contrario visualizzare quella di default, vuoto)

    con il codice sopra vengono estratti tutti i file, var_dump lo conferma, e anche lo screen sopra, ma solo per l'ultima caricata, quindi poi bisogna abbinarli
    Ultima modifica di blackskyisback : 22-11-2022 alle ore 23.54.53

  5. #5
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,145

    Predefinito

    Scusami, sarà l'ora ma non ho capito cosa vuoi fare

    Hai la cartella "images_actors_profile" con varie immagini, nel nome del file c'è il codice imdbid.

    Hai il for() che cicla tutte le immagini della cartella, quindi ad esempio ammettiamo che il primo file che apre è "Linda Blair nm0000304.jpg", cosa deve fare lo script?
    La difficoltà è estrarre il codice dal nome file? (puoi farlo con le varie funzioni delle stringhe (in particolare strpos o substr o anche basename per eliminare l'estensione), sempre che non vuoi scomodare le espressioni regolari.

    Quindi, con il cdice nmxxx immagino vorrai andare a cercare questo codice sul database, ma per fare cosa? Vuoi estrarre il nome dell'attore? (non credo, è già presente nel nome del file)

    EDIT: Ho visto ora la tua nuova risposta. Ma imdbid non lo hai già? (dal nome del file)
    Ri-edit: ma quindi nm0814773 non è il codice imdbid, ma è un altro codice salvato su db? Quindi se non ho capito male conoscendo il codice "nm0814773" ti servirebbe ricavare il codice imdbid salvato su db, corretto?

    Ciao!
    Ultima modifica di alemoppo : 22-11-2022 alle ore 23.58.45

  6. #6
    blackskyisback non è connesso Utente attivo
    Data registrazione
    29-05-2012
    Messaggi
    452

    Predefinito

    semplificando,
    se il codice imdbid di ogni attore e' presente nella pagina associalo all'immagine relativa della cartella (dove e presente il codice imdbid nel nome), per tutti gli altri visualizza una immagine vuota di default

    nella scheda del film Il ragazzo di campagna (1984) solo 3 attori hanno il codice imdbid memorizzato nel database

    nella cartella

    Renato Pozzetto nm0694843.jpg
    Massimo Boldi nm0092789.jpg
    Enzo Cannavale nm0134073.jpg

    nel database

    actors.imdbid nm0694843
    actors.imdbid nm0092789
    actors.imdbid nm0134073

    la query e' a oggetti quindi uso questo nel codice php $row->imdbid





    codice attuale

    Codice PHP:
    $search_dir = 'images_actors_profile/*' . $row->imdbid . '/';

    $images = glob("$search_dir/*.jpg");

    //var_dump($images);

    foreach ($images as $img)

    {
    //echo $img .'<br>';
    }


    ?>
    Codice HTML:
    <div class="castbox"><p><?php echo "<img src='$img' height='80' width='100' /> "; ?>
    Ultima modifica di blackskyisback : 23-11-2022 alle ore 10.08.08

  7. #7
    blackskyisback non è connesso Utente attivo
    Data registrazione
    29-05-2012
    Messaggi
    452

    Predefinito

    aggiornato il codice php inserendo if ed else e i dati (database e cartella) , adesso visualizzo cosi, ma il problema rimane





    Codice PHP:
    <?php
    if (($row->imdbid)) {

    echo
    "<img src='$img' height='80' width='100' /> ";


    }else{
    echo
    "<img src='images/noimage.jpg' height='80' width='100' /> ";
    }
    ?>
    Ultima modifica di blackskyisback : 23-11-2022 alle ore 07.25.28

  8. #8
    blackskyisback non è connesso Utente attivo
    Data registrazione
    29-05-2012
    Messaggi
    452

    Predefinito

    aggiornamento

    se nella scheda film e' presente solo un attore con il codice imdbid allora l'immagine e' associata





    in caso contrario il codice non riesce a collocare le photo associate all'attore con imdbid

    var_dump visualizza tutti gli array, penso che il problema risieda nel foreach
    Ultima modifica di blackskyisback : 23-11-2022 alle ore 08.16.27

  9. #9
    blackskyisback non è connesso Utente attivo
    Data registrazione
    29-05-2012
    Messaggi
    452

    Predefinito

    forse ho trovato il sistema, ma mi servirebbe una regex (espressione regolare)

    dovrei prelevare tutto fino fino a nm

    Christina Ricci nm0000207.jpg

    esempio:

    Christina Ricci (anche gli spazi)

    nm0000207.jpg devo escludere


    Codice PHP:

    // qui inserisco l'espressione regolare che fa il match del nome

    $dir = 'images_actors_profile/';

    // imdid viene prelevato da qui

    $id = $row->imdbid;

    combino il tutto e dovrei avere il percorso completo con la foto associata

    Codice PHP:
    echo "<img src='$dir$id' height='80' width='100' /> ";

  10. #10
    darbula non è connesso AlterGuru 2500
    Data registrazione
    24-04-2011
    Messaggi
    2,894

    Predefinito

    Il punto è che solo il database conosce la posizione del file jpg del tuo attore.
    Per visualizzare la foto singola inizia con un tipo di query DataBase mentre in film può essere più foto di diversi attori occorre una query Database diversa.
    Non devi cercarli tramite php ma il tuo Database ti dice quale imdbid. Una volta chiarito questo con php ci fai quel che vuoi anche regex ovviamente dal file recuperato ma prima di metterlo dentro i tag HTML.
    Quindi se ho capito bene potrai avere tutti i imdbid nel tuo database però nella foto puo essere anche senza mm##### finale? (Quindi aggiungi quel imdbid nel tag html)
    Devi associare i valori del tuo database al file html compreso il file jpg non cercarli a caso tramite php.
    Ultima modifica di darbula : 23-11-2022 alle ore 12.54.14

  11. #11
    blackskyisback non è connesso Utente attivo
    Data registrazione
    29-05-2012
    Messaggi
    452

    Predefinito

    Citazione Originalmente inviato da darbula Visualizza messaggio
    Il punto è che solo il database conosce la posizione del file jpg del tuo attore.
    Per visualizzare la foto singola inizia con un tipo di query DataBase mentre in film può essere più foto di diversi attori occorre una query Database diversa.
    Non devi cercarli tramite php ma il tuo Database ti dice quale imdbid. Una volta chiarito questo con php ci fai quel che vuoi anche regex ovviamente dal file recuperato ma prima di metterlo dentro i tag HTML.
    Quindi se ho capito bene potrai avere tutti i imdbid nel tuo database però nella foto puo essere anche senza mm##### finale? (Quindi aggiungi quel imdbid nel tag html)
    Devi associare i valori del tuo database al file html compreso il file jpg non cercarli a caso tramite php.
    Nel database (4 milioni di dati movie e altri 4 per attori ) non sono memorizzati riferimenti con le foto, non esiste nessun campo con le foto, le foto sono scaricate tramite scraping dal sito imdb, quidi il riferimento e tramite il filename con imdbid e imdbid memorizzato nel database
    avevo pensato di cercare le foto tramite il nome e imdbid memorizzato nel database, ma non e' fattibile, i campi del nome sono memorizzati partendo dal cognome al nome
    anche invertendo l'array

    Esempio:

    name
    database

    Fenomeno, Jimmy il

    imdbid

    nm0271978

    nome filename

    Jimmy il Fenomeno nm0271978.jpg

    oppure

    name database

    Blair, Linda (I)

    imdbid

    nm0000304

    nome filename

    Linda Blair nm0000304.jpg

    rimane la strada del php e della espressione regolare per scansionare tutto il filename e prendere il resto da imdbid
    Ultima modifica di blackskyisback : 23-11-2022 alle ore 14.36.04

  12. #12
    darbula non è connesso AlterGuru 2500
    Data registrazione
    24-04-2011
    Messaggi
    2,894

    Predefinito

    È impossibile risolvere tramite espressioni regolari poiché non conosci pienamente la struttura. Cioè il codice che può funzionare è comunque immondizia (anche se ti farebbe guadagnare un milione di Euro al mese) com'è la struttura dei tuoi dati nel database del resto.
    Se dalla scheda singola attore ad esempio cerchi per nome tramite form html Renato Pozzetto dovrai effettuare una query Database per il tuo campo nome che in questo caso coincide con il valore del form html (Renato Pozzetto). Normalmente lì avrai il tuo imdbid -(se la Select * From) però il tuo imdbid è un campo creato a parte anche la funzione glob può usare l'espressione regolare.
    Con PCRE se la stringa di input è con imdbid finale è
    Codice PHP:
    <?php
    $imdbid
    = 'nm0694843';
    $stringa_attore = 'Renato Pozzetto ';
    $url = '/path/' . $stringa_attore . $imdbid . '.jpg';
    $pattern = $imdbid; // nm0694843
    preg_match('/' . $pattern . '\\.jpg/s', $url, $arr);
    var_dump($arr);

    ?>
    e qualcosa di simile per glob (sebbene la sintassi può essere diversa).
    L'esempio è per ricerca tramite imdbid.

    Come hai menzionato prima actors.imdbid se il campo actors.name è Renato Pozzetto non dovrebbe difficile a costruire il percorso del filesytem in una stringa da ricercare. Giustamente la scheda film si basa per quell'attore e successivamente potrai recuperare anche i dati per più attori di quel film. (Se la SELECT contiene informazioni su di loro oltre l'attore principale).
    Ultima modifica di darbula : 23-11-2022 alle ore 18.34.34

  13. #13
    blackskyisback non è connesso Utente attivo
    Data registrazione
    29-05-2012
    Messaggi
    452

    Predefinito

    la select e' gia nel file php, funziona benissimo e ricupera tutti gli attori legati al film

    Codice PHP:
    SELECT
    actors
    .name,
    movies2actors.as_character,
    movies2actors.movieid,
    movies2actors.actorid,
    actors.imdbid,
    actors.actorid,
    actors.birthday,
    movies.year
    FROM
    movies2actors
    INNER JOIN actors ON movies2actors
    .actorid = actors.actorid
    INNER JOIN movies ON movies2actors
    .movieid = movies.movieid
    WHERE
    movies2actors
    .movieid = $film_id
    grazie, vi aggiorno

  14. #14
    darbula non è connesso AlterGuru 2500
    Data registrazione
    24-04-2011
    Messaggi
    2,894

    Predefinito

    Bene, quindi recupera name e imdbid e costruisci la url, ripeti questa operazione per tutti gli attori del film :)
    Poi usi la regex (inserire il pattern) nella funzione glob che verifica se realmente esiste quell'attore e nmnumero.jpg
    Ultima modifica di darbula : 23-11-2022 alle ore 21.19.34

  15. #15
    blackskyisback non è connesso Utente attivo
    Data registrazione
    29-05-2012
    Messaggi
    452

    Predefinito

    Citazione Originalmente inviato da darbula Visualizza messaggio
    Bene, quindi recupera name e imdbid e costruisci la url, ripeti questa operazione per tutti gli attori del film :)
    Poi usi la regex (inserire il pattern) nella funzione glob che verifica se realmente esiste quell'attore e nmnumero.jpg
    imdbid memorizzato nell database e' uguale al filename delle foto, cosa diversa per il name perche' quello memorizzato nel datababase e' diverso di quello del finename foto

    Codice PHP:
    $stringa_attore = 'Renato Pozzetto ';
    $stringa_attore non va bene, il regex deve prendere tutto fino all'inizio di imdbid e poi controllare se e' presente imdbid

    vedi qui, ho spiegato sopra

    https://forum.it.altervista.org/php-...ml#post1483834
    Ultima modifica di blackskyisback : 24-11-2022 alle ore 11.49.42

  16. #16
    darbula non è connesso AlterGuru 2500
    Data registrazione
    24-04-2011
    Messaggi
    2,894

    Predefinito

    Oh si scusa mi sono perso.
    Se la scheda film contiene 4 attori avrai quattro pattern (se tutti hanno imdbid). Alternanza in PCRE è dal carattere | e quindi il pattern 'nm[056781].jp[!g]*g'
    con glob e poi usi preg_match con imdbid fisso che scorre la variabile array generata da glob.
    L'esempio poiché imdbid è una sequenza esatta di nm e 6 cifre numeriche creo la regex con ogni numero unico tra i 4 imdbid
    Ho adattato la regex glob seguendo la sintassi di php.net ma probabilmente non ti funzionerà in quel modo (mentre con PCRE di php il punto ha valore speciale e per rappresentare se stesso usa il carattere di fuga backslash cioè \.)
    Ultima modifica di darbula : 24-11-2022 alle ore 15.52.10

  17. #17
    blackskyisback non è connesso Utente attivo
    Data registrazione
    29-05-2012
    Messaggi
    452

    Predefinito

    NOTA: name e imdbid sono memorizzati nel database

    piccolo miglioramento con questo codice che effetua il reverse del name, adesso visualizzo le immagini abbinando name e imdbid

    ma ci sono dei casi in cui non ricevo risultati

    esempio questi, nel database

    Fenomeno, Jimmy il

    Garinei, Enzo (I)

    nella cartella hanno questo nome

    Jimmy il Fenomeno nm0271978.jpg

    Enzo Garinei nm0307451.jpg

    consigli?






    codice

    Codice PHP:
    <?php

    $matches
    = array();
    preg_match('/(.*?)(\w+)$/', $row->name, $matches);


    echo
    '<br>';

    $first = $matches[2];
    $delimiter1 = ' ';
    $delimiter2 = ''.$row->imdbid;
    $second = $matches[1];

    $tag_stringa = ucwords($first.$delimiter1.$second).$delimiter2;

    $tag_string = trim($tag_stringa);
    $img = str_replace(['(I)',','], '', $tag_string).'.jpg';
    //var_dump($tag_stringa);
    $dir = 'images_actors_profile/';


    ?>
    Codice PHP:
    <?php

    //var_dump($first.$delimiter1.$second);
    var_dump($matches);

    echo
    '</br>';

    if ((
    $row->imdbid)) {

    echo
    "<img src='$dir$img$imdb' height='80' width='100' /> ";


    }else{
    echo
    "<img src='images/noimage.jpg' height='80' width='100' /> ";
    }
    ?>

  18. #18
    darbula non è connesso AlterGuru 2500
    Data registrazione
    24-04-2011
    Messaggi
    2,894

    Predefinito

    No in questo modo è per tentativi mentre con regex (tutti i numeri unici degli attori) della funzione glob ti ritorna array oppure se vuoi demolire il tuo pc fai la regex in
    Codice PHP:
    $arr = glob('images_actors_profile/*nm0307451.jp[!g]*g');
    preg_match('/nm0307451\\.jpg/', $arr[0], $matches);
    var_dump($arr, $matches);
    per ogni imdbid di scheda film ma intanto fai quella prova singolarmente.
    Ultima modifica di darbula : 24-11-2022 alle ore 20.22.34

  19. #19
    blackskyisback non è connesso Utente attivo
    Data registrazione
    29-05-2012
    Messaggi
    452

    Predefinito

    darbula risolto,
    grazie per i tuoi consigli, ringrazio anche alemoppo

    ho dovuto rifare il codice ma ora funziona, adesso il nome della foto viene salvata (tramite scraping) con il name del database + imdbid

    esempio del filename

    Fenomeno, Jimmy il nm0271978.jpg

    Garinei, Enzo (I) nm0307451.jpg

    Pozzetto, Renato nm0694843.jpg



    ecco il risultato finale




    Codice PHP:
    <?php


    $matches
    = array();
    preg_match('/(.*?)(\w+)$/', $row->name, $matches);

    $dir = 'images_actors_profile/';
    $nome = $row->name;
    $delimiter = ' ';
    $imdbid = $row->imdbid;
    $ext = '.jpg';


    if ((
    $row->imdbid)) {

    echo
    "<img src='$dir$nome$delimiter$imdbid$ext' height='80' width='100' /> ";
    }else{
    echo
    "<img src='images/noimage.jpg' height='80' width='100' /> ";
    }

    ?>

    ps: apriro' altri topic per risolvere altri 2 quesiti
    Ultima modifica di blackskyisback : 24-11-2022 alle ore 21.09.11

Tags for this Thread

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •