Retirar productes

De Wiki personal d'en Guillem Serrat
La revisió el 22:59, 30 des 2025 per Guseba (discussió | contribucions) (Es crea la pàgina amb «== 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<pre> // Validar ID if (!isset($_POST['id']) || !is_numeric($_POS...».)
(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.

// 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 sencer

// 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;