Foros del Web » Programando para Internet » PHP »

Problema al agregar producto al carro de compras; siempre muestra el último producto.

Estas en el tema de Problema al agregar producto al carro de compras; siempre muestra el último producto. en el foro de PHP en Foros del Web. hola, estoy desarrollando un sistema de ventas para un sitio web, en el cual estoy en la etapa del carro de compras... Mi problema es ...
  #1 (permalink)  
Antiguo 07/08/2011, 16:08
Avatar de ras_chalo  
Fecha de Ingreso: junio-2010
Mensajes: 369
Antigüedad: 13 años, 10 meses
Puntos: 6
Pregunta Problema al agregar producto al carro de compras; siempre muestra el último producto.

hola, estoy desarrollando un sistema de ventas para un sitio web, en el cual estoy en la etapa del carro de compras...

Mi problema es que desarrolle un código el cual no esta del todo mal pero estoy trancado en una parte; al agregar al carro se me agrega el último producto de la lista..me explico:

Si tengo 4 productos; miel, té, trigo, café.. al agregar al carro de compras el "té", el carro muestra "café" ..lo mismo pasa si agrego "miel".
La idea de mi código es que vallan agregándose DIV en función de la cantidad de productos que tenga mi tabla, obviamente con sus respectivos atributos...

Le he estado dando una vuelta al código pero definitivamente no sé que pasa. A continuación lo pueden ver:

Código HTML:
Ver original
  1. <?php
  2. include("conexion.php");
  3.    <?php
  4.    $query= mysql_query('SELECT * FROM productos WHERE categ_prod = "apicolas"') or mysql_error();
  5.  
  6.    ?>
  7.              while($row= mysql_fetch_array($query))
  8.              {  
  9.              ?>
  10.            <div class="producto" id="<?php $row['nom_prod']; ?>">
  11.              <img src="IMAGENES DE SELECCION/editadas/IMG_3482.JPG" height="127"  align="left"/>
  12.            
  13.              <?php
  14.                echo "<h1>" .$row['nom_prod'], "</h1>";
  15.                 $nombre= $row['nom_prod'];
  16.              ?>
  17.                 <p> Descripcion del producto</p>
  18.                
  19.              <form action="agregar_producto.php" method="post">
  20.                 Cantidad: <input name="cantidad" type="text" id="cantidad" size="2" />
  21.                     <?php
  22.                            echo "# ID: " .$row['id_prod'], ", ";
  23.                            $id = $row['id_prod'];
  24.                            echo "Precio: " .$row['precio_prod'], " ";
  25.                            $precio= $row['precio_prod'];
  26.                            
  27.                            $_SESSION["nom_prod"]= $nombre;
  28.                            $_SESSION["id_prod"]= $id;
  29.                            $_SESSION["precio_prod"]= $precio;
  30.                                                
  31.                            
  32.                    ?>  
  33.                 <input type="submit"  value="A&ntilde;adir al Carro" />
  34.                 <img src='images/carro_anadir.gif'  />
  35.  
  36.              </form>  
  37.                
  38.                      
  39.            </div>
  40.            <?php
  41.             }
  42.           ?>

Como pueden ver es un código bastante sencillo, solo falla en que solo me muestra el último dato de mi consulta...

Desde ya estoy muy agradecido por su tiempo.
Estaré muy atento a sus comentarios, de ante mano MUCHAS GRACIAS!!
Saludos!
  #2 (permalink)  
Antiguo 07/08/2011, 16:21
 
Fecha de Ingreso: octubre-2008
Ubicación: Mar del Plata
Mensajes: 50
Antigüedad: 15 años, 6 meses
Puntos: 1
Respuesta: Problema al agregar producto al carro de compras; siempre muestra el últim

estas generando un input con el mismo nombre para cada producto, fijate por ahi
  #3 (permalink)  
Antiguo 07/08/2011, 16:25
 
Fecha de Ingreso: septiembre-2008
Mensajes: 148
Antigüedad: 15 años, 7 meses
Puntos: 10
Respuesta: Problema al agregar producto al carro de compras; siempre muestra el últim

Obvio... por cada pasada del while estas sobreescribiendo las mismas variables en distintos form... asi que la ultima sobreescritura (el ultimo form) es el que vale... Por que el php se procesa antes de que tu le des submit al form...
  #4 (permalink)  
Antiguo 07/08/2011, 16:29
Avatar de ramiro_md  
Fecha de Ingreso: septiembre-2008
Mensajes: 274
Antigüedad: 15 años, 7 meses
Puntos: 26
Respuesta: Problema al agregar producto al carro de compras; siempre muestra el últim

Fijate con las variables de sesión.
Siempre te queda guardado el último producto. En el while le estas asignando a esas variables valores distintos en cada ciclo. Cuando el while termina, te queda siempre el último valor. Ahí estas teniendo el problema.
  #5 (permalink)  
Antiguo 07/08/2011, 16:43
Avatar de ras_chalo  
Fecha de Ingreso: junio-2010
Mensajes: 369
Antigüedad: 13 años, 10 meses
Puntos: 6
Pregunta Respuesta: Problema al agregar producto al carro de compras; siempre muestra el últim

Cita:
Iniciado por ramiro_md Ver Mensaje
Fijate con las variables de sesión.
Siempre te queda guardado el último producto. En el while le estas asignando a esas variables valores distintos en cada ciclo. Cuando el while termina, te queda siempre el último valor. Ahí estas teniendo el problema.
mmmm puxa entonces como lo soluciono..no se me ocurre .... un ciclo for?...pero como implemento el mysql_fetch_array() ???...

Saludos!
  #6 (permalink)  
Antiguo 07/08/2011, 16:49
 
Fecha de Ingreso: septiembre-2008
Mensajes: 148
Antigüedad: 15 años, 7 meses
Puntos: 10
Respuesta: Problema al agregar producto al carro de compras; siempre muestra el últim

La solución mas rápida que se me ocurre es:

Un form para todo, con checkbox para los productos, cuando haces el submit enviás los productos seleccionados. El submit llama otro php que recibe que productos quiere en el carro y recién ahí agregas al carro...

La solución mas compleja es usar ajax y httprequest en el check de los checkbox de los productos para que lo haga todo del lado del servidor y cuando das submit en el servidor ya tienes todo almacenado y haces lo que tienes que hacer.

No es un buen ejercicio para principiantes ya que es muy complejo de darle una buena terminación... y hacerlo por las maneras rápidas y simples puede quedarte algo bastante feo.
  #7 (permalink)  
Antiguo 07/08/2011, 16:56
Avatar de ras_chalo  
Fecha de Ingreso: junio-2010
Mensajes: 369
Antigüedad: 13 años, 10 meses
Puntos: 6
Respuesta: Problema al agregar producto al carro de compras; siempre muestra el últim

Cita:
Iniciado por LhaN Ver Mensaje
La solución mas rápida que se me ocurre es:

Un form para todo, con checkbox para los productos, cuando haces el submit enviás los productos seleccionados. El submit llama otro php que recibe que productos quiere en el carro y recién ahí agregas al carro...

La solución mas compleja es usar ajax y httprequest en el check de los checkbox de los productos para que lo haga todo del lado del servidor y cuando das submit en el servidor ya tienes todo almacenado y haces lo que tienes que hacer.

No es un buen ejercicio para principiantes ya que es muy complejo de darle una buena terminación... y hacerlo por las maneras rápidas y simples puede quedarte algo bastante feo.
Sí claro, también había pensando en algo como eso, pero el problema es que por checkbox no me sirve... tu crees que para lo que necesito el código que tengo hasta el momento no esta bueno??

Saludos!
  #8 (permalink)  
Antiguo 07/08/2011, 17:06
 
Fecha de Ingreso: septiembre-2008
Mensajes: 148
Antigüedad: 15 años, 7 meses
Puntos: 10
Respuesta: Problema al agregar producto al carro de compras; siempre muestra el últim

No es que tu codigo sea malo, es que sucede lo siguiente: PHP se procesa de lado del servidor, en el momento en que se pide la pagina, php genera un html y se lo envia al cliente, que es el browser, para cuando tu vas a dar click en el submit ya todo ha sido asignado, que en este caso la asignacion es el ultimo elemento.

Tienes que modificar tu forma de pensar a la hora de programar en php. No es que el codigo php se ejecute a medida que tu vas haciendo click, sino que se ejecuta antes de que tu veas la pagina.
Html no se ejecuta, es básicamente texto plano formateado con eventos.
Javascript si se ejecuta, pero depende de como hagas el código se ejecuta luego de un evento o en todo momento (esto ultimo generalmente provoca un error por bucle infinito y la pagina no funciona).
  #9 (permalink)  
Antiguo 07/08/2011, 17:12
 
Fecha de Ingreso: septiembre-2008
Mensajes: 148
Antigüedad: 15 años, 7 meses
Puntos: 10
Respuesta: Problema al agregar producto al carro de compras; siempre muestra el últim

Ten en cuenta otra cosa, los name de los inputs del form si llamas a una pagina php con el form son enviados como variables (según el método post o get), y los values como valor. Es decir que si tienes un <input type="checkbox" name="check1" value="si"/> al hacer submit por post a una pagin2.php, al momento de procesar ese php tendrás $_POST["check1"] con el valor "si".

Incluso puedes tener
<input type="checkbox" name="check[]" value="check1"/>
<input type="checkbox" name="check[]" value="check2"/>
Y al hacer submit tendrias:
$_POST["check1"][0]="check1" y $_POST["check1"][1]="check2" siempre y cuando tildes los dos...

Si tildas solo uno de ellos $_POST["check1"][0] contendrá check1 o check2 según cual hayas marcado.
  #10 (permalink)  
Antiguo 07/08/2011, 17:18
Avatar de ras_chalo  
Fecha de Ingreso: junio-2010
Mensajes: 369
Antigüedad: 13 años, 10 meses
Puntos: 6
Respuesta: Problema al agregar producto al carro de compras; siempre muestra el últim

Cita:
Iniciado por LhaN Ver Mensaje
No es que tu codigo sea malo, es que sucede lo siguiente: PHP se procesa de lado del servidor, en el momento en que se pide la pagina, php genera un html y se lo envia al cliente, que es el browser, para cuando tu vas a dar click en el submit ya todo ha sido asignado, que en este caso la asignacion es el ultimo elemento.

Tienes que modificar tu forma de pensar a la hora de programar en php. No es que el codigo php se ejecute a medida que tu vas haciendo click, sino que se ejecuta antes de que tu veas la pagina.
Html no se ejecuta, es básicamente texto plano formateado con eventos.
Javascript si se ejecuta, pero depende de como hagas el código se ejecuta luego de un evento o en todo momento (esto ultimo generalmente provoca un error por bucle infinito y la pagina no funciona).
Muchas gracias por tu tiempo y explicación!
La verdad que estoy algo mareado con esta tranka, pero gracias a ti ya estoy mas orientado...

haber si para mañana posteo la solución ;)
Nuevamente gracias por la ayuda.
Estaré dando noticias!
Saludos!!
  #11 (permalink)  
Antiguo 07/08/2011, 17:27
 
Fecha de Ingreso: octubre-2008
Ubicación: Mar del Plata
Mensajes: 50
Antigüedad: 15 años, 6 meses
Puntos: 1
Respuesta: Problema al agregar producto al carro de compras; siempre muestra el últim

puedes cambiar el form por un link
<a href="agregar_producto.php?id=$id">agregar</a> , en el que le pases el id del producto, y el pagina que lo recibe guardarlo en la sesion.

Etiquetas: compras, imagenes, muestra, mysql, producto, siempre, tabla, 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 00:08.