Tengo una página en PHP/MySQL con un carrito de la compra, y quiero pasar unas variables mediante javascript, con la siguiente función al hacer click function AnadirQty(item) { itemId = item.name; newQty = item.name; document.location.href = 'cart_m.php?action=add_item&id='+itemId+'&qty='+newQty; } No soy capaz de que esta función recoja los valores del formulario. Uno de los campos es oculto itemId (tiene un valor de la base de datos) y el otro es un campo de texto (qty) que introduce el usuario.
Agradecería me ayudaseis a plantear una solución u otra forma de resolverlo.
1 respuesta
Respuesta de gandalf26
1
1
gandalf26, Trabajo en desarrollo web en general, html, css, etc
Creo que ya se cual es el problema... Según veo, en realidad vas a meter muchos items posibles a elegir, ¿no? Pues para cada uno de ellos debes generar los elementos de formulario individuales, es decir: Si el do {} while() mete más de un item, el formulario va a constar de más de un elemento hidden que se llama "id", y más de un elemento que se llama "qty", de modo que la función de javascript no va a funcionar correctamente... no va a saber a cual tiene que ie (y supongo que tirara del primero siempre, si acaso). Prueba con lo que te pongo... no tengo claro al 100% lo del eval(...), pero creo que así esta bien: ************************ <?php require_once('Connections/connPrueba.php'); ?> <?php mysql_select_db($database_connPrueba, $connPrueba); $query_rsProductos = "SELECT * FROM items"; $rsProductos = mysql_query($query_rsProductos, $connPrueba) or die(mysql_error()); $row_rsProductos = mysql_fetch_assoc($rsProductos); $totalRows_rsProductos = mysql_num_rows($rsProductos); include("db_m.php"); ?> <html> <head> <title> Product List </title> <script language="JavaScript"> <!-- function AnadirQty(cual) { itemId = eval('document.item.id'+cual+'.value'); newQty = eval('document.item.qty'+cual+'.value'); document.location.href = 'cart_m.php?action=add_item&id='+itemId+'&qty='+newQty; } //--> //--> </script> </head> <body bgcolor="#ffffff"> <?php $contador = 1; do { ?> <form action="" method="get" name="item" id="item"> <table width="80%" border="0" cellspacing="0" cellpadding="0"> <tr> <td><font face="verdana" size="1" color="black"><?php echo $row_rsProductos['itemName']; ?> <input name="id<?php echo $contador?>" type="hidden" value="<?php echo $row_rsProductos['itemId']; ?>"> </font></td> <td><font face="verdana" size="1" color="black"><?php echo $row_rsProductos['itemPrice']; ?> ? </font></td> <td><div align="center"> <input name="qty<?php echo $contador?>" type="text" size="4" value=""> </div></td> <td><div align="center"><img src="images/bot_cesta.gif" width="19" height="15" onClick="AnadirQty(<?php echo $contador?>)"> </div></td> </tr> </table> </form> <?php $contador++; } while ($row_rsProductos = mysql_fetch_assoc($rsProductos)); ?> <p> </p> </body> </html> <?php mysql_free_result($rsProductos); ?> ************************ Espero que te ayude, si no funciona, mandame el error que de... ¿podrías indicarme la url donde poder acceder a verla?
Muchísimas gracias. Aunque el código que me envías da un pequeño error, el planteamiento de la solución la comprendí a la perfección, y ya me funciona correctamente.El problema estaba en la identificación de los elementos de formulario que no los numeraba correctamente.
Te adjunto el código completo: ------------------------------------- <?php require_once('Connections/connPrueba.php'); ?> <?php mysql_select_db($database_connPrueba, $connPrueba); $query_rsProductos = "SELECT * FROM items"; $rsProductos = mysql_query($query_rsProductos, $connPrueba) or die(mysql_error()); $row_rsProductos = mysql_fetch_assoc($rsProductos); $totalRows_rsProductos = mysql_num_rows($rsProductos); include("db_m.php"); ?> <html> <head> <title> Product List </title> <script language="JavaScript"> <!-- function AnadirQty(item) { itemId = item.id.value; newQty = item.qty.value; document.location.href = 'cart_m.php?action=add_item&id='+itemId+'&qty='+newQty; } //--> //--> </script> </head> <body bgcolor="#ffffff"> <?php do { ?> <form action="" method="get" name="item" id="item"> <table width="80%" border="0" cellspacing="0" cellpadding="0"> <tr> <td><font face="verdana" size="1" color="black"><?php echo $row_rsProductos['itemName']; ?> <input name="id" type="hidden" id="id" value="<?php echo $row_rsProductos['itemId']; ?>"> </font></td> <td><font face="verdana" size="1" color="black"><?php echo $row_rsProductos['itemPrice']; ?> ? </font></td> <td><div align="center"> <input name="qty" type="text" id="qty" size="4"> </div></td> <td><div align="center"><img src="images/bot_cesta.gif" width="19" height="15"> </div></td> </tr> </table> </form> <?php } while ($row_rsProductos = mysql_fetch_assoc($rsProductos)); ?> <p> </p> </body> </html> <?php mysql_free_result($rsProductos); ?> -------------------------------------- Sólo falta llamar a la función cuando hacemos click en la imagen "bot_cesta.gif" . Los 3 parámetros (action, itemId y newQty) se pasan a una cesta que funciona correctamente. Gracias.
Ante todo, en esa función estas metiendo el mismo valor (item. Name) a ambas variables... ¿Entiendo qué item es un formulario? ¿Y accedes al campo name o el que sea? ¿O es un objeto previamente creado? Creo que lo mejor es que me dejes ver el código (al menos el resultado html+javascript si no quieres mostrarme el php) para poder entender exactamente lo que quieres hacer... En principio, y pensando en que item es un formulario, yo haría algo así: function AnadirQty(item) { itemId = item.id.value; newQty = item.qty.value; document.location.href = 'cart_m.php?action=add_item&id='+itemId+'&qty='+newQty; } Así debería de funcionar si existe un hidden dentro del formulario que se llame "id" y un campo a rellenar que se llame "qty"... Espero que te ayude, si necesitas algo más, por favor, pásame el código para echarle un vistazo.