Estás en: Variables externas y Formularios : Carrito de la compra
Ejemplo
Añadir productos al carrito de la compra.
Carrito que sólo permite grabar el primer producto que compramos.
Para este ejemplo, se utilizan 2 ficheros:
Página carrito_formulario.php
<?php
session_start(); //Tiene que estar en la primera línea
session_register ("cesta"); // Se declara la variable de sesión cesta. Si no se declara, no suele dar fallo
/* Registrar variable de sesión
-> SI SE AÑADE A CESTA, SE EJECUTA TODO ESTE CÓDIGO
/* Si hay datos en el $_POST (datos de formulario), los guardamos en las variables de sesión
- Recoger campos en variable ($producto y $cantidad)
- Crear variable de tipo array donde se guarda lo que va comprando el usuario
$cesta=$_SESSION['cesta'] Lo q tengamos en la variable de sesión lo graba en la variable $cesta
// Si no existe $cesta (la primera vez no exite porque $_SESSION está vacío
// Añadir en la cesta el producto y cantidad Creamos una referencia dentro del array -> $cesta es un array asociativo
$cesta[$_POST['cproducto']]=$_POST['cunidades'] ó $cesta [$producto] = $cantidad
// y si no (si existe $cesta)
// Recoger la cesta para localizar si el producto ya ha sido enviado
// Si existe el producto
// Añadir la cantidad
// si no existe
// Crear el producto en $cesta
// Grabar en variable de sesión $cesta
$_SESSION['cesta']=$cesta
*/
// Si existe $cesta, muestra el formulario, si no.. muestra el contenido de lo comprado
if ($_POST) { // Si tenemos datos de formulario...
if (isset ($_POST['cproducto'])){
$producto = $_POST['cproducto'];
}
if (isset ($_POST['cunidades'])){
$unidades = $_POST['cunidades'];
}
$cesta=$_SESSION['cesta']; // Creamos el array // La primera vez, se guardará vacía
if (!isset ($cesta)){ // Si no existe la cesta
$cesta[$producto]=$unidades; // Grabo el primer producto en la ceta
}else { // si la cesta ya existía
$encontrado=0;
foreach ($cesta as $codigo=>$cantidad){ // Para cada código metido en la cesta...
if ($codigo == $producto) {// Si el código coincide con el introducido por el usuario (no es la primera vez q lo compra)
$cesta[$codigo] += $unidades;
$encontrado=1;
}
}
if (!$encontrado)
$cesta[$producto]=$unidades;
}
$_SESSION["cesta"]=$cesta;
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Documento sin título</title>
</head>
<body>
<form action="carrito_formulario.php" method="post">
<label for="producto">Producto</label>
<select name="cproducto">
<option value="481">Zapato</option>
<option value="550">Gorro</option>
<option value="011">Paraguas</option>
</select>
<label for="unidad">Unidades</label><input type="text" name="cunidades" /><br />
<input type="submit" value="Añadir a cesta" />
<a href="vaciar_cesta.php">Vaciar cesta</a>
</form>
<?
if (isset ($cesta)){
// LISTAR EL CONTENIDO DE $cesta
echo "Productos en la cesta:<br />";
foreach ($cesta as $codproducto=>$ncantidad){
echo "Producto: $codproducto -> N. Unidades: $ncantidad <br />";
}
}
?>
</body>
</html>
RESULTADO POR PANTALLA
Producto (desplegable) Unidades: XX
Vaciar cesta
Productos en la cesta:
Producto: 481 -> N. Unidades: 3
Producto: 550 -> N. Unidades: 4
Página vaciar-cesta.php
<?php session_start(); session_destroy(); header("Location: carrito_formulario.php"); ?>