Foros del Web » Programando para Internet » PHP »

cesta de la compra

Estas en el tema de cesta de la compra en el foro de PHP en Foros del Web. Hola, estoy haciendo una cesta de la compra online y me gustaría saber de que forma puedo hacerlo mejor, para que alguién me pueda orientar ...
  #1 (permalink)  
Antiguo 15/01/2007, 08:47
 
Fecha de Ingreso: septiembre-2005
Mensajes: 522
Antigüedad: 18 años, 7 meses
Puntos: 0
cesta de la compra

Hola, estoy haciendo una cesta de la compra online y me gustaría saber de que forma puedo hacerlo mejor, para que alguién me pueda orientar un poco. Por ejemplo guardando los datos en una base de datos cojiendo la IP del visitante...guardarme los productos en una variable o vector i pasandolos por get o post de pagina en pagina....o si hay otra forma mejor que estas dos ?
Grácias
  #2 (permalink)  
Antiguo 15/01/2007, 11:07
Avatar de mauricio2004  
Fecha de Ingreso: marzo-2004
Mensajes: 264
Antigüedad: 20 años, 1 mes
Puntos: 0
Re: cesta de la compra

io uso session mas registro el carro en una base de datos, con el identificador de la session
  #3 (permalink)  
Antiguo 16/01/2007, 02:39
 
Fecha de Ingreso: septiembre-2005
Mensajes: 522
Antigüedad: 18 años, 7 meses
Puntos: 0
Re: cesta de la compra

puedo pedirte un ejemplo de como lo haces si no es molestia ?
  #4 (permalink)  
Antiguo 16/01/2007, 07:31
Avatar de mauricio2004  
Fecha de Ingreso: marzo-2004
Mensajes: 264
Antigüedad: 20 años, 1 mes
Puntos: 0
Re: cesta de la compra

Primero tienes que crear un identificador, me refiero a un identificador un numero unico que no se repita y que identifique a un usuario,

por ejemplo para mi uso, lo hago asi

20060115-252153

Yo genero un identificador que es el año, mes, dia - hora, min, seg, y puede ser un numero aleatorio,

lo hago asi para despues tener estadisticas por fechas de los carros abandonados.

Eso lo guardas en una variable session o cokkie, aunque la session es mas segura.


mientras el usuario esta navegando esa variable no se va a perder ya que esta guardada en la session del usuario (Me imagino que sabes como trabajar con sessiones)


ahora si el cliente pincha en un producto para comprar lo guardas en la tabla carro asi

insert into carro values ('$session','$id_producto','$cantidad','');

donde la session es el usuario, el id_producto es el ID del producto mismo y tambien viene la cantidad de cuantos productos quiere,

ahora para mostrar cada carro al correspondiente cliente le haces

Select * from carro where session='$session';

asi solo mostraras el carro que le corresponde a cada usuario

Espero que te haya quedado mas claro

Saludos
  #5 (permalink)  
Antiguo 16/01/2007, 08:17
 
Fecha de Ingreso: septiembre-2005
Mensajes: 522
Antigüedad: 18 años, 7 meses
Puntos: 0
Re: cesta de la compra

gracias ... ahora se por donde empezar aunque tengo algunas dudas.
primero el tema de sesiones no se como va muy bien, quiero decir que yo cuando creo una sesión lo hago de la forma siguiente:


$tiempo= time()+1800;
$key="secret key";
$codigoMD5=md5(md5($usuario.$key.$temps).$key.$tie mpo);
$time=$codigoMD5;
$inser="INSERT INTO sesiones (codigo, id_usuario, hora) VALUES ('$codigoMD5', '$usuario', '$tiempo');";

paso el codigo por cada pagina ....

el otro tema es que ... me gustaria poder guardar la cesta de la compra aunque no haya usuario online, quiero decir que la gente pueda comprar (añadir a lac esta) estando logueados o no (visitantes) luego cuando realize los pedidos (la compra real) del carrito pedir el login (usuario y contraseña ) o registrarse (nuevo usuario).
  #6 (permalink)  
Antiguo 16/01/2007, 08:26
Avatar de mauricio2004  
Fecha de Ingreso: marzo-2004
Mensajes: 264
Antigüedad: 20 años, 1 mes
Puntos: 0
Re: cesta de la compra

en el home o index

session_start();
session_register('session');
$_session['session'] = $codigo


a todas las paginas tienes que empezar con session_start(); para que la session no se pierda, asi te evitas de andar pasando la variable por la url.

Si necesitas llamarla la llamas con el nombre

$_session['session'] y walaaaa el numerito no se perdio

avisanos!
  #7 (permalink)  
Antiguo 16/01/2007, 08:59
Avatar de ZiTAL  
Fecha de Ingreso: marzo-2004
Ubicación: Bermio (Bizkaia)
Mensajes: 1.545
Antigüedad: 20 años, 1 mes
Puntos: 62
Re: cesta de la compra

no se recomienda el uso de session_register, se debe de poner seguido el
Código PHP:
$_SESSION["nombre_variable"]=$valor
tengo un ejemplito de carrito de compra haber si te sirve de algo, es lo basico para aprender ;)

Código PHP:
<?php
// sesinue hasi
session_cache_limiter("nocache,private");
session_start();
//
if( ! empty( $_GET["sartu"] ) ) 
{
      
$id_producto=$_GET["sartu"];
      
$_SESSION["carrito"][$id_producto]["id_producto"]= $id_producto;
      
$_SESSION["carrito"][$id_producto]["cantidad"]= $_SESSION["carrito"][$id_producto]["cantidad"] + 1;
}
elseif( ! empty( 
$_GET["kendu"] ) ) 
{
      
$id_producto=$_GET["kendu"];
      
$_SESSION["carrito"][$id_producto]["id_producto"]= $id_producto;
      if(
$_SESSION["carrito"][$id_producto]["cantidad"]>0)
       {
        
$_SESSION["carrito"][$id_producto]["cantidad"]= $_SESSION["carrito"][$id_producto]["cantidad"] - 1;
       }      

elseif(
$_GET["reset"]=="Bai")
 {
      unset(
$_SESSION["carrito"]); 
 }
?>
<html>
<head>
</head>
<body>
Añadir:<br />
<a href="?sartu=1">producto1</a><br />
<a href="?sartu=2">producto2</a><br />
<a href="?sartu=9">producto9</a><br />
Quitar:<br />
<a href="?kendu=1">producto1</a><br />
<a href="?kendu=2">producto2</a><br />
<a href="?kendu=9">producto9</a><br />
<br />
<br />
<br />
<br />
<a href="?reset=Bai">reset</a><br />
<?php 
if( isset( $_SESSION["carrito"] ) && count$_SESSION["carrito"] ) > ){
    foreach( 
$_SESSION["carrito"] as $item )
    {
         if(
$item["cantidad"]!=0)
          {
             
?><br />Producto: <?php echo $item["id_producto"]; ?> - cantidad: <?php echo $item["cantidad"];
         }
    }

?>
<br /><br /><br />
<?php echo count($_SESSION["carrito"]); ?>
</body>
</html>
__________________
http://zital.no-ip.org
____________________

Euskerie ahuen eta bijotzan
  #8 (permalink)  
Antiguo 17/01/2007, 02:53
 
Fecha de Ingreso: septiembre-2005
Mensajes: 522
Antigüedad: 18 años, 7 meses
Puntos: 0
Re: cesta de la compra

me ha ido muy bien gracias...hasta hoy no he entendido el funcionamiento de las sesiones.
Mi duda ahora es : es fiable pasar los datos de esta manera? o es mejor pasar la sesion por las variables de sesiones o crear el "id" y pasarlo por las URLS como hacen en muchas webs ?
  #9 (permalink)  
Antiguo 17/01/2007, 05:10
 
Fecha de Ingreso: septiembre-2005
Mensajes: 522
Antigüedad: 18 años, 7 meses
Puntos: 0
Re: cesta de la compra

Entiendo el funcionamiento...ahora en la práctica ...

tengo mi página principal.php y en ella un include("area_cliente.php"); donde se muestra una tabla para el login de usuario


area_cliente.php

if($login){
//Compruevo si existe el usuario en la base de datos
//Comrpuevo si existe la contraseña para este usuario

//sino se cumplen muestro un mensaje de error
//si se cumple muestro los datos del usuario, por ejemplo el nombre y apellidos
//En este paso o antes de mostrar los datos del usuario, tengo que iniciar la session i quiero guardarme el usuario para poder tener acceso en todas las paginas

session_start();
$_SESSION['usuario']=$usuario;

}
else{
input type=text name=usuario
input type=pasword name=contraseña
input type=submit name=login
}

ahora me gustaría que cuando vaya en la pagina otra_principal.php con un vinculo, por ejemplo, pueda mostrar el area_clientes.php (en este caso el nombre del cliente y no el formulario de acceso).

El caso es que poniendolo de esta forma me aparece el siguiente error (en la misma pagina principal.php)

ERROR:
Warning: session_start(): Cannot send session cookie - headers already sent by (output started at principal.php:6) in area_de_clientes.php on line ...

Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at principal.php:6) in area_de_clientes.php on line ...
  #10 (permalink)  
Antiguo 17/01/2007, 05:43
Avatar de ZiTAL  
Fecha de Ingreso: marzo-2004
Ubicación: Bermio (Bizkaia)
Mensajes: 1.545
Antigüedad: 20 años, 1 mes
Puntos: 62
Re: cesta de la compra

no puedes escribir nada antes de enviar las cabeceras,

vamos que antes de session_start(); no puedes hacer un echo ni una salida html, lo mismo pasa con la funcion header();
__________________
http://zital.no-ip.org
____________________

Euskerie ahuen eta bijotzan
  #11 (permalink)  
Antiguo 17/01/2007, 06:19
 
Fecha de Ingreso: septiembre-2005
Mensajes: 522
Antigüedad: 18 años, 7 meses
Puntos: 0
Re: cesta de la compra

asi pues ... tal como lo tengo (el tema del formulario e iniciar la sesion con el usuario y la contraseña)... donde debería poner el session_start(); ?
  #12 (permalink)  
Antiguo 17/01/2007, 06:34
Avatar de ZiTAL  
Fecha de Ingreso: marzo-2004
Ubicación: Bermio (Bizkaia)
Mensajes: 1.545
Antigüedad: 20 años, 1 mes
Puntos: 62
Re: cesta de la compra

si dices que en la pagina que incluyes tienes una tabla, logicamente encima de esta.
__________________
http://zital.no-ip.org
____________________

Euskerie ahuen eta bijotzan
  #13 (permalink)  
Antiguo 17/01/2007, 09:37
 
Fecha de Ingreso: septiembre-2005
Mensajes: 522
Antigüedad: 18 años, 7 meses
Puntos: 0
Re: cesta de la compra

ok ... ya esta ... todo listo ... muchas gracias.... ahora me tengo que cargar la variable de session o la session... por ejemplo cuando hagan clic en el boton logout, por ejemplo... creo que seria:

// Borramos la variable
unset ( $_SESSION['nombre'] ) {
// Borramos toda la sesion
session_destroy();

no se que tendría que hacer... si eliminar la variable (unset....) cuando ago clic en el boton y ya esta... para que si quiero entrar con otro usuario pueda crear otra variable
  #14 (permalink)  
Antiguo 17/01/2007, 09:42
 
Fecha de Ingreso: septiembre-2005
Mensajes: 522
Antigüedad: 18 años, 7 meses
Puntos: 0
Re: cesta de la compra

otra cosa es .... si cierro el explorador y lo vuelvo abrir me sigue saliendo la variable de sesion ... quiero decir ... cuanto tiempo dura la sesion esta , hay un tiempo (lo tipico de 1800 segundos...)
  #15 (permalink)  
Antiguo 17/01/2007, 10:14
Avatar de mauricio2004  
Fecha de Ingreso: marzo-2004
Mensajes: 264
Antigüedad: 20 años, 1 mes
Puntos: 0
Re: cesta de la compra

Con esa funcion le das el limite que quieres a la session

Saludos

http://cl2.php.net/manual/en/functio...che-expire.php
  #16 (permalink)  
Antiguo 17/01/2007, 10:42
 
Fecha de Ingreso: septiembre-2005
Mensajes: 522
Antigüedad: 18 años, 7 meses
Puntos: 0
Re: cesta de la compra

muchas gracias señores... me han hecho un gran favor... ;)
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 14:35.