Foros del Web » Programando para Internet » PHP »

carro de compras.

Estas en el tema de carro de compras. en el foro de PHP en Foros del Web. Bueno luego de buscar y buscar me he animado a pedirles ayuda. Ya tengo desarrollado el tema de busqueda y muestra de productos y todo ...
  #1 (permalink)  
Antiguo 07/03/2004, 21:43
 
Fecha de Ingreso: noviembre-2003
Mensajes: 59
Antigüedad: 20 años, 4 meses
Puntos: 0
carro de compras.

Bueno luego de buscar y buscar me he animado a pedirles ayuda.

Ya tengo desarrollado el tema de busqueda y muestra de productos y todo en mi tienda online, el tema es que no he podido implementar el vendito carro..

basicamente entiendo que un usuario al entrar via index. se inicia su sesion unica y personal y al mismo tiempo de iniciar esta se puede iniciar una variable por ejemplo $carro, pero el tema que quedo plop, es como lleno esa variable, probe con arreglos, pero jamas me funciono y en esto estoy.. =(


si alguien tiene un code que se asemeje a lo que es inicar la sesión y el carro propiamente tal y como se muestra el contenido de dicho carro en algun momento..... se que esto se borra si el usuario se sale de la página, pero les reitero estoy topando en eso... plz.. si alguien posee algun code así plz..


Nesky.
  #2 (permalink)  
Antiguo 07/03/2004, 21:57
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Bueno .. en su base un "carrito de compra" no es más que manejar un array (bidimensional o vários con mismo indice para los productos del carro y sus propiedades: precio, nombre, etc ...) pero que se propaga (el array) en cookies o sesiones.

Lee las FAQ's de este foro por qué ahí veras como trabajar con variables de sesión .. Si te manejas ya con arrays . .solo tienes que crear dicha variable de sesión con tu array .. leerla donde requieras y modificarla donde gustes, todo cambio debe ser volcado nuevamente a la variable de sesión para que quede disponible en sucesivas llamadas.

En sistios como www.phpclasses.org (busca por "basket") tienes ejemplos como los que te comento que gestionan ese tipo de arrays típicos. El resto pese que puedan tener ejemplos es lo de menos si lo propagas en cookies o sesiones se trabaja igual que una simple variable.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #3 (permalink)  
Antiguo 07/03/2004, 22:04
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 20 años, 7 meses
Puntos: 41
Si sólo te interesa que los datos del carro permanezcan durante la sesión... pues utiliza sesiones... si quieres que permanezcan en futuras sesiones... pues utiliza cookies... también puedes guardar el carro lleno en la BD... o en un .txt... en fin... define más o menos qué es lo que quiers hacer...

Si vas a utilizar sesiones... pues el funcionamioento básico es que el carro sea una variable de sesión... en este caso $carro será un array... en este array la llave (o clave) será el identificador del producto (id, nombre, etc.) y el valor será la cantidad seleccionada.


Cada vez que se agrega un elemento al carro se ejecutará una línea como la que sigue:
$carro[$id_producto]=$cantidad;

Claro que, como se pasará por la sesión sería más bien:
$_SESSION['carro'][$id_producto]=$cantidad;

Esto supone que en algún lugar tendrás guardadas las otras propiedades del producto (nombre, precio, etc.) puede ser la BD o un txt o un array o lo que quieras...

¿Entendiste algo?

Saludos
  #4 (permalink)  
Antiguo 08/03/2004, 07:31
 
Fecha de Ingreso: febrero-2004
Ubicación: Chillán
Mensajes: 35
Antigüedad: 20 años, 2 meses
Puntos: 0
nesky este carrito esta en : http://www.webestilo.com/php/php12e.phtml
y funciona ademas ahi te explican ojala te sirva.

<?php // Manual de PHP de WebEstilo.com
session_start();
session_register('itemsEnCesta');
$item=$_POST['item'];
$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;
?>
<html>
<body>
<tt>
<form action="<?=$PHP_SELF."?".$SID?>" method="post">
Dime el producto <input type="text" name="item" size="20"><br>
Cuantas unidades <input type="text" name="cantidad" size="20"><br>
<input type="submit" value="Añadir a la cesta"><br>
</form>
<?
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>';
}
}
?>
</tt>
</body>
</html>
  #5 (permalink)  
Antiguo 08/03/2004, 07:57
 
Fecha de Ingreso: noviembre-2003
Mensajes: 59
Antigüedad: 20 años, 4 meses
Puntos: 0
Hola hola,, thankz a to2, mira en base a ese carro me estoy guiando, de hecho lo iba a postear, pero ahi como mencione antes con los arrays no me funcion y supongo que es por falta de conocimiento mio.... pero debe ser und etalle.
el tema en ese es que ¿como sumo los totales de los precios..?

ósea basicamente como saco item...cesta, los datos uno a uno, no se si me explico bien..

Nesky.
  #6 (permalink)  
Antiguo 08/03/2004, 08:39
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Nesky ... el "carro" gestiona un array así que puedes usar funciones sobre arrays como el montón que dispone PHP .. por ejemplo para ese "total" puedes usar:

array_sum() entre otras ...

Y para recorrer un array usa sus indices o bien usa bucles foreach() que para arrays van muy bien.

Repasa algún tutorial de PHP tema: Arrays (arreglos, matrices)

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #7 (permalink)  
Antiguo 08/03/2004, 11:07
 
Fecha de Ingreso: noviembre-2003
Mensajes: 59
Antigüedad: 20 años, 4 meses
Puntos: 0
amigos, miren, el tema es que llegue justo a una parte en mi aprendizaje de PHP que SIEMPRE HE TENIDO PROBLEMAS, lo reconosco, he leido y releido y siempre hay algo que en esta etapa me caga la onda =(,, pero como buen programador porfiao toy uniendo hilos..


yo quiero que me guien un pokito =)

yo ya tengo esta tienda montada

http://www.pcelectronica.cl/mostrarp...20692C%20COLOR

este linea es para ver que solo falta el botonsito agragar el carro.. y eso es lo q quiero que de ahi salga el codigo, nombre y precio. y eso lo envio al carro, pero unirlo a la sesión... ahi se me complico.. por que es manejar array + sesion y ahi cague =(..


Nesky.
  #8 (permalink)  
Antiguo 08/03/2004, 18:28
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 20 años, 7 meses
Puntos: 41
Pues el manual recomienda por todos lados no utilizar las funciones session_register(), session_unregister(), etc. junto con el superglobal $_SESSION.. así que habrá que avisarles a los de webestilo...

Saludos
  #9 (permalink)  
Antiguo 09/03/2004, 19:06
 
Fecha de Ingreso: noviembre-2003
Mensajes: 59
Antigüedad: 20 años, 4 meses
Puntos: 0
TOY sumamente cerca =) y necesito su ayudita...
el tema es que yo necesito que el carro se me llene con 4 campos.

code
nombre
cant
precio

Ahora bien ya tengo enviando esos 4 datos al carro el punto es que el codigo siguiente me recepciona 2 bien que serian item = nombre y cantidad = precio...

y los otros 2 no cacho como incorporarlos a este codigo..
estoy pasando 2 bien y aqui se me recepcionan, pero los otros 2 no se como meterlos =(..

PLZZ!!!..

no se si me explique bien.

La idea es que este codigo sea para los 4 datos.. que se llaman como estan arriba.


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;


Nesky
  #10 (permalink)  
Antiguo 09/03/2004, 19:07
 
Fecha de Ingreso: noviembre-2003
Mensajes: 59
Antigüedad: 20 años, 4 meses
Puntos: 0
Uta me equivoque ESTE ES EL CODIGO QUE RECIBE solo 2 datos y obviamente me muestra solo los 2

session_start();
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;
?>
<?
if (isset($itemsEnCesta)){
echo'El contenido de la cesta de la compra es:<br>';
foreach($itemsEnCesta as $k => $v)
{
echo 'Codigo: '.$code.' Artículo: '.$k.' ud: '.$v.' Cantidad : '.$cant.' Total = '.$v*$cant.' <br>';
}
}
?>

Nesky
  #11 (permalink)  
Antiguo 10/03/2004, 09:21
 
Fecha de Ingreso: diciembre-2000
Mensajes: 35
Antigüedad: 23 años, 4 meses
Puntos: 1
Y como hago si tengo que eliminar un producto de la cesta? osea quitarlo del array
  #12 (permalink)  
Antiguo 10/03/2004, 10:10
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Con la función:

unset()

al elemento que quieras quitar .. Aplicalo al array de la cesta y de ahí registras nuevamente el array obtenido a tu variable de sesión para que se refleje el cambio en posteriores llamadas a esa variable (array) que propagas en tu sesión.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.

Última edición por Cluster; 10/03/2004 a las 10:11
  #13 (permalink)  
Antiguo 10/03/2004, 10:21
 
Fecha de Ingreso: noviembre-2003
Mensajes: 59
Antigüedad: 20 años, 4 meses
Puntos: 0
Pucha y nadie me respondio de como meter 4 alementos al array =(,. y como mostrarlos.. que era vacicamente lo que hay en el codigo anterior, pero que funciona perfecto solo para 2...

. plz.. q es lo unico q me complica ahora.. q no cacho como hacerlo, estoy buscando, pero no me resulta.


Nesky.
  #14 (permalink)  
Antiguo 11/03/2004, 19:30
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 20 años, 7 meses
Puntos: 41
nesky:
Con el code y la cantidad es más que suficiente... me imagino que tienes en una tabla de la BD o en un .txt la información de precio unitario, nombre y otras propiedades... tonces no es necesario que andes pasando todos esos datos que no cambian según el usuario...

En las páginas que quieres mostrar el contenido del carro... pues haces una consulta a la bd (si es el caso) y con operaciones sencillas puedes tener toda la información que quieras...
Saludos
  #15 (permalink)  
Antiguo 11/03/2004, 19:46
 
Fecha de Ingreso: noviembre-2003
Mensajes: 59
Antigüedad: 20 años, 4 meses
Puntos: 0
Excelente, lo probe así, de hecho lo pense, pero pense q era mas sencillo hacerlo de esa forma(tratar de pasar todo de una ), de hecho al pasar el code puedo obtener todo.

Thankz por esa alumbrada de ampolleta que sucede cuando uno se pega con un codigo =).
  #16 (permalink)  
Antiguo 12/03/2004, 20:47
 
Fecha de Ingreso: noviembre-2003
Mensajes: 59
Antigüedad: 20 años, 4 meses
Puntos: 0
Me falta super poco =)

pero ahora tengo el siguiente problema.. estoy en la pagina que me envia por email lo que el tipo a comprado, dicha pagina muestra lo que el pidio y un mensaje de "ya nos contactaremos, etc, etc..."

Ahora este codigo es la del proceso... que simultaneamente me muestro lo que el compro y por debajo me envia un email. el problema es q no puedo mandar lo que hay dentro del array al mail.. solo me envia los datos del tipo, pero he probado y en el campo que quiero q salga el contenido, solo me sale Array..

este es el codigo

<?
session_start();
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;
if (isset($itemsEnCesta)){

echo'El contenido de la cesta de la compra es:<br>';
foreach($itemsEnCesta as $k => $v)
{
include "../db.php";
$db = mysql_connect($db_host,$db_user,$db_pass);
mysql_select_db ($db_name) or die ("Cannot connect to database");
$query = "SELECT * FROM productos WHERE pro_nom = '$k'";
$result = mysql_query($query);
if($r=mysql_fetch_array($result))
{
$code=$r["pro_cod"];
$nombre=$r["pro_nom"];
$precio=$r["pro_precio"];
}
else
{
echo "<link rel=\"stylesheet\" type=\"text/css\" href=\"form.css\">";
// echo '<center>No se encontraron productos en base al criterio = '.$op.'</center>';
}
echo 'Codigo: '.$code.' Artículo: '.$nombre.' Precio unitario: '.$precio.' Cantidad : '.$v.' Total = '.$precio*$v.' <br>';
}
}
mysql_close($db);

$url= $url;
$rut= $rut.$dv;
$asunto = "PEDIDO DE PRODUCTOS";
$mensaje = "Nombre o razón social : ".$nom."
Rut : ".$rut."
Giro : ".$giro."
Dirección : ".$dire."
Región : ".$region_prof."
Comuna : ".$comuna_prof."
Email : ".$email."
Fono : ".$fono."
Cantidad : ".$cant."
PEDIDO : ".$itemsEnCesta."" // <-- ESTO HACE Q ME MUESTRE ARRAY en el mail que llega bien, pero deberia ir ahi en contenido, no lo que es.

?>

<?
mail("[email protected]", $asunto, $mensaje, "From: ".$email);
?>
  #17 (permalink)  
Antiguo 13/03/2004, 11:01
 
Fecha de Ingreso: diciembre-2003
Mensajes: 65
Antigüedad: 20 años, 4 meses
Puntos: 1
Lo mejropaea los carros de compras son las Sessiones ya que si usas cookies probablemente no todos tengan el nivel de seguridad para recivir y enviar cookies en el explorador.
  #18 (permalink)  
Antiguo 13/03/2004, 12:35
 
Fecha de Ingreso: noviembre-2003
Mensajes: 59
Antigüedad: 20 años, 4 meses
Puntos: 0
Maestro, que fumo cuando respondio?.. hehehhe..

eso esta claro, si esta hecho así de hecho en el codigo sale.. si la pregunta es otra, como envio el resultado del array ItemEnCesta por mail al administrador del sitio o ejecutivo de ventas.

Saludos.
  #19 (permalink)  
Antiguo 13/03/2004, 19:22
 
Fecha de Ingreso: octubre-2003
Ubicación: Concepción
Mensajes: 84
Antigüedad: 20 años, 6 meses
Puntos: 0
PEDIDO : ".$itemsEnCesta."" // <-- ESTO HACE Q ME MUESTRE ARRAY en el mail que llega bien, pero deberia ir ahi en contenido, no lo que es.


Podria ser algo como :

PEDIDO : ".$itemsEnCesta[$item].",

me parece que te te falta poner el identificador de item de tu carrito.

  #20 (permalink)  
Antiguo 14/03/2004, 15:49
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 20 años, 7 meses
Puntos: 41
Pues la verdad yo no entiendo bien qué es lo que hace tu código...

Para empezar... si quieres un poco de seguridad empieza a utilizar los arrays superglobales $_POST, $_GET, etc... así como ya estás utilizando el $_SESSION.

Lo mejor que puedes hacer es cambiar el estado de la directiva register_globals de tu php.ini y ponerla en off... de esa forma tu script sólo funcionará si utilizas los arrays superglobales para referirte a las variables que vienen de otra parte (formulario, url, sesión, cookies, etc.)...

En tu caso parece ser que cada vez que el usuario selecciona un artículo y una cantidad se te envía un mail con el pedido... además que cada vez que ocurre esto se "re-setea" el array que estás pasando por la sesión... lo que hará que siempre tengas un sólo artículo en la sesión... no sé si me esté equivocando, pero eso es lo que parece que pasa... claro que el tener el register globals en ON puede estar confundiéndote porque $_SESSION['itemsEnCesta'] y $itemsEnCesta serían lo mismo... entonces la línea:
$_SESSION['itemsEnCesta']=$itemsEnCesta;
No tiene mucho sentido...

Haz lo que te digo... cambia el estado del register globals a OFF y vas a ver los errores que estás cometiendo y vas a hacer tu código más claro...

Sobre lo de que te sale "Array" en lugar del contenido, pues es así como funciona... no puedes imprimir el contenido de un array así como así... para eso tienes que utilizar un foreach o funciones como print_r() ( http://www.php.net/manual/es/function.print-r.php )...

Puedes guardar el resultado del print_r en una variable por ejemplo:
$pedido = print_r($itemsEnCesta);
Y luego lo pones igual que el resto:
PEDIDO : ".$pedido.""

Saludos
  #21 (permalink)  
Antiguo 14/03/2004, 21:34
 
Fecha de Ingreso: noviembre-2003
Mensajes: 59
Antigüedad: 20 años, 4 meses
Puntos: 0
Exactamente así lo hice pase todo lo del contenido a otro arreglo y luego dentro de ese arreglo manipule las variables y les di formato para q no solo se fueran por mail en texto, quedo excelente.

esta funcionando impeque, manda email al usuario y al admin de la tienda, así se confirman los datos y el tema de los global, tambien lo corregi, muchas gracias por sus comentarios de a poquito fui construyendo el carro.

es muy freak pensar q el primer dia q posteo el tema no tenia idea y ahora dias despues esta todo OK.!

Muchas Gracias nuevamente.

Nesky.
  #22 (permalink)  
Antiguo 13/07/2005, 03:02
T4X
 
Fecha de Ingreso: enero-2004
Ubicación: myT-Base
Mensajes: 254
Antigüedad: 20 años, 3 meses
Puntos: 2
He intentado ver este carro me parece facil u entendimiento pero no funciona, algo pasa alli!
__________________
Ahora T4X es
WinGFX!!!!!
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 03:17.