Funcionalitat: Gestió d'historial de canvis (Mostra i esborrament): diferència entre les revisions

De Wiki personal d'en Guillem Serrat
Cap resum de modificació
Cap resum de modificació
 
Línia 1: Línia 1:
__TOC__
__TOC__
== Mostra de l'historial de canvis ==
== Mostra de l'historial de canvis ==
L'historial de canvis únicament mostra els últims cinc canvis d'idioma realitzats, incloent-hi també la data en el qual es va fer, l'adreça IP del client que ho va fer i l'usuari que ho va fer (si en el seu moment es va especificar)
Per això, realitzem una consulta SQL recuperant tots els camps de la taula, ordenant-los per ID de forma descendent (una ID més alta indica un canvi més recent) i limitant el resultat a únicament cinc registres<pre>
<?php
            $stmt = $pdo->prepare("SELECT
            idioma,
            data_canvi,
            ip_client,
            nom_usuari
            FROM canvis_idioma ORDER BY id DESC LIMIT 5");
            $stmt->execute();
            $historial = $stmt->fetchAll();
</pre>El que retorna la consulta no és només l'idioma, sinó també la data, la direcció IP i l'usuari (si n'hi ha). Per tant, amb un bucle imprimirem tots els resultats<pre>
foreach ($historial as $reg): ?> <!-- Per cada idioma dins de la consulta -->
</pre>Tot i això, l'idioma que retorna és la versió "curta" (ca, en ... ) i hem de transformar-lo per tal de que surti l'idioma sencer i el nom segons l'idioma de l'aplicació<pre>
// Convertim el codi d’idioma a text. Enlloc d'imprimir "ca" o "es", imprimim l'idioma sencer, en l'idioma corresponent
                        switch ($reg['idioma']) {
                            case "ca":
                                $idioma_text = $cat; // Català | Catalán | Catalan | Catalan.          Retorna l'idioma "Català" escrit segons l'idioma de l'aplicació
                                break;
                            case "es":
                                $idioma_text = $esp; // Castellà | Castellano | Spanish | Espagnol.    Retorna l'idioma "Castellà" escrit segons l'idioma de l'aplicació
                                break;
                            case "en":
                                $idioma_text = $ang; // Anglès | Inglés | English | Anglais.          Retorna l'idioma "Català" escrit segons l'idioma de l'aplicació
                                break;
                            case "fr":
                                $idioma_text = $fra; // Francès | Francés | French | Français          Retorna l'idioma "Francès" escrit segons l'idioma de l'aplicació
                                break;
                            default:
                                $idioma_text = $reg['idioma']; // ca, es, en, fr
                        }
</pre>Un cop hem transformat l'idioma, imprimirem el registre. Tot i això, a l'hora d'imprimir l'usuari primer mirarem si realment n'hi ha, en cas afirmatiu imprimirem un nou separador i el nom d'usuari, en cas contrari no s'imprimirà res. Es realitzarà tot aquest procés per cada registre.<pre>
// Imprimim l'idioma
                        echo htmlspecialchars($idioma_text)
                        . " — " // Separador
                        // Imprimim la data en la qual s'ha fet el canvi
                        . htmlspecialchars($reg['data_canvi'])
                        . " — " // Separador
                        // Imprimim la IP del client
                        . htmlspecialchars($reg['ip_client']);
                        // Imprimim el nom d'usuari
                        if ($reg['nom_usuari']){
                            echo " — " // Separador
                            . htmlspecialchars($reg['nom_usuari']);
                        }
</pre>El codi sencer per mostrar l'historial de canvis és el següent:<pre>
<!-- Mostrar historial de canvis -->
            <h2><?php echo $historial; ?></h2>
            <ul>
            <?php
            $stmt = $pdo->prepare("SELECT
            idioma,
            data_canvi,
            ip_client,
            nom_usuari
            FROM canvis_idioma ORDER BY id DESC LIMIT 5");
            $stmt->execute();
            $historial = $stmt->fetchAll();
            // Imprimim tots els canvis d'idiomes trobats a la consulta
            foreach ($historial as $reg): ?> <!-- Per cada idioma dins de la consulta -->
                <li><center>
                    <?php
                        // Convertim el codi d’idioma a text. Enlloc d'imprimir "ca" o "es", imprimim l'idioma sencer, en l'idioma corresponent
                        switch ($reg['idioma']) {
                            case "ca":
                                $idioma_text = $cat; // Català | Catalán | Catalan | Catalan.          Retorna l'idioma "Català" escrit segons l'idioma de l'aplicació
                                break;
                            case "es":
                                $idioma_text = $esp; // Castellà | Castellano | Spanish | Espagnol.    Retorna l'idioma "Castellà" escrit segons l'idioma de l'aplicació
                                break;
                            case "en":
                                $idioma_text = $ang; // Anglès | Inglés | English | Anglais.          Retorna l'idioma "Català" escrit segons l'idioma de l'aplicació
                                break;
                            case "fr":
                                $idioma_text = $fra; // Francès | Francés | French | Français          Retorna l'idioma "Francès" escrit segons l'idioma de l'aplicació
                                break;
                            default:
                                $idioma_text = $reg['idioma']; // ca, es, en, fr
                        }
                        // Imprimim l'idioma
                        echo htmlspecialchars($idioma_text)
                        . " — " // Separador
                        // Imprimim la data en la qual s'ha fet el canvi
                        . htmlspecialchars($reg['data_canvi'])
                        . " — " // Separador
                        // Imprimim la IP del client
                        . htmlspecialchars($reg['ip_client']);
                        // Imprimim el nom d'usuari
                        if ($reg['nom_usuari']){
                            echo " — " // Separador
                            . htmlspecialchars($reg['nom_usuari']);
                        }
                       
                    ?>
                </li></center>
            <?php endforeach; ?>
            </ul>
</pre>El resultat de l'historial amb alguns registres és el següent:
[[Fitxer:Pràctica 4.2 Resultat Historial Canvis.png|center|miniatura|500x500px]]
== Eliminació de l'historial de canvis ==
L'eliminacio de l'historial de canvis es produeix quan es prem el boto d'esborrar tots els registres.
[[Fitxer:Pràctica 4.2 Boto Esborrar Registres.png|center|miniatura|500x500px]]
Quan es prem, es realitza una consulta SQL que elimina tots els registres de la BD<pre>
// Borrar tots els registres de la taula
if (isset($_POST['borrar_tot'])) {
    try {
        $stmt = $pdo->prepare("DELETE FROM canvis_idioma");
        $stmt->execute();
    } catch (PDOException $e) {
        echo "<p>Error al eliminar els registres: " . htmlspecialchars($e->getMessage()) . "</p>";
    }
}
</pre>

Revisió de 01:32, 15 des 2025

Mostra de l'historial de canvis

L'historial de canvis únicament mostra els últims cinc canvis d'idioma realitzats, incloent-hi també la data en el qual es va fer, l'adreça IP del client que ho va fer i l'usuari que ho va fer (si en el seu moment es va especificar)

Per això, realitzem una consulta SQL recuperant tots els camps de la taula, ordenant-los per ID de forma descendent (una ID més alta indica un canvi més recent) i limitant el resultat a únicament cinc registres

<?php 
            $stmt = $pdo->prepare("SELECT 
            idioma, 
            data_canvi, 
            ip_client,
            nom_usuari 
            FROM canvis_idioma ORDER BY id DESC LIMIT 5");

            $stmt->execute();
            $historial = $stmt->fetchAll();

El que retorna la consulta no és només l'idioma, sinó també la data, la direcció IP i l'usuari (si n'hi ha). Per tant, amb un bucle imprimirem tots els resultats

foreach ($historial as $reg): ?> <!-- Per cada idioma dins de la consulta -->

Tot i això, l'idioma que retorna és la versió "curta" (ca, en ... ) i hem de transformar-lo per tal de que surti l'idioma sencer i el nom segons l'idioma de l'aplicació

// Convertim el codi d’idioma a text. Enlloc d'imprimir "ca" o "es", imprimim l'idioma sencer, en l'idioma corresponent

                       switch ($reg['idioma']) {
                           case "ca":
                               $idioma_text = $cat; // Català | Catalán | Catalan | Catalan.          Retorna l'idioma "Català" escrit segons l'idioma de l'aplicació
                               break;
                           case "es":
                               $idioma_text = $esp; // Castellà | Castellano | Spanish | Espagnol.    Retorna l'idioma "Castellà" escrit segons l'idioma de l'aplicació
                               break;
                           case "en":
                               $idioma_text = $ang; // Anglès | Inglés | English | Anglais.           Retorna l'idioma "Català" escrit segons l'idioma de l'aplicació
                               break;
                           case "fr":
                               $idioma_text = $fra; // Francès | Francés | French | Français          Retorna l'idioma "Francès" escrit segons l'idioma de l'aplicació
                               break; 
                           default:
                               $idioma_text = $reg['idioma']; // ca, es, en, fr
                       }

Un cop hem transformat l'idioma, imprimirem el registre. Tot i això, a l'hora d'imprimir l'usuari primer mirarem si realment n'hi ha, en cas afirmatiu imprimirem un nou separador i el nom d'usuari, en cas contrari no s'imprimirà res. Es realitzarà tot aquest procés per cada registre.

// Imprimim l'idioma
                       echo htmlspecialchars($idioma_text)
                       . " — " // Separador
                       // Imprimim la data en la qual s'ha fet el canvi
                       . htmlspecialchars($reg['data_canvi'])
                       . " — " // Separador
                       // Imprimim la IP del client
                       . htmlspecialchars($reg['ip_client']);
                       // Imprimim el nom d'usuari
                       if ($reg['nom_usuari']){
                           echo " — " // Separador
                           . htmlspecialchars($reg['nom_usuari']);
                       }

El codi sencer per mostrar l'historial de canvis és el següent:

<!-- Mostrar historial de canvis -->

           <h2><?php echo $historial; ?></h2>
           <ul>
           <?php 
           $stmt = $pdo->prepare("SELECT 
           idioma, 
           data_canvi, 
           ip_client,
           nom_usuari 
           FROM canvis_idioma ORDER BY id DESC LIMIT 5");
           $stmt->execute();
           $historial = $stmt->fetchAll();
           // Imprimim tots els canvis d'idiomes trobats a la consulta
           foreach ($historial as $reg): ?> <!-- Per cada idioma dins de la consulta -->
               <li><center>
                   <?php
                       // Convertim el codi d’idioma a text. Enlloc d'imprimir "ca" o "es", imprimim l'idioma sencer, en l'idioma corresponent 
                       switch ($reg['idioma']) {
                           case "ca":
                               $idioma_text = $cat; // Català | Catalán | Catalan | Catalan.          Retorna l'idioma "Català" escrit segons l'idioma de l'aplicació
                               break;
                           case "es":
                               $idioma_text = $esp; // Castellà | Castellano | Spanish | Espagnol.    Retorna l'idioma "Castellà" escrit segons l'idioma de l'aplicació
                               break;
                           case "en":
                               $idioma_text = $ang; // Anglès | Inglés | English | Anglais.           Retorna l'idioma "Català" escrit segons l'idioma de l'aplicació
                               break;
                           case "fr":
                               $idioma_text = $fra; // Francès | Francés | French | Français          Retorna l'idioma "Francès" escrit segons l'idioma de l'aplicació
                               break; 
                           default:
                               $idioma_text = $reg['idioma']; // ca, es, en, fr
                       }
                       // Imprimim l'idioma
                       echo htmlspecialchars($idioma_text)
                       . " — " // Separador
                       // Imprimim la data en la qual s'ha fet el canvi
                       . htmlspecialchars($reg['data_canvi'])
                       . " — " // Separador
                       // Imprimim la IP del client
                       . htmlspecialchars($reg['ip_client']);
                       // Imprimim el nom d'usuari
                       if ($reg['nom_usuari']){
                           echo " — " // Separador
                           . htmlspecialchars($reg['nom_usuari']);
                       }
                       
                   ?>
               </li></center>
           <?php endforeach; ?>
           </ul>

El resultat de l'historial amb alguns registres és el següent:

Eliminació de l'historial de canvis

L'eliminacio de l'historial de canvis es produeix quan es prem el boto d'esborrar tots els registres.

Quan es prem, es realitza una consulta SQL que elimina tots els registres de la BD

// Borrar tots els registres de la taula
if (isset($_POST['borrar_tot'])) {
    try {
        $stmt = $pdo->prepare("DELETE FROM canvis_idioma");
        $stmt->execute();
    } catch (PDOException $e) {
        echo "<p>Error al eliminar els registres: " . htmlspecialchars($e->getMessage()) . "</p>";
    }
}