Funcionalitat: Gestió de galetes i inserció de dades a la BD

De Wiki personal d'en Guillem Serrat

Creació de la galeta

La creació de la galeta es realitza quan es respon al formulari de selecció d'idioma

Quan s'envia el formulari, es recuperen dos camps: l'idioma i el nom d'usuari (per emmagatzemar a la BD, però no utilitzat a la galeta)

if (isset($_POST['idioma'])) {
    $idioma_seleccionat = $_POST['idioma'];
    $nomUsuari = $_POST['nom_usuari'];

Un cop obtingut l'idioma, haurem de verificar que n'és un de permès. Al principi del codi hem definit al següent array amb els idiomes permesos:

$idiomes_permesos = ['ca', 'es', 'en', 'fr']; // Idiomes permessos

Per tant, haurem de verificar si el valor recuperat del formulari està dins de l'array

if (in_array($idioma_seleccionat, $idiomes_permesos))

En cas que ho estigui, crearem la galeta amb les següents característiques:

  • Nom: idioma_preferit
  • Valor: $idioma_seleccionat (valor recuperat del formulari)
  • Caducitat: 2592000 segons (30 dies)
  • Ruta: Arrel
// Creació de la cookie
        setcookie('idioma_preferit', $idioma_seleccionat, time() + (2592000), "/");

A continuació, per tal de que prengui efecte l'eliminació de la galeta, haurem de tornar a refrescar la pàgina mitjançant una rediracció a la pròpia pàgina (com si fos un F5)

header("Location: index.php");

A partir d'aquest moment, la galeta contindrà l'idioma escollit i la pagina es podrà visualitzar en l'idioma desitjat

El codi sencer de la creació de la galeta (que també inclou la inserció de dades a la BD) és el següent:

// Creació de la galeta i inserció de dades a partir del formulari de selecció d'idioma
if (isset($_POST['idioma'])) {
    $idioma_seleccionat = $_POST['idioma'];
    $nomUsuari = $_POST['nom_usuari'];

    if (in_array($idioma_seleccionat, $idiomes_permesos)) {

        // Creació de la cookie
        setcookie('idioma_preferit', $idioma_seleccionat, time() + (2592000), "/");

        // REGISTRE A BD
        try {
            $stmt = $pdo->prepare("INSERT INTO canvis_idioma (idioma, data_canvi, ip_client, nom_usuari)
                VALUES (:idioma_seleccionat, NOW(), :ip, :nom_usuari)");
            $stmt->bindParam(':idioma_seleccionat', $idioma_seleccionat);
            $stmt->bindParam(':ip', $_SERVER['REMOTE_ADDR']);
            $stmt->bindParam(':nom_usuari', $nomUsuari);
            $stmt->execute();

        } catch (PDOException $e) {
            echo "No es poden inserir les dades. Motiu: " . $e->getMessage();
        }

        header("Location: index.php");
        exit;
    } else {
        echo "Idioma no permès";
    }
}

Inserció de dades a la BD

La inserció de dades a la BD, a l'igual que la creació de la galeta, es realitza quan es respon al formulari de selecció d'idioma.

Un cop s'ha creat la galeta (i per tant, s'ha comprovat que l'idioma n'és un de permès, inserirem mitjançant una consulta preparada les dades a la BD. La consulta preparada serà una inserció de 4 camps, 3 d'ells amb paràmetres enllaçats:

  • Idioma
  • Data del canvi (parametre fixe amb la funció NOW()
  • IP del client
  • Nom d'usuari
$stmt = $pdo->prepare("INSERT INTO canvis_idioma (idioma, data_canvi, ip_client, nom_usuari)
                VALUES (:idioma_seleccionat, NOW(), :ip, :nom_usuari)");

Seguidament, assignarem els valors dels paràmetres enllaçats. L'idioma i el nom d'usuari l'obtenim del formulari, mentre que per recuperar la IP fem servir la variable $_SERVER amb l'argument "REMOTE_ADDR"

$stmt->bindParam(':idioma_seleccionat', $idioma_seleccionat);

           $stmt->bindParam(':ip', $_SERVER['REMOTE_ADDR']);
           $stmt->bindParam(':nom_usuari', $nomUsuari);

El codi sencer per inserir dades a la BD (que també inclou la creació de la galeta) és el següent:

// Creació de la galeta i inserció de dades a partir del formulari de selecció d'idioma
if (isset($_POST['idioma'])) {
    $idioma_seleccionat = $_POST['idioma'];
    $nomUsuari = $_POST['nom_usuari'];

    if (in_array($idioma_seleccionat, $idiomes_permesos)) {

        // Creació de la cookie
        setcookie('idioma_preferit', $idioma_seleccionat, time() + (2592000), "/");

        // REGISTRE A BD
        try {
            $stmt = $pdo->prepare("INSERT INTO canvis_idioma (idioma, data_canvi, ip_client, nom_usuari)
                VALUES (:idioma_seleccionat, NOW(), :ip, :nom_usuari)");
            $stmt->bindParam(':idioma_seleccionat', $idioma_seleccionat);
            $stmt->bindParam(':ip', $_SERVER['REMOTE_ADDR']);
            $stmt->bindParam(':nom_usuari', $nomUsuari);
            $stmt->execute();

        } catch (PDOException $e) {
            echo "No es poden inserir les dades. Motiu: " . $e->getMessage();
        }

        header("Location: index.php");
        exit;
    } else {
        echo "Idioma no permès";
    }
}

Esborrament de la galeta

L'esborrament de la galeta es produeix quan es prem el botó d'esborrar les preferències.


Quan premem el botó, primerament eliminem la galeta, establint el seu valor buit i un temps de caducitat negatiu (és a dir, ja caducat).

setcookie('idioma_preferit', '', time() - 3600, "/");

A continuació, per tal de que prengui efecte l'eliminació de la galeta, haurem de tornar a refrescar la pàgina mitjançant una rediracció a la pròpia pàgina (com si fos un F5)

header("Location: index.php");

A partir d'aquest moment, la galeta no tindrà cap valor i l'idioma per defecte serà el català. El codi sencer per la funcionalitat d'esborrar la galeta és el següent:

// Esborrar la cookie
if (isset($_POST['esborrar'])) {
    setcookie('idioma_preferit', '', time() - 3600, "/");
    header("Location: index.php");
    exit;
}