Retirar productes: diferència entre les revisions

De Wiki personal d'en Guillem Serrat
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...».
 
Cap resum de modificació
 
(Hi ha 2 revisions intermèdies que no es mostren del mateix usuari)
Línia 6: Línia 6:
Primerament, verifiquem que la ID és vàlida i és un nombre<pre>
Primerament, verifiquem que la ID és vàlida i és un nombre<pre>
// Validar ID
// Validar ID
        if (!isset($_POST['id']) || !is_numeric($_POST['id'])) { // Verifiquem que el producte té una ID i que és numèrica
if (!isset($_POST['id']) || !is_numeric($_POST['id'])) { // Verifiquem que el producte té una ID i que és numèrica
            $_SESSION['missatge_error'] =
    $_SESSION['missatge_error'] =
            "ID de producte no vàlid";
    "ID de producte no vàlid";
            header("Location: cistell.php");
    header("Location: cistell.php");
            exit;
    exit;
        }
}


        $id = (int)$_POST['id']; // Assignem la ID del producte a una variable verificant que és INT
$id = (int)$_POST['id']; // Assignem la ID del producte a una variable verificant que és INT
</pre>Seguidament, verifiquem que la quantitat sigui major a 0.<pre>
 
</pre>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<pre>
// Definir i validar quantitat de productes a retirar
// Definir i validar quantitat de productes a retirar
        $quantitat = (int)$_POST['quantitat']; // Agafa la quantitat del producte
$quantitat = (int)$_POST['quantitat']; // Agafa la quantitat del producte
        if ($quantitat <= 0) { // En cas que sigui 0 o menor, no es processa la quantitat
if ($quantitat <= 0) { // En cas que sigui 0 o menor, no es processa la quantitat
            $_SESSION['missatge_error'] =
    $_SESSION['missatge_error'] =
            "Quantitat no vàlida";
    "Quantitat no vàlida";
            header("Location: cistell.php");
    header("Location: cistell.php");
            exit;
    exit;
        }
}
</pre>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<pre>
</pre>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<pre>
if (isset($_SESSION['cistell'][$id])) { // Si el producte realment està en el cistell
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ó)
    $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
    $_SESSION['cistell'][$id]['quantitat'] = $_SESSION['cistell'][$id]['quantitat'] - $quantitat; // Restem la quantitat indicada a la quantitat del cistell
 
</pre>En cas que retirar tots els productes del cistell fins arribar a 0, eliminarem el producte del cistell<pre>
</pre>En cas que retirar tots els productes del cistell fins arribar a 0, eliminarem el producte del cistell<pre>
if ($_SESSION['cistell'][$id]['quantitat'] <= 0) { // En cas que retirem tants productes fins arribar a 0
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
    unset($_SESSION['cistell'][$id]); // S'elimina el producte del cistell
            }
}
</pre>Finalment, enviarem un missatge d'èxit dins de la sessió<pre>
</pre>Finalment, enviarem un missatge d'èxit dins de la sessió<pre>
$_SESSION['missatge_ok'] = "S'ha retirat $quantitat unitat(s) de $nom_prod del cistell."; // S'envia el missatge
$_SESSION['missatge_ok'] = "S'ha retirat $quantitat unitat(s) de $nom_prod del cistell."; // S'envia el missatge
</pre>O en cas que el producte no existeixi, enviarem un missatge d'error<pre>
</pre>O en cas que el producte no existeixi, enviarem un missatge d'error<pre>
} else { // En cas que el producte realment no està al cistell
} else { // En cas que el producte realment no està al cistell
            $_SESSION['missatge_error'] = "El producte no està al cistell.";
    $_SESSION['missatge_error'] = "El producte no està al cistell.";
        }
}
</pre>I redirigirem a l'usuari al cistell de nou<pre>
</pre>I redirigirem a l'usuari al cistell de nou<pre>
header("Location: cistell.php");
header("Location: cistell.php");
Línia 42: Línia 44:
</pre>
</pre>


== Codi sencer ==
== Codi complet ==
<pre>
<pre>
// Case que funciona com a "Actualitzar" i en arribar a 0 elimina el producte del cistell     
// Case que funciona com a "Actualitzar" i en arribar a 0 elimina el producte del cistell     

Revisió de 02:05, 12 gen 2026

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;