Foros del Web » Programando para Internet » PHP »

agregar cantidad en un carrito virtual

Estas en el tema de agregar cantidad en un carrito virtual en el foro de PHP en Foros del Web. Hola como estan todos! bueno tengo algunos problemas con el clasico carrito de compras q para algunos de nosotros q recien empesamos se nos hace ...
  #1 (permalink)  
Antiguo 10/12/2012, 13:54
 
Fecha de Ingreso: noviembre-2011
Mensajes: 8
Antigüedad: 12 años, 4 meses
Puntos: 1
agregar cantidad en un carrito virtual

Hola como estan todos! bueno tengo algunos problemas con el clasico carrito de compras q para algunos de nosotros q recien empesamos se nos hace tan dificil u.u

Tengo un profesor q esta algo mal de la cabeza jaja y cada ves pide mas cosas en nuestro trabajo , incluso cosas q nunca nos enseño >.<

las tablas de mi base de datos son:
-carritos
-lineasdeventas
-mensajes
-productos
-rubros
-usuarios

Bueno mi carrito de compras ya estaba realizado y funcionando pero ahora me pide las siguientes modificaciones:

-Que te permita elegir la cantidad de productos a comprar (en mi carrito tengo la cantidad fija en 1, y se autoincrementa cuando elegimos el mismo producto)

-Que cuando realice la compra , me pregunte si es al contado o con tarjeta y me muestre las cuotas y descuentos o recargos segun corresponda para cada tarjeta (en mi carrito no tengo nada de esto, solo se eligen los productos, se compra , y qeda guardado de esa forma).

-Mandar un e-mail de notificacion al usuario q realiza la compra, informandole algunos detalles de la compra realizada(no tengo esto en mi carrito ni siquiera nos lo enseño)

Bueno para el problema de la cantidad me puse a buscar y encontre un video q muestra como agregar la cantidad pero ese carrito y el mio tienen una estructura diferente y por lo tanto se me hace dificil plantearlo en mi carrito.

mi carrito funciona en base a esta libreria de clases:

Código PHP:
<?php
class LineadeVenta{
    private 
$cod;
    private 
$des;
    private 
$precio;
    public 
$cantidad;
    
//constructor de LineadeVenta
    //$cant=1 es valor que se establece por defecto a $cant en el caso de 
    //se omita este valor cuando se cree un objeto
    
function __construct($codigo,$descripcion,$pv,$cant=1)
    {
    
$this->cod=$codigo;
    
$this->cantidad=$cant;
    
$this->des=$descripcion;
    
$this->precio=$pv;
    }
   function 
GetCod(){return $this->cod;}
   function 
GetDes(){return $this->des;}
   function 
GetPrecio(){return $this->precio;}
   function 
GetCantidad(){return $this->cantidad;}
   function 
SetCod($newcod){$this->cod=$newcod;}
   
//crear una metodo que calcule el subtotal
}
/*****fin de la definicion de la clase LineadeVenta**************************************/
/******inicio de la clase Carrito******/
class Carrito{
public 
$olineasventa;
private 
$numlinea;
//constructor. Realiza las tareas de inicializar los objetos cuando se instancian
//inicializa el numero de lineas de venta a 0
function __construct()
{
//inicializar la variable como array
$this->olineasventa=array();
//inicializar el indice del array a cero
$this->numlinea=0;
}

//Introduce una linea de venta en el carrito. Recibe los datos del producto
//Se encarga de introducir los datos en los array olineasventa del objeto carrito
//luego aumenta en 1 indice(numlinea)
function AgregarLineasVentas($codigo,$descripcion,$pv)
{
//crear un objeto LineadeVenta y almacenarlo en una posicion del array
//deternimada por numlinea
//Corregir para mostrar cantidad= 2 cuando seleccione el mismo producto
$crear 1;
foreach(
$this->olineasventa as $lv)
{
    if(
$lv->GetCod() == $codigo)
        {
        
$crear 0;
        
$lv->cantidad $lv->cantidad +1;
        
//echo "se ha seleccionado solo 1 producto";
        //$this->cantidad = $this->cantidad +1;
        //$this->olineasventa[$this->numlinea]=new LineadeVenta($codigo,$descripcion,$pv);
        //$this->numlinea++;
        
}
}
if(
$crear){
        
        
$this->olineasventa[$this->numlinea] = new LineadeVenta($codigo,$descripcion,$pv);
        
//contador de lineas de ventas e indice(una posicion en el array)
        
$this->numlinea++;
        
//$cantidad += $this->cantidad;
        //$this->cantidad++;
        
}
}

//$this->olineasventa[$this->numlinea]=new LineadeVenta($codigo,$descripcion,$pv);
//contador de lineas de ventas e indice(una posicion en el array)
//$this->numlinea++;

        
//Muestra el contenido del carrito de  compra
//ademas pone los enlaces para eliminar una linea de venta del carrito
function imprime_carrito(){
$totalcarrito 0;
?>
<table border=1 cellpadding="3">
      <tr>
        <th>Codigo</th>
        <th>Nombre producto</th>
        <th>Precio</th>
        <th>Cantidad</th>
        <th>Subtotal</th>
        <th>&nbsp;</th>
      </tr>
<?php
foreach($this->olineasventa as $i=>$p)
{
    
//filtrar las lineas de ventas eliminadas
    //osea que sean distintas de 0(cero)
    
if($p->GetCod()!=0){
        
//ustedes debera crear un metodo en la clase LineadeVenta que realice
        //la siguiente operación
        
$subtotal=$p->GetPrecio()*$p->GetCantidad();
        
?>
        <tr>
        <td><?php echo $p->GetCod()?></td>
        <td><?php echo $p->GetDes()?></td>
        <td><?php echo $p->GetPrecio()?></td>
        <td><?php echo $p->GetCantidad()?></td>
        <td><?php echo $subtotal?></td>
        <td><a href='eliminar_producto.php?linea=<?php echo $i?>'>Eliminar producto</a></td>
        </tr>
        <?php
        $totalcarrito 
+= $subtotal;
    }
}
//muestro el total
?>
<tr>
  <td colspan="4" align="right"><strong>TOTAL:</strong></td>
  <td colspan="2"><strong><?php echo $totalcarrito?></strong></td>
  </tr>
<tr>
  <td colspan="4" align="right"><strong>IVA (21%):</strong></td>
  <td colspan="2"><strong><?php echo $totalcarrito1.21?></strong></td>
  </tr>
</table>
<?php }//fin de la funcion imprime_carrito
//elimina una linea de venta 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){
//llamar al metodo Setcod para establecer su valor a 0(cero)
$this->olineasventa[$linea]->SetCod(0);
}
}
function 
__destruct()
{
    
}
//inicio la sesión
session_start();
//si no esta creado el objeto carrito en la sesion, lo creamos

}
if (!isset(
$_SESSION["ocarrito"]))$_SESSION["ocarrito"] = new Carrito();
?>
Entoncess para cambiar la cantidad, el video [URL="http://www.youtube.com/watch?feature=player_embedded&v=xIsFWcpWYO0#!"]YouTube[/URL] me muestra q debo insertar, donde dice la cantidad, un campo de texto para asi agregar la cantidad necesitada
y mi libreria cambiaria a algo asi.. (la parte de abajo)
Código PHP:
foreach($this->olineasventa as $i=>$p)
{
    //filtrar las lineas de ventas eliminadas
    //osea que sean distintas de 0(cero)
    if($p->GetCod()!=0){
        //ustedes debera crear un metodo en la clase LineadeVenta que realice
        //la siguiente operación
        $subtotal=$p->GetPrecio()*$p->GetCantidad();
        ?>
        <tr>
        <td><?php echo $p->GetCod()?></td>
        <td><?php echo $p->GetDes()?></td>
        <td><?php echo $p->GetPrecio()?></td>
        <td><form action="" method="post" name="actualizo"><input name="id2" type="hidden" value="<?php echo $i ?>" />
        <input name="cantidad2" type="text" value="<?php echo $p->GetCantidad()?>" size="2" maxlength="2" />
        <input name="" type="image" src="images/update.png" />
        </form></td>
        <td><?php echo $subtotal?></td>
        <td><a href='eliminar_producto.php?linea=<?php echo $i?>'>Eliminar producto</a></td>
        </tr>
        <?php
        $totalcarrito 
+= $subtotal;
    }
}
//muestro el total
?>
<tr>
  <td colspan="4" align="right"><strong>TOTAL:</strong></td>
  <td colspan="2"><strong><?php echo $totalcarrito?></strong></td>
  </tr>
<tr>
  <td colspan="4" align="right"><strong>IVA (21%):</strong></td>
  <td colspan="2"><strong><?php echo $totalcarrito1.21?></strong></td>
  </tr>
</table>
<?php }//fin de la funcion imprime_carrito
//elimina una linea de venta 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){
//llamar al metodo Setcod para establecer su valor a 0(cero)
$this->olineasventa[$linea]->SetCod(0);
}
}
function 
__destruct()
{
    
}
//inicio la sesión
session_start();
//si no esta creado el objeto carrito en la sesion, lo creamos
if (isset($_POST['id2'])){
$indice=$_POST['id2'];
$cuanto=$_POST['cantidad2'];

}
if (!isset(
$_SESSION["ocarrito"]))$_SESSION["ocarrito"] = new Carrito();
?>
Como veran alli en la parte de abajo le modifique para q muestre el campo de texto y los ocultos pero igualmente NOSE de q manera terminar esto , y hacerlo bien para q funcione como esta en el video , q uno le agrega la cantidad q uno kiere y se actualiza al presionar en la imagen .

Por eso necesito ayuda para adaptar esa *solucion* a mi carrito , q nose como terminarlo, debo agregar el campo de texto para ingresar la cantidad y luego hacer q funcione .

Por favor cualqier colaboracion sera bien recibida jaja :)

gracias
  #2 (permalink)  
Antiguo 10/12/2012, 21:44
 
Fecha de Ingreso: noviembre-2011
Mensajes: 8
Antigüedad: 12 años, 4 meses
Puntos: 1
Respuesta: agregar cantidad en un carrito virtual

como puedo hacer para q la cantidad ingresada sea guardada en la base de datos, porq siempre q ingreso cualkier cantidad siempre queda en 1.

cualquier ayuda o sugerencia sera bien recibida gente por favor
  #3 (permalink)  
Antiguo 10/12/2012, 23:08
Avatar de web2013  
Fecha de Ingreso: diciembre-2012
Ubicación: Peru
Mensajes: 19
Antigüedad: 11 años, 4 meses
Puntos: 2
Respuesta: agregar cantidad en un carrito virtual

Hola mr_pollo

Puedes almacenar la cantidad que compras en un array de sesiones. Por ejemplo:
$_SESSION['cantidades'] = array de cantidades
$_SESSION['productos'] = array de ids de productos
Luego haces un array combine y enlazas la cantidad con cada producto.
ya con el array combinado puedes almacenarlo a la base de datos usando un foreach()
  #4 (permalink)  
Antiguo 11/12/2012, 10:25
 
Fecha de Ingreso: noviembre-2011
Mensajes: 8
Antigüedad: 12 años, 4 meses
Puntos: 1
Respuesta: agregar cantidad en un carrito virtual

gracias web2013 , voy a tner en cuenta tu sugerencia

pero tengo otra pregunta : necesito q cuando un cliente realice una compra se le envie un email automaticamente con los detalles de su compra ,, pero la funcion mail() no me funciona >.> siempre me da el error del smtp y q revea el php.ini , como hacer para q funcione la funcion mail ? (utilizo un servidor wampserver php 5.3.0 instalado)

Última edición por mr_pollo; 11/12/2012 a las 10:34
  #5 (permalink)  
Antiguo 11/12/2012, 14:34
Avatar de iviamontes  
Fecha de Ingreso: enero-2011
Ubicación: $cubano->Arg->Mendoza
Mensajes: 1.184
Antigüedad: 13 años, 2 meses
Puntos: 209
Respuesta: agregar cantidad en un carrito virtual

la función mail unicamente te funcionará si tienes un servidor smtp local, al parecer no es tu caso...
para poder probar que en verdad te anda, o te instalas uno, o lo subes a un hosting (gratis o pago) y pruebas allí.
__________________
aconcaguaestudio.com

Etiquetas: cantidad, carrito, tabla, virtual, variables, usuarios
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 00:40.