Carrito PHP con javascript

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
1
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.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas