Afegir productes al cistell des del catàleg
Afegir productes al cistell des del catàleg
L'objectiu d'aquesta operació és afegir una quantitat d'unitats d'un producte al cistell des del catàleg
Aquesta petició arriba per part del codi del catàleg i la seva acció és "afegir". Aquesta operació ens fa arribar la ID del producte i la quantitat a afegir
Primerament, haurem de verificar que la ID que ha arribat és vàlida i 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: cataleg.php");
exit;
}
$id = (int)$_POST['id']; // Assignem la ID del producte a una variable verificant que és INT
Seguidament, haurem de verificar la quantitat. Si és menor o igual a 0 enviarem un missatge d’error i retornarem l’usuari al catàleg, mostrant el missatge d’error
// Definir i validar quantitat de productes a afegir
$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: cataleg.php"); exit; }
El següent pas serà recuperar els detalls del producte segons la ID proporcionada. Recuperem tots els detalls del producte ja que dins de la sessió hem d'especificar-los. Més endevant es comprovarà. En cas que la ID sigui errònia, no recuperarà cap producte i es redirigirà al catàleg indicant que el producte no existeix
// Obtenir dades del producte
$stmt = $pdo->prepare(
"SELECT nom, preu, estoc, imatge, categoria
FROM productes
WHERE id = :id"
);
$stmt->bindParam(":id",$id);
$stmt->execute();
$producte = $stmt->fetch();
if (!$producte) { // En cas que el producte no existeixi
$_SESSION['missatge_error'] =
"El producte no existeix";
header("Location: cataleg.php");
exit;
}
A continuació, afegirem el producte dins del cistell. Aquí definim tots els detalls del producte, i afegim el producte dins de l'array de la sessió "cistell" amb l'identificador del seu ID de producte de la BD (es pot consultar l'Exemple de model de dades de l'array $SESSION[cistell] amb productes per entendre el model de dades del cistell).
$_SESSION['cistell'][$id] = array( // Inserim el producte al cistell
'nom' => $producte['nom'], 'preu' => $producte['preu'], 'quantitat' => $quantitat, // On la quantitat es defineix segons el nombre de productes a introduir al cistell 'imatge' => $producte['imatge'], 'categoria' => $producte['categoria'] );
Exemple de model de dades de l'array $SESSION[cistell] amb productes
// Valors no reals
$_SESSION['cistell'] = array(
101 => array( // ID de producte
'nom' => 'Teclat mecànic',
'preu' => 79.99,
'quantitat' => 2,
'imatge' => 'teclat.jpg',
'categoria' => 'Informàtica'
),
205 => array( // ID de producte
'nom' => 'Altaveu Bluetooth',
'preu' => 49.50,
'quantitat' => 1,
'imatge' => 'altaveu.jpg',
'categoria' => 'Audio'
)
);