Curso de PHP

Estás en: Variables externas y Formularios : Carrito de la compra

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"); 
?>