Caricare immagine di default se mancante in cartella immagini

di il
5 risposte

Caricare immagine di default se mancante in cartella immagini

Buona sera a tutti, partecipo per la prima volta in questo forum e vorrei chiedere il vostro aiuto per un problema che ad oggi non sono riuscito a venirne a capo e cioè:

nel DataTables dipendenti c'è il campo foto, questo campo è valorizzato dal numero di matricola del dipendente più l'estensione png, quindi per esempio il dipendente con matricola 0932 avrà il campo foto valorizzato con 0932.png, consideriamo che la colonna non ha campi null ne vuoti perchè tutti i dipendenti hanno una matricola, questo campo foto si collega alla cartella "../img/dip/foto.png", quindi si carica le foto dei dipendenti e li mostra come miniature 50X50, ora la maggior parte dei dipendenti hanno la loro foto, ma alcuni non ancora, quindi quando dentro la cartella non si trova la foto restituisce nel campo la dicitura immagine del dipendente con l'icona dell'immagine mancante, ora siccome non è elegante da vedere, avrei pensato di sfruttare un png che ha l'immagine di un omino grigio e al centro la dicitura no photo, ho già questa immagine nella cartella (NoPhoto.png) insieme alle altre foto dei dipendenti, quindi la mia idea era, che attraverso una funzione si controlla nella cartella se esiste la foto relativa al valore dell campo, quindi 0932.png , perchè le foto hanno la stessa denominazione del valore campo, se esiste la mostri nella tabella, se non esiste invece mostri nel campo foto inerente a quella matricola l'immagine NoPhoto.png.

ma ad oggi non sono riuscito, posto qui il codice di inizializzazione della tabella, sperando che qualcuno mi possa dare una mano.

grazie anticipatamente a tutti in ogni caso

$(document).ready(function () {
let badgeTable = null; // Variabile per mantenere il riferimento alla tabella dei badge

// Inizializzazione della tabella dei dipendenti
let table = $('#example').DataTable({
select: true,
lengthMenu: [5, 10],
"ajax": {
"url": "../php/dipendente1.php",
"dataSrc": "data"
},
"order": [[1, 'asc']],
"language": {
"url": "../json/italiano.json"
},
"columns": [
{ "data": "iddip" },
{ "data": "matr" },
{ "data": "cognome" },
{ "data": "nome" },
{ "data": "nascita" },
{ "data": "matrcomune" },
{ "data": "assunzione" },
{ "data": "iniznomin" },
{ "data": "foto" },
{ "data": "stato" },
{ "data": "tot_badge" }
],

"columnDefs": [
{
"targets": [0], // Indice della colonna da nascondere (0 per la prima colonna)
"visible": false, // Imposta la visibilità della colonna su falso
"searchable": false // Impedisce la ricerca sulla colonna
},
{
"targets": 8, // Indice della colonna con il percorso dell'immagine
"render": function(data, type, row, meta) {
return '<img src="' + data + '" alt="Immagine dipendente" style="width:50px;height:50px;">';
}
}
]
});

Questa è la parte in php dove ricavo l'array dei dipendenti.

<?php
// Includi il file di connessione al database
require_once('connessione.php');

try {
// Query per recuperare i dipendenti attivi con il totale dei badge associati
$query = "
SELECT
d.iddip,
d.matr,
d.cognome,
d.nome,
DATE_FORMAT(d.dnascita, '%d/%m/%Y') AS nascita,
d.matrcomune,
DATE_FORMAT(d.dassunzione, '%d/%m/%Y') AS assunzione,
d.iniznomin,
d.foto,
d.stato,
COUNT(b.idbadge) AS tot_badge
FROM
dipendente d
LEFT JOIN
badge b ON d.iddip = b.iddip
WHERE
d.stato ='ATTIVO'
GROUP BY
d.iddip,
d.matr,
d.cognome,
d.nome,
d.dnascita,
d.matrcomune,
d.dassunzione,
d.iniznomin,
d.foto,
d.stato";

// Prepara e esegui la query
$statement = $pdo->prepare($query);
$statement->execute();

// Array per le righe dei dati
$fetchdata = array('data' => array());

// Ciclo attraverso i risultati per costruire le righe
while ($row = $statement->fetch(PDO::FETCH_ASSOC)) {
$fotoMiniatura = "../img/dip/" . $row['foto'];

$fetchdata['data'][] = array(
'iddip' => $row['iddip'],
'matr' => $row['matr'],
'cognome' => $row['cognome'],
'nome' => $row['nome'],
'nascita' => $row['nascita'],
'matrcomune' => $row['matrcomune'],
'assunzione' => $row['assunzione'],
'iniznomin' => $row['iniznomin'],
'foto' => $fotoMiniatura,
'stato' => $row['stato'],
'tot_badge' => $row['tot_badge'] // Totale dei badge associati
);
}

// Restituzione dei dati come JSON
echo json_encode($fetchdata, JSON_UNESCAPED_UNICODE);
} catch (PDOException $e) {
// Gestione degli errori
echo json_encode(array('error' => 'Errore durante l\'esecuzione della query: ' . $e->getMessage()), JSON_UNESCAPED_UNICODE);
}
?>

fin qui sono riuscito a caricare le immagini nel campo foto , ma non riesco a gestire l'assegnazione dell'immagine di default quando la foto non esiste nella cartella

5 Risposte

  • Re: Caricare immagine di default se mancante in cartella immagini

    Non so, se un dipendente non ha figli cosa scriveresti in un ipotetico campo “figli a carico”? ergo, se non hai una foto cosa inserisci per colmare quel vuoto?

    beh, quando inserisci una matricola (0001) inserisci l'immagine default.jpg da sostituire con 0001.jpg nel momento in cui carichi l'immagine.

  • Re: Caricare immagine di default se mancante in cartella immagini

    03/04/2024 - diego66 ha scritto:


    fin qui sono riuscito a caricare le immagini nel campo foto , ma non riesco a gestire l'assegnazione dell'immagine di default quando la foto non esiste nella cartella

    fai in modo che nella cartella esista il file default.jpg

    03/04/2024 - diego66 ha scritto:


    while ($row = $statement->fetch(PDO::FETCH_ASSOC)) { $fotoMiniatura = "../img/dip/" . $row['foto'];

    qui dovresti verificare se esiste 0001.jpg altrimenti associ default.jpg (una if?)

  • Re: Caricare immagine di default se mancante in cartella immagini

    04/04/2024 - sihsandrea ha scritto:


    Non so, se un dipendente non ha figli cosa scriveresti in un ipotetico campo “figli a carico”? ergo, se non hai una foto cosa inserisci per colmare quel vuoto?

    beh, quando inserisci una matricola (0001) inserisci l'immagine default.jpg da sostituire con 0001.jpg nel momento in cui carichi l'immagine.

    Ciao, intanto grazie dei tuoi suggerimenti, in effetti non posso darti torto quando dissenti a proposito di aver valorizzato il campo foto quando non c'è sicurezza che la foto realmente esiste, ma pensavo che al momento in cui avessi dovuto ricostruire il percorso sarebbe stato più semplice avere già il nome file con estensione piuttosto che ricostruire tutto il percorso con concatenazioni, per questo ho pensato di valorizzarlo, probabilmente avrei avuto vita più semplice se non lo avessi fatto.

  • Re: Caricare immagine di default se mancante in cartella immagini

    04/04/2024 - sihsandrea ha scritto:


    03/04/2024 - diego66 ha scritto:


    fin qui sono riuscito a caricare le immagini nel campo foto , ma non riesco a gestire l'assegnazione dell'immagine di default quando la foto non esiste nella cartella

    fai in modo che nella cartella esista il file default.jpg

    il file di default esiste già, è un png, NoPhoto.png

    03/04/2024 - diego66 ha scritto:


    while ($row = $statement->fetch(PDO::FETCH_ASSOC)) { $fotoMiniatura = "../img/dip/" . $row['foto'];

    qui dovresti verificare se esiste 0001.jpg altrimenti associ default.jpg (una if?)

    non avevo pensato di usare la condizione nell'array del php sinceramente, pensavo di fare il controllo ed associare il png di default nel js script 

  • Re: Caricare immagine di default se mancante in cartella immagini

    04/04/2024 - sihsandrea ha scritto:


    03/04/2024 - diego66 ha scritto:


    fin qui sono riuscito a caricare le immagini nel campo foto , ma non riesco a gestire l'assegnazione dell'immagine di default quando la foto non esiste nella cartella

    fai in modo che nella cartella esista il file default.jpg

    03/04/2024 - diego66 ha scritto:


    while ($row = $statement->fetch(PDO::FETCH_ASSOC)) { $fotoMiniatura = "../img/dip/" . $row['foto'];

    qui dovresti verificare se esiste 0001.jpg altrimenti associ default.jpg (una if?)

     while ($row = $statement->fetch(PDO::FETCH_ASSOC)) {
            $fotoMiniatura = "../img/dip/" . $row['foto'];
    
    
            // Verifica se l'immagine specificata esiste nella cartella
        if (file_exists($fotoMiniatura)) {
            // Se esiste, utilizza l'immagine specificata
        } else {
            // Se non esiste, utilizza un'immagine di default
            $fotoMiniatura = "../img/dip/NoPhoto.png";
        }
    
    
       
            $fetchdata['data'][] = array(
                'iddip' => $row['iddip'],
                'matr' => $row['matr'],
                'cognome' => $row['cognome'],
                'nome' => $row['nome'],
                'nascita' => $row['nascita'],
                'matrcomune' => $row['matrcomune'],
                'assunzione' => $row['assunzione'],
                'iniznomin' => $row['iniznomin'],
                'foto' => $fotoMiniatura,
                'stato' => $row['stato'],
                'tot_badge' => $row['tot_badge'] // Totale dei badge associati
            );
        }

    perfetto, carica il file NoPhoto.png , grazie mille per il suggerimento .

Devi accedere o registrarti per scrivere nel forum
5 risposte