Autor Tema: Dudas con el manejo de sesión en el carro de la compra  (Leído 3165 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Xavi

  • Visitante
Dudas con el manejo de sesión en el carro de la compra
« : diciembre 17, 2012, 12:59:19 pm »
Buenas tardes,

Me dirijo a ustedes a ver si me pueden echar una mano sobre un carrito de la compra básico que estoy haciendo en PHP. El funcionamiento es sencillo: a través de un form se recopilan los productos a comprar y luego una segunda página lista la cantidad de veces que se ha añadido ese producto y el manejo lo hago con una sesión a la cual se construye con un array.

productos.php

Código: [Seleccionar]
<?php
session_start();
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitio nal.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
 <title>Carrito de la compra</title>
</head>
 
<body>

<h1>Carrito de la compra</h1>

<form action='listar_productos.php' method='post'>
<p>Elige los productos que deseas comprar:</p>
<input type="checkbox" name="discoduro" value="1"> Disco duro <br />
<input type="checkbox" name="raton" value="1"> Ratón <br />
<input type="checkbox" name="tablet" value="1"> Tablet <br />
<input type="checkbox" name="impresora" value="1"> Impresora <br />
<input type="checkbox" name="scaner" value="1"> Scaner <br />
<input type="checkbox" name="teclado" value="1"> Teclado <br />
<input type="checkbox" name="router" value="1"> Router <br />
<input type="checkbox" name="portatil" value="1"> Portátil <br />

<br /><input type='submit' value='Enviar' name='submited'>
<input type='submit' value='Borrar' name='delete'><br />
</form>

</body>
</html>

listar_productos.php

Código: [Seleccionar]
<?php
session_start();
//$productos=$_SESSION["productos"];
//$_SESSION["productos"]=$productos;

// Declarar variables

$discoduro= $_POST['discoduro'];
$raton= $_POST['raton'];
$tablet= $_POST['tablet'];
$impresora= $_POST['impresora'];
$scaner= $_POST['scaner'];
$teclado= $_POST['teclado'];
$router= $_POST['router'];
$portatil= $_POST['portatil'];
$codigo= $_POST["codigo"];

//parte incompleta
$_SESSION['productos'][$codigo] = array('discoduro' => $discoduro, 'raton' => $raton, 'tablet' => $tablet, 'impresora' => $impresora, 'scaner' => $scaner, 'teclado' => $teclado, 'router' => $router, 'portatil' => $portatil);


//vaciar el carrito de la compra
if($_POST['delete'] == true){
$_SESSION['productos']='';
echo "Ha vaciado el carrito de la compra<br /><br />";
echo '<a href="productos.php">Volver</a>';
exit();
}

//recorremos el carrito
while(list($k, $v) = each($_SESSION['productos'])){
echo $k ." => ". $v ."<br />";
}

?>

<a href="productos.php">Volver</a>

Básicamente el problema lo tengo a la hora de tratar la sesión con el array que no sé cómo manipularlo correctamente.

Gracias por vuestra ayuda ;)
Si has encontrado útil este articulo recuerda que puedes ayudarnos con tu donación voluntaria la cual ayudará al staff y a la mantención del foro.

Desconectado WHK

  • 吴阿卡
  • Administrador
  • Aportador
  • *****
  • Mensajes: 555
  • Karma: +15/-3
  • Coder
    • Yahoo Instant Messenger - yan_uniko_102
    • Ver Perfil
    • WHK
    • Email
Re:Dudas con el manejo de sesión en el carro de la compra
« Respuesta #1 : diciembre 17, 2012, 01:22:41 pm »
mira, que tal esto, en un solo archivo separado por vista controlador, la sesión maneja los productos comprados, para agregar productos solo debes agregarlos al array principal :)

Código: php [Seleccionar]
<?php
session_start();

/* Listado de productos, cada item tiene asociado una llave del Array (llave primaria) */
$productos = array(
    'Disco duro', 'Ratón', 'Tablet', 'Impresora',
    'Scanner', 'Teclado', 'Router', 'Portátil'
);

if((!isset($_SESSION['comprados'])) or isset($_GET['limpiar']))
    $_SESSION['comprados'] = array();

if(isset($_GET['listar'])){
    if(isset($_POST['productos'])){
        foreach($_POST['productos'] as $comprado => $val){
            if(isset($productos[$comprado])){ // El producto existe?
                if(isset($_SESSION['comprados'][$comprado]))
                    $_SESSION['comprados'][$comprado]++;
                else
                    $_SESSION['comprados'][$comprado] = 1;
            }
        }
    }
}
?>

<!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" dir="ltr" lang="en-US" xml:lang="en">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
        <title>Empresa X</title>
    </head>
    <body>
        <?php if($_GET['listar']){ ?>
            <h1>Productos comprados</h1>
            <?php if(count($_SESSION['comprados']) > 0){ ?>
                <?php foreach($_SESSION['comprados'] as $producto => $cantidad){ ?>
                    <?php if(isset($productos[$producto])){ ?>
                        <?php echo htmlspecialchars($productos[$producto], ENT_QUOTES); ?>: <?php echo (int)$cantidad; ?><br />
                    <?php }else{ ?>
                        [!] El producto comprado no existe o ha sido eliminado del sistema.<br />
                    <?php } ?>
                <?php } ?>
            <?php }else{ ?>
                No hay productos comprados.
            <?php } ?>
            <br />
            <a href="?limpiar=@">limpiar lista</a>
       
        <?php }else{ ?>
            <h1>Carrito de la compra</h1>
            <form action="?listar=@" method="post">
                <p>Elige los productos que deseas comprar:</p>
                <?php foreach($productos as $id => $producto){ ?>
                    <input type="checkbox" name="productos[<?php echo (int)$id; ?>]" value="1"><?php echo htmlspecialchars($producto, ENT_QUOTES); ?><br />
                <?php } ?>
                <br />
                <input type="submit" value="comprar" />
            </form>
        <?php } ?>
       
    </body>
</html>


Saludos!
« Última Modificación: diciembre 17, 2012, 02:14:08 pm por WHK »
Mi WEB - The Hacktivism is not a crime - Si no lo hago yo, que lo hagan otros -

Desconectado YaTaMaS

  • Recién llegado
  • *
  • Mensajes: 1
  • Karma: +1/-0
    • Ver Perfil
Re:Dudas con el manejo de sesión en el carro de la compra
« Respuesta #2 : diciembre 17, 2012, 08:58:15 pm »
Después de unos arreglos funcionó perfecto este modelo para acabar de perfeccionar el mío.

Gracias por la ayuda WHK  :)


. . . . . . . .