Foros del Web » Programando para Internet » PHP »

No logro solucionar mi problema; modificar el WHILE por otra cosa...

Estas en el tema de No logro solucionar mi problema; modificar el WHILE por otra cosa... en el foro de PHP en Foros del Web. Hola, bueno la verdad que me he cabeceado un montón pero no logro solucionar mi problema ... Resulta que tengo un carrito de compras, al ...
  #1 (permalink)  
Antiguo 08/08/2011, 04:43
Avatar de ras_chalo  
Fecha de Ingreso: junio-2010
Mensajes: 369
Antigüedad: 14 años, 5 meses
Puntos: 6
Pregunta No logro solucionar mi problema; modificar el WHILE por otra cosa...

Hola, bueno la verdad que me he cabeceado un montón pero no logro solucionar mi problema ...

Resulta que tengo un carrito de compras, al cual al momento de agregar los productos al carro, solo me agrega el último producto y sus atributos...
Se que es producto del While que le puse, pero no se me ocurre la solución al problema...
Intente ponerle un ciclo for, pero nada...
Alguien me dijo que pasando todos los datos a un form, con un checkbox se soluciona, pero no me sirve que sea en un checkbox... necesito simplemente solucionar sin cambiar mucho la estructura de la ficha del producto...

dejo el código de mi drama:

Código PHP:
Ver original
  1. <?php
  2. $query= mysql_query('SELECT * FROM productos WHERE categ_prod = "apicolas"') or mysql_error();
  3.  
  4.                while($row= mysql_fetch_array($query))
  5.              {  
  6.          
  7.              ?>
  8.            <div class="producto" id="<?php $row['nom_prod']; ?>">
  9.              <img src="IMAGENES DE SELECCION/editadas/IMG_3482.JPG" height="127"  align="left"/>
  10.             <?php
  11.                 echo "<h1>" .$row['nom_prod'], "</h1>";
  12.                 $nombre= $row['nom_prod'];
  13.              ?>
  14.                 <p> Es una secreci&oacute;n de las gl&aacute;ndulas hipofar&iacute;ngeas de las abejas nodrizas. Todas las larvas son alimentadas con jalea real los tres primeros d&iacute;as de su vida, a partir de esa fecha &uacute;nicamente la larva elegida reina se alimentar&aacute; con ella, mientras que las abejas obreras dispondr&aacute;n de una mezcla de polen, agua y miel. </p>
  15.                
  16.              <form action="agregar_producto.php" method="post">
  17.                 Cantidad: <input name="cantidad" type="text" id="cantidad" size="2" />
  18.                     <?php
  19.                             echo "# ID: " .$row['id_prod'], ", ";
  20.                             $id = $row['id_prod'];
  21.                             echo "Precio: " .$row['precio_prod'], " ";
  22.                             $precio= $row['precio_prod'];
  23.                            
  24.                             $_SESSION["nom_prod"]= $nombre;
  25.                             $_SESSION["id_prod"]= $id;
  26.                             $_SESSION["precio_prod"]= $precio;
  27.                                                
  28.                            
  29.                     ?>  
  30.                 <input type="submit"  value="A&ntilde;adir al Carro" />
  31.                 <img src='images/carro_anadir.gif'  />
  32.  
  33.              </form>  
  34.                
  35.                      
  36.            </div>
  37.            <?php
  38.                  
  39.              }
  40.            ?>
Desde ya estoy muy agradecido por su intención y tiempo..
Estaré MUY atento a sus comentarios....
Saludos!
  #2 (permalink)  
Antiguo 08/08/2011, 05:01
Avatar de vgonga1986  
Fecha de Ingreso: marzo-2008
Ubicación: País de Pandereta
Mensajes: 1.021
Antigüedad: 16 años, 8 meses
Puntos: 253
Respuesta: No logro solucionar mi problema; modificar el WHILE por otra cosa...

Es muy sencillo el problema que tienes. Al añadir el while con ese código dentro, lo que has hecho es crear tantos formularios en tu web como iteraciones hace el while. Entonces, cuando le das a enviar, sólo se envía el formulario cuyo botón has pulsado. La solución también es sencilla, tienes que crear un único formulario, es decir, mover el while de lugar. Algo así:
Código PHP:
Ver original
  1. <?php
  2. $query= mysql_query('SELECT * FROM productos WHERE categ_prod = "apicolas"') or mysql_error();
  3. ?>
  4. <div class="producto">
  5.     <form action="agregar_producto.php" method="post">
  6.     <img src="IMAGENES DE SELECCION/editadas/IMG_3482.JPG" height="127"  align="left"/>
  7. <?php
  8. while ($row= mysql_fetch_array($query)) {
  9.     echo "<h1>" .$row['nom_prod'], "</h1>";
  10.     $nombre= $row['nom_prod'];
  11. ?>
  12.       <p> Es una secreci&oacute;n de las gl&aacute;ndulas hipofar&iacute;ngeas de las abejas nodrizas. Todas las larvas son alimentadas con jalea real los tres primeros d&iacute;as de su vida, a partir de esa fecha &uacute;nicamente la larva elegida reina se alimentar&aacute; con ella, mientras que las abejas obreras dispondr&aacute;n de una mezcla de polen, agua y miel. </p>
  13.       Cantidad: <input name="cantidad[]" type="text" id="cantidad" size="2"/>
  14. <?php
  15.     echo "# ID: " .$row['id_prod'], ", ";
  16.     $id = $row['id_prod'];
  17.     echo "Precio: " .$row['precio_prod'], " ";
  18.     $precio= $row['precio_prod'];
  19.  
  20.     $_SESSION["nom_prod"]= $nombre;
  21.     $_SESSION["id_prod"]= $id;
  22.     $_SESSION["precio_prod"]= $precio;
  23. }
  24. ?>
  25.         <input type="submit"  value="A&ntilde;adir al Carro" />
  26.         <img src='images/carro_anadir.gif' />
  27.     </form>
  28. </div>

Como ves, he hecho dos modificaciones más, el id del div no puede utilizar ahora un campo de la función, ya que el div no se repite, queda fuera del while y, por tanto, no puede usar datos extraidos del fetch.

Por otro lado, he tenido que cambiar el name del input text a cantidad[], ya que el input se repetirá tantas veces como productos haya en la consulta. Añadiendo los corchetes indicas a PHP que ese campo se enviará como un array de valores y no como un valor único. Es decir, en el PHP en que recibes la respuesta tendrás un array de cantidades.

Un saludo.
__________________
¿Alguna pregunta, duda, acotación, nota, cuestión, reparo, comentario, demanda, crítica, interpretación, objeción, interrogante, discrepancia, observación, réplica, disquisición, apostilla o exégesis?
  #3 (permalink)  
Antiguo 08/08/2011, 05:05
Avatar de ramiro_md  
Fecha de Ingreso: septiembre-2008
Mensajes: 274
Antigüedad: 16 años, 2 meses
Puntos: 26
Respuesta: No logro solucionar mi problema; modificar el WHILE por otra cosa...

Ya se te comento el problema en tu thread anterior amigo.
Por qué utilizas un while ? porque necesitas recorerr algo X cantidad de veces, siendo X un número desconocido.
Entonces el while se ejecuta X veces.
Por cada vez que se cumple un ciclo, con estas instrucciones:
Código PHP:
Ver original
  1. $_SESSION["nom_prod"]= $nombre;
  2. $_SESSION["id_prod"]= $id;
  3. $_SESSION["precio_prod"]= $precio;
Le pones valores nuevos a esas variables, entonces es fácil darse cuenta de que por cada ciclo que pasa, pisas el valor anterior de estas variables por el nuevo.
Supongamos que el while hace 3 pasadas, en la primera "nom_prod" es "te", en la segunda viene "miel" y pisa a "te" y así sucesivamente, quedándote siempre el último valor en tu variable de sesión.
Lo que tenes que hacer es poner los productos en un array y después pasarlos a $_SESSION.
Ahora se entiende?
Saludos.
  #4 (permalink)  
Antiguo 08/08/2011, 05:12
Avatar de vgonga1986  
Fecha de Ingreso: marzo-2008
Ubicación: País de Pandereta
Mensajes: 1.021
Antigüedad: 16 años, 8 meses
Puntos: 253
Respuesta: No logro solucionar mi problema; modificar el WHILE por otra cosa...

Vale, revisando el código me he dado cuenta de un error. No se puede hacer así, porque pasas los datos por SESSION. Si te das cuentas, en SESSION sólo se van a quedar los datos (id, nombre y precio) del último producto del bucle, ya que los machacas.

Lo que tendrás que hacer es pasar un array con cada conjunto de datos, es decir, un array para id, otro para nombre y otro para precio. Usando la misma idea del array que se monta automático para cantidad. Algo así:
Código PHP:
Ver original
  1. <?php
  2.     $query= mysql_query('SELECT * FROM productos WHERE categ_prod = "apicolas"') or mysql_error();
  3.     ?>
  4.     <div class="producto">
  5.         <form action="agregar_producto.php" method="post">
  6.         <img src="IMAGENES DE SELECCION/editadas/IMG_3482.JPG" height="127"  align="left"/>
  7.     <?php
  8.     $nombres = array(); // Esto crea un array vacío.
  9.     $ids = array();
  10.     $precios = array();
  11.     while ($row= mysql_fetch_array($query)) {
  12.         echo "<h1>" .$row['nom_prod'], "</h1>";
  13.         $nombres[] = $row['nom_prod']; // Esto añade en la siguiente posición del array.
  14.     ?>
  15.           <p> Es una secreci&oacute;n de las gl&aacute;ndulas hipofar&iacute;ngeas de las abejas nodrizas. Todas las larvas son alimentadas con jalea real los tres primeros d&iacute;as de su vida, a partir de esa fecha &uacute;nicamente la larva elegida reina se alimentar&aacute; con ella, mientras que las abejas obreras dispondr&aacute;n de una mezcla de polen, agua y miel. </p>
  16.           Cantidad: <input name="cantidad[]" type="text" id="cantidad" size="2"/>
  17.     <?php
  18.         echo "# ID: " .$row['id_prod'], ", ";
  19.         $ids[] = $row['id_prod'];
  20.         echo "Precio: " .$row['precio_prod'], " ";
  21.         $precios[] = $row['precio_prod'];
  22.     }
  23.     // Al final del bucle, los arrays se habrán llenado de datos y los guardas en la sesión:
  24.     $_SESSION["nombres"] = $nombres;
  25.     $_SESSION["ids"] = $ids;
  26.     $_SESSION["precios"] = $precios;
  27.     ?>
  28.             <input type="submit"  value="A&ntilde;adir al Carro" />
  29.             <img src='images/carro_anadir.gif' />
  30.         </form>
  31.     </div>

De esta forma en el PHP en el que trates el formulario tendrás 4 arrays:
Código PHP:
Ver original
  1. $ids = $_SESSION("ids");
  2. $nombres = $_SESSION("nombres");
  3. $precios = $_SESSION("precios");
  4. $cantidades = $_POST("cantidad");

Y puedes poner un bucle tal que así:
Código PHP:
Ver original
  1. for ($i = 0; $i < count($ids); $i++) {
  2.     echo "ID: " . $ids[$i];
  3.     echo "Nombre: " . $nombres[$i];
  4.     echo "Precio: " . $precio[$i];
  5.     echo "Cantidad: " . $cantidades[$i];
  6. }

Ahora sí, un saludo.
__________________
¿Alguna pregunta, duda, acotación, nota, cuestión, reparo, comentario, demanda, crítica, interpretación, objeción, interrogante, discrepancia, observación, réplica, disquisición, apostilla o exégesis?
  #5 (permalink)  
Antiguo 08/08/2011, 06:48
 
Fecha de Ingreso: septiembre-2008
Mensajes: 148
Antigüedad: 16 años, 2 meses
Puntos: 10
Respuesta: No logro solucionar mi problema; modificar el WHILE por otra cosa...

A ver, lo que te dije del checkbox era un posible solucion, si no te gusta no uses el checkbox pero obviamente no vas a poder plantearte alternativas si no sabes como funcionan las paginas web (html para la vista y php procesado en el servidor).

Dedicale un dia a leer como funciona php y te vas a dar cuenta del groso error que estas cometiendo, las soluciones son varias y yo te plantie 2. Pero como te las dije sin exponer ningun codigo que te facilite las cosas, creaste un nuevo tema pidiendo que te resuelvan el problema en concreto que yo y otros te hemos marcado...
  #6 (permalink)  
Antiguo 08/08/2011, 07:28
Avatar de ras_chalo  
Fecha de Ingreso: junio-2010
Mensajes: 369
Antigüedad: 14 años, 5 meses
Puntos: 6
Respuesta: No logro solucionar mi problema; modificar el WHILE por otra cosa...

Cita:
Iniciado por LhaN Ver Mensaje
A ver, lo que te dije del checkbox era un posible solucion, si no te gusta no uses el checkbox pero obviamente no vas a poder plantearte alternativas si no sabes como funcionan las paginas web (html para la vista y php procesado en el servidor).

Dedicale un dia a leer como funciona php y te vas a dar cuenta del groso error que estas cometiendo, las soluciones son varias y yo te plantie 2. Pero como te las dije sin exponer ningun codigo que te facilite las cosas, creaste un nuevo tema pidiendo que te resuelvan el problema en concreto que yo y otros te hemos marcado...
Estimado: Lamento no ser tan buen programador como tu, por eso estoy aquí... y no es que no haya tomado encuentra tus comentarios, al contrario, lo intente pero me vi en la necesidad de volver hacer la pregunta ya que no tengo con quien guiarme mas que los comentarios de este foro...

Disculpa si te sentiste pasado a llevar...

Saludos!.
  #7 (permalink)  
Antiguo 08/08/2011, 07:32
Avatar de ras_chalo  
Fecha de Ingreso: junio-2010
Mensajes: 369
Antigüedad: 14 años, 5 meses
Puntos: 6
Respuesta: No logro solucionar mi problema; modificar el WHILE por otra cosa...

Cita:
Iniciado por vgonga1986 Ver Mensaje
Vale, revisando el código me he dado cuenta de un error. No se puede hacer así, porque pasas los datos por SESSION. Si te das cuentas, en SESSION sólo se van a quedar los datos (id, nombre y precio) del último producto del bucle, ya que los machacas.

Lo que tendrás que hacer es pasar un array con cada conjunto de datos, es decir, un array para id, otro para nombre y otro para precio. Usando la misma idea del array que se monta automático para cantidad. Algo así:
Código PHP:
Ver original
  1. <?php
  2.     $query= mysql_query('SELECT * FROM productos WHERE categ_prod = "apicolas"') or mysql_error();
  3.     ?>
  4.     <div class="producto">
  5.         <form action="agregar_producto.php" method="post">
  6.         <img src="IMAGENES DE SELECCION/editadas/IMG_3482.JPG" height="127"  align="left"/>
  7.     <?php
  8.     $nombres = array(); // Esto crea un array vacío.
  9.     $ids = array();
  10.     $precios = array();
  11.     while ($row= mysql_fetch_array($query)) {
  12.         echo "<h1>" .$row['nom_prod'], "</h1>";
  13.         $nombres[] = $row['nom_prod']; // Esto añade en la siguiente posición del array.
  14.     ?>
  15.           <p> Es una secreci&oacute;n de las gl&aacute;ndulas hipofar&iacute;ngeas de las abejas nodrizas. Todas las larvas son alimentadas con jalea real los tres primeros d&iacute;as de su vida, a partir de esa fecha &uacute;nicamente la larva elegida reina se alimentar&aacute; con ella, mientras que las abejas obreras dispondr&aacute;n de una mezcla de polen, agua y miel. </p>
  16.           Cantidad: <input name="cantidad[]" type="text" id="cantidad" size="2"/>
  17.     <?php
  18.         echo "# ID: " .$row['id_prod'], ", ";
  19.         $ids[] = $row['id_prod'];
  20.         echo "Precio: " .$row['precio_prod'], " ";
  21.         $precios[] = $row['precio_prod'];
  22.     }
  23.     // Al final del bucle, los arrays se habrán llenado de datos y los guardas en la sesión:
  24.     $_SESSION["nombres"] = $nombres;
  25.     $_SESSION["ids"] = $ids;
  26.     $_SESSION["precios"] = $precios;
  27.     ?>
  28.             <input type="submit"  value="A&ntilde;adir al Carro" />
  29.             <img src='images/carro_anadir.gif' />
  30.         </form>
  31.     </div>

De esta forma en el PHP en el que trates el formulario tendrás 4 arrays:
Código PHP:
Ver original
  1. $ids = $_SESSION("ids");
  2. $nombres = $_SESSION("nombres");
  3. $precios = $_SESSION("precios");
  4. $cantidades = $_POST("cantidad");

Y puedes poner un bucle tal que así:
Código PHP:
Ver original
  1. for ($i = 0; $i < count($ids); $i++) {
  2.     echo "ID: " . $ids[$i];
  3.     echo "Nombre: " . $nombres[$i];
  4.     echo "Precio: " . $precio[$i];
  5.     echo "Cantidad: " . $cantidades[$i];
  6. }

Ahora sí, un saludo.
Wow!, Muchas gracias!!
Entiendo perfectamente la idea...desde ya la voy a empezar a implementar, que simple como lo planteaste!

Nuevamente te agradezco tu disposición, he aprendido mucho con tu post.
Saludos y gracias!!
  #8 (permalink)  
Antiguo 08/08/2011, 08:02
Avatar de vgonga1986  
Fecha de Ingreso: marzo-2008
Ubicación: País de Pandereta
Mensajes: 1.021
Antigüedad: 16 años, 8 meses
Puntos: 253
Respuesta: No logro solucionar mi problema; modificar el WHILE por otra cosa...

Me alegro que haya funcionado, pero no sabía nada de lo que han comentado, si no, descuida que no te habría pasado el código.

Así no aprendes nada, yo te lo he cambiado porque parecía que tenías el código bien, pero te faltaba un pelo, sin embargo, si lo que trajiste aquí ya te lo había dado otro, realmente tú no has hecho ningún esfuerzo.

En fin, es cosa tuya, no mía. Yo ya sé e intento que aprendáis los demás, si no aprendes el que más pierde eres tú, yo no.

Un saludo.
__________________
¿Alguna pregunta, duda, acotación, nota, cuestión, reparo, comentario, demanda, crítica, interpretación, objeción, interrogante, discrepancia, observación, réplica, disquisición, apostilla o exégesis?
  #9 (permalink)  
Antiguo 08/08/2011, 08:23
Avatar de ras_chalo  
Fecha de Ingreso: junio-2010
Mensajes: 369
Antigüedad: 14 años, 5 meses
Puntos: 6
Respuesta: No logro solucionar mi problema; modificar el WHILE por otra cosa...

Cita:
Iniciado por vgonga1986 Ver Mensaje
Me alegro que haya funcionado, pero no sabía nada de lo que han comentado, si no, descuida que no te habría pasado el código.

Así no aprendes nada, yo te lo he cambiado porque parecía que tenías el código bien, pero te faltaba un pelo, sin embargo, si lo que trajiste aquí ya te lo había dado otro, realmente tú no has hecho ningún esfuerzo.

En fin, es cosa tuya, no mía. Yo ya sé e intento que aprendáis los demás, si no aprendes el que más pierde eres tú, yo no.

Un saludo.
Hola, no la verdad que el código es mío 100%, el era la persona que me había sugerido lo de los checkbox...

En fin...

Saludos y gracias por tu gran ayuda!
  #10 (permalink)  
Antiguo 08/08/2011, 08:25
 
Fecha de Ingreso: septiembre-2008
Mensajes: 148
Antigüedad: 16 años, 2 meses
Puntos: 10
Respuesta: No logro solucionar mi problema; modificar el WHILE por otra cosa...

No se trata de ser mejor o peor que yo, se trata de querer entender como funcionan las cosas. Y no lo tomes a mal, pero tu lo que no entiendes es como funciona php, y te lo he dicho 3 veces. Pero insistes en querer programar como si php se ejecutara en el momento en que das submit del form. Lo que vgonga1986 te paso puede que funcione, incluso que te haya servido, pero estoy seguro que no tenes ni la mas remota idea de como funciono... y ese es el tema, la idea del foro es que aprendas, no que copies y pegues. Lamentablemente a mi parecer, queres que te tiren codigo hecho y no que te expliquen como funcionan las cosas.
  #11 (permalink)  
Antiguo 08/08/2011, 08:29
 
Fecha de Ingreso: septiembre-2008
Mensajes: 148
Antigüedad: 16 años, 2 meses
Puntos: 10
Respuesta: No logro solucionar mi problema; modificar el WHILE por otra cosa...

Cita:
Iniciado por ras_chalo Ver Mensaje
Se que es producto del While que le puse, pero no se me ocurre la solución al problema...
Intente ponerle un ciclo for, pero nada...
Alguien me dijo que pasando todos los datos a un form, con un checkbox se soluciona, pero no me sirve que sea en un checkbox... necesito simplemente solucionar sin cambiar mucho la estructura de la ficha del producto...
Deberias haber puesto:
Me dijeron que es un problema con el while...pero no me interesa aprender como funciona php
Alguien me dijo que usar checkbox es UNA solucion...pero no tengo idea como reemplazar el checkbox por algo que me guste a mi.
necesito que me den el codigo resuelto... para no tener que pensar mucho.
  #12 (permalink)  
Antiguo 08/08/2011, 08:31
Avatar de ras_chalo  
Fecha de Ingreso: junio-2010
Mensajes: 369
Antigüedad: 14 años, 5 meses
Puntos: 6
Respuesta: No logro solucionar mi problema; modificar el WHILE por otra cosa...

Cita:
Iniciado por LhaN Ver Mensaje
No se trata de ser mejor o peor que yo, se trata de querer entender como funcionan las cosas. Y no lo tomes a mal, pero tu lo que no entiendes es como funciona php, y te lo he dicho 3 veces. Pero insistes en querer programar como si php se ejecutara en el momento en que das submit del form. Lo que vgonga1986 te paso puede que funcione, incluso que te haya servido, pero estoy seguro que no tenes ni la mas remota idea de como funciono... y ese es el tema, la idea del foro es que aprendas, no que copies y pegues. Lamentablemente a mi parecer, queres que te tiren codigo hecho y no que te expliquen como funcionan las cosas.
Estimado; No se porque has tomado esta postura por mi tema, solo estoy intentando aprender como tu lo hiciste en su momento. Lo que me han sugerido, tanto como tu como las demás personas que han posteado me ha servido mucho para mi aprendizaje. Pero creo que estás tomando la cosas con otro punto de vista. Estoy muy consiente que debo seguir aprendiendo, y eso es lo que hago...

Muy triste es ver que después que me hayas ayudado, tomes esta postura...
En fin...Saludos...
  #13 (permalink)  
Antiguo 08/08/2011, 08:36
Avatar de vgonga1986  
Fecha de Ingreso: marzo-2008
Ubicación: País de Pandereta
Mensajes: 1.021
Antigüedad: 16 años, 8 meses
Puntos: 253
Respuesta: No logro solucionar mi problema; modificar el WHILE por otra cosa...

Ya está, dejadlo correr:
@LhaN Si no queire aprender, déjalo, que no aprenda. Ahora ha tenido suerte que yo vi que el código estaba casi casi y le pegué el último empujón. Otra vez pedirá ayuda y la gente no se la dará.
@ras_chalo Si él ha tomado esta postura creo que es sobretodo por el tema de que hayas abierto un post nuevo para preguntar lo mismo. Eso no sienta bien, porque uno se esfuerza en explicar las cosas y luego ves como la persona que pregunta pasa de tus explicaciones y se va a lo fácil. Eso cabrea bastante.

Pero dejadlo ya, porque no merece la pena, que cada uno haga lo que quiera y obtenga lo que se merece.

Un saludo.
__________________
¿Alguna pregunta, duda, acotación, nota, cuestión, reparo, comentario, demanda, crítica, interpretación, objeción, interrogante, discrepancia, observación, réplica, disquisición, apostilla o exégesis?

Etiquetas: imagenes, modificar, mysql
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 22:28.