Foros del Web » Programando para Internet » PHP »

Problema con carro de compra

Estas en el tema de Problema con carro de compra en el foro de PHP en Foros del Web. Hola amigos, estoy implementando un carrito de compras y tengo un problema, tomé como muestra el ejemplo de webestilo.com y he tratado de adaptarlo al ...
  #1 (permalink)  
Antiguo 04/06/2007, 17:37
Avatar de ZydRick  
Fecha de Ingreso: febrero-2005
Ubicación: Lima
Mensajes: 750
Antigüedad: 19 años, 2 meses
Puntos: 4
Duda con carro de compra

Hola amigos, estoy implementando un carrito de compras y tengo un problema, tomé como muestra el ejemplo de webestilo.com y he tratado de adaptarlo al sistema que estoy creando, los scripts son los siguientes:

Código PHP:
// Este es el formulario que envía los datos a un script llamado carrito.php
// antes del form está la consulta que muestra los productos
<form action="carrito.php" method="post">
    <input type="hidden" name="idprod" value="<?=$idprod?>" />
    <input type="hidden" name="nomart" value="<?=$nomart?>" />
    <input type="hidden" name="marca" value="<?=$marca?>" />
    <input type="hidden" name="precio" value="<?=$precio?>" />
    <input type="text" name="cantidad" style="width: 60px; text-align: right;" /> <input type="submit" value="Agregar" />
</form>
Este es el script que recoge los datos y los guarda en una sesión

Código PHP:
<?php
    session_start
();
    
session_register('itemsEnCesta');
    
$idprd $_POST['idprod'];
    
$nomart $_POST['nomart'];
    
$marca $_POST['marca'];
    
$precio $_POST['precio'];
    
$cantidad $_POST['cantidad'];
    
    
$itemsEnCesta $_SESSION['itemsEnCesta'];
    
    if(
$item) {
        if(!isset(
$itemsEnCesta)) {
            
$itemsEnCesta[$item][idprd] = $idprod;
            
$itemsEnCesta[$item][nomart] = $nomart;
            
$itemsEnCesta[$item][marca] = $marca;
            
$itemsEnCesta[$item][precio] = $precio;
            
$itemsEnCesta[$item][cantidad] = $cantidad;
        }else{
            foreach(
$itemsEnCesta as $k => $v) {
                if (
$item==$k) {
                    
$itemsEnCesta[$k][cantidad]+=$cantidad;
                    
$encontrado=1;
                }
            }
            if(!
$encontrado) {
                
$itemsEnCesta[$item][idprd] = $idprod;
                
$itemsEnCesta[$item][nomart] = $nomart;
                
$itemsEnCesta[$item][marca] = $marca;
                
$itemsEnCesta[$item][precio] = $precio;
                
$itemsEnCesta[$item][cantidad] = $cantidad;
            }
        }
    }
    
$_SESSION['itemsEnCesta'] = $itemsEnCesta;
    
    
// muestro aquí el nombre del producto y la cantidad ingresada
    
if(isset($itemsEnCesta)) {
        echo
'El contenido de la cesta de la compra es:<br />';
        foreach(
$itemsEnCesta as $k => $v) {
            echo 
'Artículo: '.$k.' ud: '.$v.'<br />';
        }
    }
?>
El problema está en que al enviar los datos desde el formulario el script carrito.php no me muestra ningún resultado, no sé donde puede estar la falla, espero que alguno de ustedes me pueda echar una mano. Gracias de antemano.

Saludos

Última edición por ZydRick; 06/06/2007 a las 16:10
  #2 (permalink)  
Antiguo 05/06/2007, 19:47
Avatar de ZydRick  
Fecha de Ingreso: febrero-2005
Ubicación: Lima
Mensajes: 750
Antigüedad: 19 años, 2 meses
Puntos: 4
Re: Problema con carro de compra

Bueno, hoy estuve toqueteando el script y sólamente trabajé con la id del producto y la cantidad de productos que se deseaban adquirir, de modo que el formulario quedó de esta manera:

Código HTML:
<form action="carrito.php" method="post">
	<input type="hidden" name="idprod" value="<?=$idprod?>" />
	<input type="text" name="cantidad" style="width: 60px; text-align: right;" /> <input name="agregar" type="submit" id="agregar" value="Agregar" />
</form> 
y el script que recoge los datos quedó de esta forma, el cual también le realisé sus respectivas validaciones para que se recojan bien los datos.

Código PHP:
<?php
    session_start
();
    if(isset(
$_POST['agregar'])) {
        if(!
is_numeric($_POST['cantidad'])) {
            echo 
"<strong>El campo cantidad debe contener s&oacute;lo n&uacute;meros. <a href='javascript:history.back()'>Regresar</a></strong>";
        }else {
            
session_register('itemsEnCesta');
            
$item $_POST['idprod'];
            
$cantidad $_POST['cantidad'];
            
$itemsEnCesta $_SESSION['itemsEnCesta'];
            
            if(
$item) {
                if(!isset(
$itemsEnCesta)) {
                    
$itemsEnCesta[$item]=$cantidad;
                }else {
                    foreach(
$itemsEnCesta as $k => $v) {
                        if(
$item==$k) {
                            
$itemsEnCesta[$k]+=$cantidad;
                            
$encontrado=1;
                        }
                    }
                    if(!
$encontrado$itemsEnCesta[$item] = $cantidad;
                }
            }
            
$_SESSION['itemsEnCesta'] = $itemsEnCesta;
        
            
$redir $_SERVER['HTTP_REFERER'];
            
header("Location: $redir");
        }
    }else {
        echo 
"<strong>No se han procesado los datos correctamente. <a href='javascript:history.back()'>Regresar</a></strong>";
    }
?>
Jugando con la ID del producto armé una tabla html que me mostrara el nombre del producto, su precio y además de obtener el precio total según la cantidad de productos solicitados, este es el script:

Código PHP:
<?php
    
// este archivo se llama pedidos.php y muestra los pedidos que ha ido realizando el usuario
    
session_start();
    include(
'config.php');
?>
<table style="border: 1px solid #e0e0e0; width: 100%;" cellpadding="0" cellspacing="0">
    <tr>
        <td style="border: 1px solid #e0e0e0; text-align: center; padding: 5px; background: #f7f7f7;"><strong>Producto</strong></td>
        <td style="border: 1px solid #e0e0e0; text-align: center; padding: 5px; background: #f7f7f7;"><strong>P. unidad</strong></td>
        <td style="border: 1px solid #e0e0e0; text-align: center; padding: 5px; background: #f7f7f7;"><strong>Cantidad</strong></td>
        <td style="border: 1px solid #e0e0e0; text-align: center; padding: 5px; background: #f7f7f7;"><strong>Sub Total</strong></td>
    </tr>
<?php
    
if(isset($itemsEnCesta)) {
    
$total=    "";
        foreach(
$itemsEnCesta as $k => $v) {
            
$sql mysql_query("SELECT * FROM productos WHERE idprod='".$k."'");
            while(
$row mysql_fetch_array($sql)) {
                
$nomart $row['nomart'];
                
$precio $row['precio'];
                
$st $precio*$v;
                
$subt number_format($st2'.'' ');
                
$total $total+$st;
                
$tot number_format($total2'.'' ');
?>
    <tr>
        <td style="text-align: left; border: 1px solid #e0e0e0; padding: 5px;"><?=$nomart?></td>
        <td style="text-align: right; border: 1px solid #e0e0e0; padding: 5px;"><?=$precio?></td>
        <td style="text-align: right; border: 1px solid #e0e0e0; padding: 5px;"><?=$v?></td>
        <td style="text-align: right; border: 1px solid #e0e0e0; padding: 5px;"><?=$subt?></td>
    </tr>
<?php
            
}
        }
    }
?>
    <tr>
        <td colspan="3" style="text-align: right; border: 1px solid #e0e0e0; padding: 5px;"><strong>Total:</strong></td>
        <td style="text-align: right; border: 1px solid #e0e0e0; padding: 5px;"><?=$tot?></td>
    </tr>
</table><br />
<?php
    
if(!empty($_SESSION['usuario'])) {
?>
        <a href="enviarpedido.php" style="border: 1px solid #000; background: #FFCC33; padding: 8px; font-weight: bold; color: #000; text-decoration: none;">Enviar pedido</a>
<?php
    
}else {    
?>
        <div style="border: 1px solid #ff0000; color: #ff0000; padding: 5px; text-align: center;">
            Para realizar la orden de pedido debe estar registrado y logueado en nuestro sistema.<br />
            <a href="<?=$_SERVER['HTTP_REFERER']?>" style="color: #ff0000;"><strong>Ingresar</strong></a>
        </div>
<?php
    
}
?>
Como se darán cuenta, mientras el usuario no esté logueado no puede realizar la orden de pedido, eso no es problema porque ya tengo el script de registro de usuarios funcionando y al loguearse el usuario le muestra el enlace para que finalise la orden de pedido, y es ahí donde está mi problema, cómo puedo hacer para guardar esos datos en mi BD en una tabla órdenes de manera tal que se guarden los productos agregados al carro y los datos del usuario que los procesó.?, ojalá me puedan echar una mano con este lío. Gracias por la ayuda.

Saludos
  #3 (permalink)  
Antiguo 06/06/2007, 12:36
Avatar de franleomg  
Fecha de Ingreso: mayo-2006
Ubicación: LIMA PERU
Mensajes: 75
Antigüedad: 18 años
Puntos: 0
Re: Problema con carro de compra

Es simple: crea una tabla de ordenes con los campos y los id nesesarios (id de producto, id se usuario, fechsa etc.) las cuales se enlarzan con su informacion de cada table.

Usa los datos se la session y inserta en esa tabla de ordenes: en cada campo los datos de la session (la session debe guardar los datos del producto y los campos que deses mostrar)
__________________
:: FRANLEOMG ::
Melgarejo Graciano M. Efraín
[email protected]
  #4 (permalink)  
Antiguo 06/06/2007, 14:45
Avatar de ZydRick  
Fecha de Ingreso: febrero-2005
Ubicación: Lima
Mensajes: 750
Antigüedad: 19 años, 2 meses
Puntos: 4
Re: Problema con carro de compra

Esa es el problema que tengo, el recorrer la sesión para ir insertando los datos del carrito en la BD, alguna idea de como hacer este proceso?. Gracias
  #5 (permalink)  
Antiguo 06/06/2007, 18:59
Avatar de ZydRick  
Fecha de Ingreso: febrero-2005
Ubicación: Lima
Mensajes: 750
Antigüedad: 19 años, 2 meses
Puntos: 4
Re: Problema con carro de compra

He estado intentando hacerlo como me explicaste e hice esto:

Código PHP:
<?php
    
// concretar pedido.php
    
session_start();
    include(
'config.php');
    if(isset(
$itemsEnCesta)) {
         foreach(
$itemsEnCesta as $k => $v) {
            
$idpedido uniqid();
            
$sql mysql_query("INSERT INTO pedidos (idpedido,idprod,numprod) VALUES('".$idpedido."','".$k."','".$v."')");
        }
        
$sql2 mysql_query("INSERT INTO orden (iduser,idpedido,finalizado) VALUES('".$_SESSION[idusuario]."','".$idpedido."',0)");
        echo 
"Datos agregados correctamente.";
    }
?>
El problema está en que las id de los pedidos son todas distintas en ambas tablas debe ser por la funcion uniqid que usé o quizás sea otra la falla pero no consigo realizarlo, como podría solucionar ello?

Saludos.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:29.