Pregunta:
Fecha: 04-11-2015 22:00:11
(En Español)
Tengo un problema que no logro solucionar, tengo un carrito de compras utilizando sesiones que funciona bien hasta que trato de cambiar la cantidad de un producto elegido, si hago el cambio en automático me crea un nuevo producto sin ningín id y entonces PHP me indica:
Notice: Undefined index: nombre in C:\xampp\htdocs\car\ingresar.php on line 70
Dejando sin id, nombre y mas valores el registro y el registro que se pretende cambiar la cantidad queda en la misma sin sufrir ningún cambio. Este es el código para realizar el cambio de cantidad:
Ojalá alguien me pueda ayudar ya que no encuentro una solución, gracias por su amable atención. Votos: 1 - Respuestas: 6 - Vistas: 14 Compartir en: Google Facebook Twitter LinkedIn Link
Cambio de cantidad en array de sesiones carga un nuevo producto sin id[Resuelta]
Buenas noches compañeros.Tengo un problema que no logro solucionar, tengo un carrito de compras utilizando sesiones que funciona bien hasta que trato de cambiar la cantidad de un producto elegido, si hago el cambio en automático me crea un nuevo producto sin ningín id y entonces PHP me indica:
Notice: Undefined index: nombre in C:\xampp\htdocs\car\ingresar.php on line 70
Dejando sin id, nombre y mas valores el registro y el registro que se pretende cambiar la cantidad queda en la misma sin sufrir ningún cambio. Este es el código para realizar el cambio de cantidad:
<?php
session_start();
$cantidad=$_GET['cant']; // recibo la cantidad del producto antes de modificar
$id=$_GET['id']; // recibo el id del producto
$array=$_SESSION['cart']; // guardo en $array la sesion del carrito
$number=0;
$cant2=$_GET['cant']; // variable que recibe la modificación de cantidad por GET a este mismo archivo
foreach ($array as $key ) { // recorro $array que contiene la sesion del carrito
if ($key['unique_id'] == $id) { // si al recorrer encuentra el valor unique_id == al valor id por GET
$number=$key['unique_id']; // la var number va a guardar el valor de $key en la posición unique_id
}
}
$array[$number]['cantidad']=$cant2; // el valor del carrito en la posicion unique_id - cantidad va a ser igual a cant2 que es el nuevo valor de la cantidad de el producto seleccionado
$_SESSION['cart']=$array; // guardamos los cambios en la sesion cart
?>
<form action="#" method="GET">
<input type="text" name="cant" value="<?php echo $cantidad ?>">
<input type="submit">
</form> Ojalá alguien me pueda ayudar ya que no encuentro una solución, gracias por su amable atención. Votos: 1 - Respuestas: 6 - Vistas: 14 Compartir en: Google Facebook Twitter LinkedIn Link
Respuestas:
-
Fecha: 05-11-2015 02:38:43 Hola
Cual es el script de ingresar.PHP ?
Las variables $cant2 y $cantidad siempre tienen el mismo valor que viene por el formulario.
No tiene sentido.
Si haces un var_dump de $array?
Saludos Votos: 1 - Link respuesta -
Fecha: 05-11-2015 08:05:35 Hola,
Te dejo una versión limpia y funcional de tu código.
Le faltan muchas cosas de seguridad pero es un ejemplo
<?php session_start(); //Init session if(isset($_GET['cant'])) { $qty = (int) $_GET['cant']; //New qty value $id = (int) $_GET['id']; //Item id $cartdata = $_SESSION['cart']; //Temp storage to iterate through array foreach($cartData as $item) { if($item['unique_id'] == $id) { //Did we find the item? $_SESSION['cart'][$item['unique_id']]['cantidad'] = $qty; //Update qty break; //Stop iterating } } } ?> <form action="#" method="GET"> <input type="text" name="cant" value="<?php echo $qty; ?>"> <input type="submit"> </form>
Observaciones:
- Estás actualizando, no uses GET, usa POST
- PSR siempre ;)
- No es necesario tanto código
- No olvides la seguridad de tu código :D Votos: 1 - Link respuesta -
Fecha: 05-11-2015 10:49:56 Gracias Ernesto Peimbert pero el problema persiste, me crea un nuevo producto sin datos, no me toma el id que traigo por GET Votos: 0 - Link respuesta
-
Fecha: 05-11-2015 11:30:13 Ernesto Peimbert, de esta forma me funciona:
<?php session_start(); $cantidad=$_GET['cant']; $id=$_GET['id']; $array=$_SESSION['cart']; $cant2=100; foreach ($array as $key ) { // recorro $array que contiene la sesion del carrito if ($key['unique_id'] == $id) { $_SESSION['cart'][$id]['cantidad'] = $cant2; } } ?>
Pero si pongo la variable $cant2=$_GET['cantidad']; no me lo toma en cuenta sólo si le paso un número que no llegue por GET lo hace sin problema y no entiendo el motivo.
<form action="#" method="GET"> <input type="text" name="cantidad" value="<?php echo $cantidad ?>"> <input type="submit"> </form>
Votos: 0 - Link respuesta -
Fecha: 05-11-2015 12:44:46 Ernesto Peimbert, lo he solucionado combinando tu código con el mio y es funcional al 100% ahora como indicas tengo que hacerlo más seguro pero ahí la verdad no tengo ni idea de donde buscar, si te es posible indicarme algún sitio que enseñe como hacer mas seguro mi código te lo agradecería así como te agradezco tu interés por ayudarme.
<?php session_start(); if(isset($_GET['cant'])) { $cantidad=$_GET['cant']; // recibo la cantidad del producto antes de modificar $id=$_GET['id']; // recibo el id del producto $array=$_SESSION['cart']; // guardo en $array la sesion del carrito $cant2=$_GET['cantidad']; // variable que recibe la modificación de cantidad por GET a este mismo archivo foreach ($array as $key ) { // recorro $array que contiene la sesion del carrito if ($key['unique_id'] == $id) { // si al recorrer encuentra el valor unique_id == al valor id por GET $_SESSION['cart'][$id]['cantidad'] = $cant2; // la var number va a guardar el valor de $key en la posición unique_id break; } } header('Location: ingresar.php'); } ?>Votos: 0 - Link respuesta -
Fecha: 05-11-2015 13:56:37 Oscar, son muchísimas cosas que hay que tomar en cuenta pero para empezar puedes leer el aporte que hizo nuestro compañero Daniel aquí Votos: 1 - Link respuesta
Para participar activamente de la comunidad primero debes autenticarte, ingresa al sistema.Iniciar Sesión
