Foros del Web » Programando para Internet » PHP »

carrito de la compra

Estas en el tema de carrito de la compra en el foro de PHP en Foros del Web. http://www.desarrolloweb.com/manuales/56/ este manual explica como hacer un carrito, pero a un mismo objeto le crea una nueva linea y yo keria que se sumaran y ...
  #1 (permalink)  
Antiguo 19/03/2005, 15:35
 
Fecha de Ingreso: noviembre-2003
Ubicación: Galicia
Mensajes: 10
Antigüedad: 14 años, 1 mes
Puntos: 0
carrito de la compra

http://www.desarrolloweb.com/manuales/56/

este manual explica como hacer un carrito, pero a un mismo objeto le crea una nueva linea y yo keria que se sumaran

y despues como haces para tratar esos datos a traves de un boton/imagen para finalizar la compra????

graciassssss
  #2 (permalink)  
Antiguo 19/03/2005, 21:40
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 13 años, 4 meses
Puntos: 101
... quizá si sos un poquito más explicativo... (incluye código de preferencia)... por favor.
Saludos!
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
  #3 (permalink)  
Antiguo 20/03/2005, 10:42
 
Fecha de Ingreso: noviembre-2003
Ubicación: Galicia
Mensajes: 10
Antigüedad: 14 años, 1 mes
Puntos: 0
a k te refieres a codigo de preferencia al codigo que quiero modificar??????
Código PHP:
<?
class carrito {
    
//atributos de la clase
       
var $num_productos;
       var 
$array_id_prod;
       var 
$array_nombre_prod;
       var 
$array_precio_prod;

    
//constructor. Realiza las tareas de inicializar los objetos cuando se instancian
    //inicializa el numero de productos a 0
    
function carrito () {
           
$this->num_productos=0;
    }
    
    
//Introduce un producto en el carrito. Recibe los datos del producto
    //Se encarga de introducir los datos en los arrays del objeto carrito
    //luego aumenta en 1 el numero de productos
    
function introduce_producto($id_prod,$nombre_prod,$precio_prod)
    {
        
$this->array_id_prod[$this->num_productos]=$id_prod;
        
$this->array_nombre_prod[$this->num_productos]=$nombre_prod;
        
$this->array_precio_prod[$this->num_productos]=$precio_prod;
        
$this->num_productos++;
    }

    
//Muestra el contenido del carrito de la compra
    //ademas pone los enlaces para eliminar un producto del carrito
    
function imprime_carrito(){
        
$suma 0;
        print(
"<span style=\"color: #333333;font-size: 25px;\">Carrito</span><br><hr>");
        print(
"<table border=0 cellpadding=\"3\" class=\"footer\">
              <tr height=20>
                <td class=\"footer\"><div class=\"texto\">Nombre producto</td>
                <td class=\"footer\"><div class=\"texto\">Precio</td>
                <td class=\"footer\"><div class=\"texto\">&nbsp;</td>
              </tr>"
);
        for (
$i=0;$i<$this->num_productos;$i++){
            if(
$this->array_id_prod[$i]!=0){
                echo 
'<tr>';
                echo 
"<td class=\"footer\">" $this->array_nombre_prod[$i] . "</td>";
                echo 
"<td class=\"footer\">" $this->array_precio_prod[$i] . " € </td>";
                echo 
"<td class=\"footer\"><a href='index.php?pag=carrito/eliminar_producto.php&linea=$i'>Eliminar producto</td>";
                echo 
'</tr>';
                
$suma += $this->array_precio_prod[$i];
            }
        }
        
//muestro el total
        
echo "<tr><td class=\"footer\"><div class=\"texto\">TOTAL:</td><td class=\"footer\"> <div class=\"texto\">$suma € </td><td class=\"footer\">&nbsp;</td></tr>";
        
//total más IVA
        
echo "</table>";
    }
    
    
//elimina un producto del carrito. recibe la linea del carrito que debe eliminar
    //no lo elimina realmente, simplemente pone a cero el id, para saber que esta en estado retirado
    
function elimina_producto($linea){
        
$this->array_id_prod[$linea]=0;
    }

//inicio la sesión
session_start();
//si no esta creado el objeto carrito en la sesion, lo creo
if (!isset($_SESSION["ocarrito"])){
    
$_SESSION["ocarrito"] = new carrito();
}
?>
este es el codigo adaptado a mi web, pero cada nuevo objeto que metes en el carrito le crea una nueva linea aunque este producto ya este introducido y lo que yo kiero es que sume uno en cantidad

y despues como puedo hacer un boton "Realizar compra" para pasar al formulario de los datos del cliente guardando todos los datos del carrito y poder pasarlos despues a la BD (cuando el cliente confirme que sus datos son correctos ahi en principio creo no hace falta ayuda)

El codigo original esta en el link k puse en el primer post :P

Última edición por Anio_pke; 20/03/2005 a las 10:43
  #4 (permalink)  
Antiguo 21/03/2005, 07:12
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
este es el codigo adaptado a mi web, pero cada nuevo objeto que metes en el carrito le crea una nueva linea aunque este producto ya este introducido y lo que yo kiero es que sume uno en cantidad

Tendrás que buscar tu producto (por el campo que lo haga único) en tu objeto antes de ingresarlo.

Por ejemplo .. en tu método introduce_producto() .. tienes el array:
array_id_prod

Puedes aplicar la función in_array() para ver si tienes ese valor ya en tu carrito (en ese array) .. si está .. no crees un elemento nuevo en los 3 arrays que usas para definir el producto en el carrito ..

Un saludo,
  #5 (permalink)  
Antiguo 21/03/2005, 07:43
 
Fecha de Ingreso: marzo-2005
Ubicación: Sevilla
Mensajes: 277
Antigüedad: 12 años, 9 meses
Puntos: 2
tengo un carrito completo hecho basado en en de esta web. si quieres agregame y te lo paso. el mio no esque esté adpatado a mi web, el mio valdría para cualquier web, sólo es el código que viene mejorado. Si lo quieres dilo y te lo paso x email
  #6 (permalink)  
Antiguo 21/03/2005, 08:10
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Cita:
Iniciado por Manu_Leon
tengo un carrito completo hecho basado en en de esta web. si quieres agregame y te lo paso. el mio no esque esté adpatado a mi web, el mio valdría para cualquier web, sólo es el código que viene mejorado. Si lo quieres dilo y te lo paso x email
Ese tipo de "ofrecimientos" sería recomendable:

1) te contactas en privado con el usuario indicado y se lo ofreces ....
2) lo publicas aquí en el foro y queda para todo el que guste usarlo .. sino ya veras (y no quiero que suceda) como este mensaje se llenga de mensajes tipo: "yo tambien lo quiero" ...

Por el bien de todos .. ya que hacías el ofrecimiento público .. coloca el código aquí .. Si es extenso contacta a un moderador (a mi mismo podría ser) para ver como lo hacemos .. Puedes incluso subir tu código a cualquier servidor tuyo y nos dejas el link por aquí para verlo.

Un saludo,
  #7 (permalink)  
Antiguo 21/03/2005, 14:03
 
Fecha de Ingreso: marzo-2005
Ubicación: Sevilla
Mensajes: 277
Antigüedad: 12 años, 9 meses
Puntos: 2
Ok, muchas gracias por el consejo. En primer lugar dire que tengo poca idea de programación y menos en PHP, sólo llevo 2 meses, no he hecho ningún tipo de curso y lo único que medio sé usar es javascript, así que lo cuelgo, y si pueden mejorarlo pues os estaría agradecido.
  #8 (permalink)  
Antiguo 21/03/2005, 14:06
 
Fecha de Ingreso: marzo-2005
Ubicación: Sevilla
Mensajes: 277
Antigüedad: 12 años, 9 meses
Puntos: 2
comento también que lo recomendaría para pocos productos, ya que uso dos bucles for encadenados que recorren un array con el numero de productos que se tiene en la web, independientemente de lo que se tenga en el carrito. Así si tenemos 1000 productos en nuestra web, un bucle para 1000 productos y que encima se encadena con otro no creo k sea muy aconsejable por el tiempo que tardaría en ejecutarse. Así que estoy abierto a posibles mejoras, que seguro que sabéis, ya que soy MUY NOVATO en esto.
  #9 (permalink)  
Antiguo 21/03/2005, 16:16
 
Fecha de Ingreso: marzo-2005
Ubicación: Sevilla
Mensajes: 277
Antigüedad: 12 años, 9 meses
Puntos: 2
primero aconsejo leer el tutorial para entenderlo y luego ver mis archivos. Debido a la extension de algun script no lo coloco aqui, sino que os dejo en esta direccion.
En lib_carrito.php, en $total debeis poner el numero de articulos totales que teneis en la web (en el ejemplo he puesto 5).
en index.php estan los articulos a vender. Los enlaces son del tipo:
<p>silla: 50€<a href="mete_producto.php?id=1&nombre=silla&precio=5 0&cant=1">añadir al carrito</a>
cant es la cantidad que vam,osa intriducir de este producto en el carrito. en el enlace pongo 1, porque desde el carrito se podran añadir más.
el ID es IMPORTANTE que sean números y no referencias con letras ó ceros delante.
y números inferiores a lo que pusimos en $total.

Por ultimo, la funcion enviar (y por consiguiente, enviar.php) se supone que manda un email a nuestro correo con el pedido. Pero NO FUNCIONA. si pueden corregirla, lo agradecería.

Y una breve explicacion:
este carrito se basa en arrays del tamaño de $total.
cuando lo metremos lo meteremos en la posicion id del enlace:
a ver si me explico, cada producto que tengamos en al web dispondrá de su propio sitio en un array, lo unico k variaremos sera su cantidad.
por ejemplo:
si tenemos 2 articulos (silla y mesa)
array_id_prod[1]=1
array_id prod[2]=2
array_nombre_prod[1]=silla
array_nombre_prod[2]=mesa
array_precio_prod[1]=50
array_precio_prod[2]=70

bien pues la cantidad (array_cant_prod[]) inicial apra cada uno de ellos es 0.
lo unico que haremos sera variar la cantidad.
es decir, si añadimos una silla al carrito, seguiremos teniendo los arrays con 2 casillas, aunque solo imprimira las que sean mayor que 0, por tanto, solo la silla.
El problema de estoe s si introducimos muchos articulos en la pagina, por ejemplo 500. si solo añadimos un producto al carrito, el bucle seguria recorriendo 500 lugares del array, apra imprimir el que es >0. si se va a tener muchos objetos, se deberia de pensar otra forma más rapida.

bueno, el carrito lo podeis encontrar aqui:
http://perso.wanadoo.es/iesmonroy/carrito2.zip
Un saludo y a ver si solucionan lo del email...
  #10 (permalink)  
Antiguo 21/03/2005, 16:25
 
Fecha de Ingreso: marzo-2005
Ubicación: Sevilla
Mensajes: 277
Antigüedad: 12 años, 9 meses
Puntos: 2
Quizas sea un carrito poco eficiente... pero ni si quiera sé usar php, aprendí hace unos 2 meses a usar Javascript y me he basado en lo que sé cambiando la sintaxis a php. Y nunca he programado antes nada. Así que perdonen mis torpezas.Si pueden mejorarlo lo agradecería.
  #11 (permalink)  
Antiguo 22/03/2005, 18:10
 
Fecha de Ingreso: marzo-2005
Ubicación: Sevilla
Mensajes: 277
Antigüedad: 12 años, 9 meses
Puntos: 2
bueno, a alguien le a funcionado el carrito este. creo k la funcion de enviar si funciona, solo que esque mi servidor va a resultar que no permite mandar emails :(
Agradecería que publicaran mejoras o simplemente me dijeran si este carrito es malo o lo que sea
  #12 (permalink)  
Antiguo 22/03/2005, 21:22
Avatar de Gerald  
Fecha de Ingreso: julio-2003
Mensajes: 1.356
Antigüedad: 14 años, 5 meses
Puntos: 2
Deberias iniciar un post nuevo...
__________________
Solo por Hoy: Trataré de fortalecer mi mente. Estudiaré y aprenderé algo útil
Hoteldipity
Arte Caracol
  #13 (permalink)  
Antiguo 23/03/2005, 09:27
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Por mi parte no he probado el carrito . .sólo he visto por encima el código ...

En "mete_producto.php" y "elimina_producto".. siendo un script de proceso sólo (ya que va a crear unos elementos nuevos en una serie de arrays que al final quedan en una sesión .. El botón de "ver carrito" no debería existir ahí. Deberías redireccionar automáticamente hacia ver_carrito.php usando:

header("Location: ver_carrito.php");

Podrías tener un sólo script para procesos con el carrito (elimina/añade) pero bueno .. eso es un detalle.

Con eso te evitas que si se recarga esa página donde se hace el proceso de "mete_producto.php" .. se origien nuevos registros en el carrito iguales (repetidos). Además que lo lógico y la opción que ahí das es esa sóla .. así que mejor que ir directo.

En ver_carrito.php (y otros que no lo hagas)
Deberías usar la misma filosofía que usas en mete_producto.php

if (!isset($_SESSION["ocarrito"])){
$carrito= new carrito();
} else{
$carrito=$_SESSION["ocarrito"] ;
}

Si no lo haces .. obtendras mensajes de error tipo "objeto no definido" cuando tengas problemas con sesiones.. Cuando si lo usas .. si no existe la sesión .. se creará (instanciará ) el objeto (classe) .. pero sin valores .. el resto de tu lógica ya se encargará de decir cosas tipo "no hay productos en el carrito" .. etc.. y otras validaciones que podrías hacer.

En lib_carrito.php .. el método para enviar el e-mail .. creo que no corresponde usarlo ahí. Por ejemplo yo no uso "mail()" para enviar e-mails .. uso otras funciones/classes .. así que ese método me "rije" a usar mail(). En tal caso estaría bueno un método de "genera_cuerpo_e-mail" tal vez con ese detalle del pedido .. pero no mezclar el "envio" en sí .. un metodo que lo llame y me devuelva el "pedido" para gestionarlo como cada uno lo necesite ..
Por ejemplo .. el método "imprime_pedido()" me podría servir para componer mi e-mail por otro médio .. pero ese método fija el formato a HTML (tal vez alguien necesite hacerlo en texto plano) ..


En fin .. son detalles "funcionales" .. El caso es que cuando diseñas una "classe" (Objeto) debes intentar hacerlo lo más versatil posible .. NO es llegar y "parchearlo" con tus "funciones" que necesites. Esas funciones son própias de tu "aplicación" del momento . .pero no de su base.

Un saludo,
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 17:11.