Foros del Web » Programando para Internet » PHP »

Ayuda con carro compra online con PHP

Estas en el tema de Ayuda con carro compra online con PHP en el foro de PHP en Foros del Web. Hola, estoy implementando una tienda online con php. He seguido varios manuales y libros para poder realizarlo de forma autonoma. Me encuentro con un problema ...
  #1 (permalink)  
Antiguo 13/10/2010, 05:44
 
Fecha de Ingreso: octubre-2010
Mensajes: 9
Antigüedad: 13 años, 6 meses
Puntos: 0
Ayuda con carro compra online con PHP

Hola, estoy implementando una tienda online con php. He seguido varios manuales y libros para poder realizarlo de forma autonoma. Me encuentro con un problema con el carro de la compra y su implementacion. No estoy acostumbrado en el uso del lenguaje php en relacion a objetos y una vez añadido el producto no se sacar la informacion de este.

Muchas gracias de antemano!!

Shoppingcart.php
Código PHP:
<?php
class shoppingcart {
    private 
$cart;
    function 
__construct(){
        
$this->cart = array();
    }
    public function 
additem($id$name$cost) {
        foreach(
$this->cart as $key=>$items) {
            if(
$items['id'] == $id) {
                
$this->cart[$key]['quantity']++;
                return;
            }
        }
        
$this->cart[] = array('id' => $id
        
'name' => $name
        
'cost' => $cost
        
'quantity' => 1);
    }
    public function 
dellitem($id) {
        foreach(
$this->cart as $key=>$items) {
            if(
$items['id'] == $id) {
                if(
$items['quantity'] > 1) {
                    
$this->cart[$key]['quantity']--;
                } else {
                    unset(
$this->cart[$key]);
                }
                return 
true;
            }
        }
        return 
false;
    }
    public function 
getcart() {
        return 
$this->cart;
    }
    public function 
getitem() {
        return 
$this->item['id'];
    }
    public function 
clearcart() {
        
$this->cart = array();
    }
}
?>
carrocompra.php
Código PHP:
<?php
require_once("shoppingcart.php");
session_start();

    
//$nom = consultarnom();
    
$id $_POST["id"];
    
$nom $_POST["nom"];
    
$preu $_POST["preu"];
    
$stock $_POST["stock"];
    
$quantitat $_POST["quantitat"];
    
$contador=0;
    
//if(!isset($_SESSION['cart']) || !is_object($_SESSION['cart'])) {
        
$_SESSION['cart'] = new shoppingcart();
        
//Agegir un producte al carro(item 43, preu=49.99
        
while($contador<$quantitat && $stock!=0){
        
$_SESSION['cart']->additem($id$nom$preu);
        
$contador=$contador+1;
        
$stock=$stock-1;
         
        }        
        echo 
'No hi ha stock';
        
$items $_SESSION['cart']->getCart();
        echo 
$_SESSION['cart']->getCart();


    
//}
?>


<table width="300" border="1">
  <tr>
    <td width="219">Producte</td>
    <td width="65">Cost</td>
  </tr>
  <tr>
    <td><?php echo $nom ?></td>
    <td><?php echo $preu ?></td>
  </tr>
</table>

Última edición por surux; 13/10/2010 a las 06:12
  #2 (permalink)  
Antiguo 13/10/2010, 08:59
 
Fecha de Ingreso: octubre-2010
Mensajes: 9
Antigüedad: 13 años, 6 meses
Puntos: 0
Respuesta: Ayuda con carro compra online con PHP

Carrocompra.php obtiene los valores de id, nombre, precio y stock mediante post porque tengo los artículos guardados en una BD y son obtenidos mediante esta funcion:

Código PHP:
function llistarcategoria1(){ //categoria1=pernils
    
bdproductes();

$sql "SELECT * FROM productes WHERE categoria = 'Pernils'"
$resultado mysql_query($sql);
while(
$row mysql_fetch_row($resultado)){
        
$row[0];
        
$row[1]; 
        
$row[2]; 
        
$row[3]; 
        
$row[4]; 
        
echo
'<table width="600" border="1">
          <tr>
            <td width="250" rowspan="5">&nbsp;</td>
            <td width="350">'
.$row[1].'</td>
          </tr>
          <tr>
            <td>Stock:'
.$row[4].'</td>
          </tr>
          <tr>
            <td>Preu: '
.$row[3].'Euros</td>
          </tr>
          <tr>
            <td> <form action="carrocompra.php" method="post">
        <input name="quantitat" type="text" value="1" size="6" maxlength="3" />
        <input name="id" type="hidden" value="'
.$row[0].'"" />
        <input name="nom" type="hidden" value="'
.$row[1].'"" />
        <input name="preu" type="hidden" value="'
.$row[3].'"" />
        <input name="stock" type="hidden" value="'
.$row[4].'"" /><input value="Afegir al carret" type="submit" /></form></td>
          </tr>
        </table>'
;
}

  #3 (permalink)  
Antiguo 13/10/2010, 22:35
Avatar de silvanha  
Fecha de Ingreso: marzo-2006
Ubicación: En mi mundo de sueños
Mensajes: 653
Antigüedad: 18 años
Puntos: 65
Respuesta: Ayuda con carro compra online con PHP

Bueno es que la función que te imprime el carro ya la tienes si ando bien, y no ando medio dormida xD

Se trata de que llames a getcart(); este te devuelve el arreglo como tal que contiene los elementos del carrito, recorrelo con un for o un foreach.. y con eso debes ver el contenido..

la llamas, y después la variable $elementos, la recorres..
Código PHP:
Ver original
  1. $elementos = $_SESSION['cart'] -> getcart();

Saludos!
__________________
●•· No hay nada imposible..
●•· Vico-X.. ;)
  #4 (permalink)  
Antiguo 14/10/2010, 05:25
 
Fecha de Ingreso: octubre-2010
Mensajes: 9
Antigüedad: 13 años, 6 meses
Puntos: 0
Respuesta: Ayuda con carro compra online con PHP

Grácias! solo con
Código PHP:
foreach ($_SESSION['cart']->getCart() as $items) {
        } 
ya me sale, que perfección...XD

Sigo implementando!
  #5 (permalink)  
Antiguo 14/10/2010, 10:51
Avatar de silvanha  
Fecha de Ingreso: marzo-2006
Ubicación: En mi mundo de sueños
Mensajes: 653
Antigüedad: 18 años
Puntos: 65
Respuesta: Ayuda con carro compra online con PHP

perfecto! ahí te sigo leyendo por cualquier cosa con que te atores.. suerte!!
__________________
●•· No hay nada imposible..
●•· Vico-X.. ;)
  #6 (permalink)  
Antiguo 18/10/2010, 06:08
 
Fecha de Ingreso: octubre-2010
Mensajes: 9
Antigüedad: 13 años, 6 meses
Puntos: 0
Respuesta: Ayuda con carro compra online con PHP

Hola de nuevo Silvanha, estoy atascado con el carrito...otra vez. Te cuento:

Consigo obtener los valores del array y verlos por pantalla. Lo que no consigo es cuando añado un producto se sume al carrito y no lo substituya como hace ahora...creo que el problema esta en que no uso bien la funcion additem o que tengo algun problema de sesiones que no me guarda la informacion del array.

Aqui te pego el carrocompra actual:

Código PHP:
<?php
session_start
();
require_once(
"shoppingcart.php");

    
$id $_POST["id"];
    
$nom $_POST["nom"];
    
$preu $_POST["preu"];
    
$stock $_POST["stock"];
    
$quantitat $_POST["quantitat"];
    
$sumatori $quantitat $preu;
    
$contador=0;
    if(!isset(
$_SESSION['cart']) || !is_object($_SESSION['cart'])) {
        
$_SESSION['cart'] = new shoppingcart();
        
//Agegir un producte al carro(item 43, preu=49.99
        
while($contador<$quantitat && $stock!=0){
        
$_SESSION['cart']->additem($id$nom$preu);
        
$contador=$contador+1;
        
$stock=$stock-1;         
        }        
    }
    while(
$contador<$quantitat && $stock!=0){
        
$_SESSION['cart']->additem($id$nom$preu);
        
$contador=$contador+1;
        
$stock=$stock-1;
         
        }    
    
$elementos $_SESSION['cart'] -> getcart();
    foreach (
$elementos as $elementos) {}
    foreach (
$elementos as $clave => $valor){
        echo 
$valor;
    }

                   
?>
Shoppingcart.php es el mismo. Gracias de antemano.

Saludos.
  #7 (permalink)  
Antiguo 18/10/2010, 11:42
Avatar de silvanha  
Fecha de Ingreso: marzo-2006
Ubicación: En mi mundo de sueños
Mensajes: 653
Antigüedad: 18 años
Puntos: 65
Respuesta: Ayuda con carro compra online con PHP

A ver, según entiendo .. estas tomando el total de productos que quiere agregar al carrito, con un campo de texto..

y después llamas el número de veces que sea necesario a additem(), toma en cuenta que ahí recibes, el id, el nombre y el costo del producto.. hasta ahí lo veo bien pero el additem tiene:

Código PHP:
Ver original
  1. public function additem($id, $name, $cost) {
  2.         foreach($this->cart as $key=>$items) {
  3.             if($items['id'] == $id) {
  4.                 $this->cart[$key]['quantity']++;
  5.                 return;
  6.             }
  7.         }
  8.         $this->cart[] = array('id' => $id,
  9.         'name' => $name,
  10.         'cost' => $cost,
  11.         'quantity' => 1);
  12.     }

Que verifica en la primera condición, si ya hay algún elemento con el ID del producto que se intenta agregar, entonces solo se suma uno, en caso contrario no hace nada. Saliendo del ciclo, al arreglo cart, asigna, el id, el nombre, costo y cantidad 1.. en teoría funciona, porque no intentas manejar una variable dentro de tu clase que lleve el apuntador del último elemento insertado en el arreglo.. o bien cuenta el total de elementos del carro y al final anexalo, podrías verificar antes si es que el carro tiene al menos un producto antes de anexar el siguiente..

en esta misma función additem();, manda con un echo el count($this->cart[]); para ver si realmente hay elementos antes.. se me ocurre que pierde el apuntador y por eso los encima

ahí te sigo leyendo.. :)
__________________
●•· No hay nada imposible..
●•· Vico-X.. ;)
  #8 (permalink)  
Antiguo 19/10/2010, 08:39
 
Fecha de Ingreso: octubre-2010
Mensajes: 9
Antigüedad: 13 años, 6 meses
Puntos: 0
Respuesta: Ayuda con carro compra online con PHP

No consigo realizar ninguna de las soluciones que me prorpones. Perdona por mi pregunta pero... podrias explicarte mejor?? XD He realizado comprovaciones y el array me guarda los 4 campos pero sigo sin saber añadir otro producto. Creo que el problema esta en la sesion porque veo que pase lo que pase el if que tiene que "darse cuenta" de que hay un carrito activo no funciona bien.

Aqui te paso el if en cuestion:
Código PHP:
if(!isset($_SESSION['cart']) || !is_object($_SESSION['cart'])) {
        
$_SESSION['cart'] = new shoppingcart();
        while(
$contador<$quantitat && $stock!=0){
            
$_SESSION['cart']->additem($id$nom$preu);
            
$contador=$contador+1;
            
$stock=$stock-1;         
        }        
    } 
Pienso en que quiero hacer que cada compra reduzca el stock... quiero hacer muchas cosas y estoy aqui clavado... sigo currando...

Por cierto muchas gracias^^
  #9 (permalink)  
Antiguo 19/10/2010, 13:27
Avatar de silvanha  
Fecha de Ingreso: marzo-2006
Ubicación: En mi mundo de sueños
Mensajes: 653
Antigüedad: 18 años
Puntos: 65
Respuesta: Ayuda con carro compra online con PHP

Y que se supone que fue lo que no me explique bien??

Que has intentado especificamente?
__________________
●•· No hay nada imposible..
●•· Vico-X.. ;)
  #10 (permalink)  
Antiguo 19/10/2010, 15:05
 
Fecha de Ingreso: octubre-2010
Mensajes: 9
Antigüedad: 13 años, 6 meses
Puntos: 0
Respuesta: Ayuda con carro compra online con PHP

No me malinterpretes!! Te explicaste muy bien y entendi el que quieres hacer pero mi nivel de php no me permite ver el codigo que lo hace. Mis disculpas!!

He probado de poner el count($this->cart[]); en la funcion additem:

Código PHP:
public function additem($id$name$cost) {
        foreach(
$this->cart as $key=>$items) {
            if(
$items['id'] == $id) {
                
$this->cart[$key]['quantity']++;
                return;
            }
        }
        
$this->cart[] = array('id' => $id
        
'name' => $name
        
'cost' => $cost
        
'quantity' => 1);
        echo  
count($this->cart[]); 
el resultado es un error:
Fatal error: Cannot use [] for reading in

Con el echo $valor; puedo ver que me guarda el producto con el id, nombre, precio y cantidad que yo quiero. Hasta alli he llegado...
  #11 (permalink)  
Antiguo 22/10/2010, 16:20
Avatar de silvanha  
Fecha de Ingreso: marzo-2006
Ubicación: En mi mundo de sueños
Mensajes: 653
Antigüedad: 18 años
Puntos: 65
Respuesta: Ayuda con carro compra online con PHP

hola!!!

te debo una disculpa enorme, he andado al tope de trabajo, por la noche andaré en casa, lo checo y te aviso que paso, sorry!!

o bien, dime como vas???
__________________
●•· No hay nada imposible..
●•· Vico-X.. ;)
  #12 (permalink)  
Antiguo 26/10/2010, 08:41
 
Fecha de Ingreso: octubre-2010
Mensajes: 9
Antigüedad: 13 años, 6 meses
Puntos: 0
Respuesta: Ayuda con carro compra online con PHP

Tengo el carrito aparcado de momento(chiste malo XD), estoy haceindo otras cosas de la web. Mas adelante te aviso.

Muchas gracias por todo!!

Etiquetas: compra, carrito
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 02:13.