Retirar productes

De Wiki personal d'en Guillem Serrat
La revisió el 02:05, 12 gen 2026 per Guseba (discussió | contribucions)
(dif.) ← Versió més antiga | Versió actual (dif.) | Versió més nova → (dif.)

Retirar una quantitat de productes del cistell

L'objectiu d'aquesta operació és retirar una quantitat definida per l'usuari de productes del cistell

Aquesta petició arriba per part del codi del cistell i la seva acció és "retirar". Aquesta operació ens fa arribar la ID del producte a retirar i la quantitat a retirar.

Primerament, verifiquem que la ID és vàlida i és un nombre

// Validar ID
if (!isset($_POST['id']) || !is_numeric($_POST['id'])) { // Verifiquem que el producte té una ID i que és numèrica
    $_SESSION['missatge_error'] =
    "ID de producte no vàlid";
    header("Location: cistell.php");
    exit;
}

$id = (int)$_POST['id']; // Assignem la ID del producte a una variable verificant que és INT

Seguidament, verifiquem que la quantitat sigui major a 0. Si no ho és enviarem un missatge d’error i retornarem l’usuari al cistell, mostrant el missatge d’error

// Definir i validar quantitat de productes a retirar $quantitat = (int)$_POST['quantitat']; // Agafa la quantitat del producte if ($quantitat <= 0) { // En cas que sigui 0 o menor, no es processa la quantitat

   $_SESSION['missatge_error'] =
   "Quantitat no vàlida";
   header("Location: cistell.php");
   exit;

}

Per últim, després de comprovar que el producte realment està en el cistell, recuperarem el nom del producte (pel missatge) i restem a la quantitat del cistell la quantitat que ens ha fet arribar l'usuari

if (isset($_SESSION['cistell'][$id])) { // Si el producte realment està en el cistell

   $nom_prod = $_SESSION['cistell'][$id]['nom']; // Obtenim el nom del producte (pel missatge de confirmació)
   $_SESSION['cistell'][$id]['quantitat'] = $_SESSION['cistell'][$id]['quantitat'] - $quantitat; // Restem la quantitat indicada a la quantitat del cistell

En cas que retirar tots els productes del cistell fins arribar a 0, eliminarem el producte del cistell

if ($_SESSION['cistell'][$id]['quantitat'] <= 0) { // En cas que retirem tants productes fins arribar a 0

   unset($_SESSION['cistell'][$id]); // S'elimina el producte del cistell

}

Finalment, enviarem un missatge d'èxit dins de la sessió

$_SESSION['missatge_ok'] = "S'ha retirat $quantitat unitat(s) de $nom_prod del cistell."; // S'envia el missatge

O en cas que el producte no existeixi, enviarem un missatge d'error

} else { // En cas que el producte realment no està al cistell

   $_SESSION['missatge_error'] = "El producte no està al cistell.";

}

I redirigirem a l'usuari al cistell de nou

header("Location: cistell.php"); exit;

Codi complet

// Case que funciona com a "Actualitzar" i en arribar a 0 elimina el producte del cistell    
    case 'retirar': // En cas que l'acció sigui retirar un producte del cistell (cridada sempre desde cistell.php)
        // Validar ID
        if (!isset($_POST['id']) || !is_numeric($_POST['id'])) { // Verifiquem que el producte té una ID i que és numèrica
            $_SESSION['missatge_error'] =
            "ID de producte no vàlid";
            header("Location: cistell.php");
            exit;
        }

        $id = (int)$_POST['id']; // Assignem la ID del producte a una variable verificant que és INT

        // Definir i validar quantitat de productes a retirar
        $quantitat = (int)$_POST['quantitat']; // Agafa la quantitat del producte
        if ($quantitat <= 0) { // En cas que sigui 0 o menor, no es processa la quantitat
            $_SESSION['missatge_error'] =
            "Quantitat no vàlida";
            header("Location: cistell.php");
            exit;
        }

        if (isset($_SESSION['cistell'][$id])) { // Si el producte realment està en el cistell
            $nom_prod = $_SESSION['cistell'][$id]['nom']; // Obtenim el nom del producte (pel missatge de confirmació)
            $_SESSION['cistell'][$id]['quantitat'] = $_SESSION['cistell'][$id]['quantitat'] - $quantitat; // Restem la quantitat indicada a la quantitat del cistell

            if ($_SESSION['cistell'][$id]['quantitat'] <= 0) { // En cas que retirem tants productes fins arribar a 0
                unset($_SESSION['cistell'][$id]); // S'elimina el producte del cistell
            }

            $_SESSION['missatge_ok'] = "S'ha retirat $quantitat unitat(s) de $nom_prod del cistell."; // S'envia el missatge
        } else { // En cas que el producte realment no està al cistell
            $_SESSION['missatge_error'] = "El producte no està al cistell.";
        }

        header("Location: cistell.php");
        exit;