Nueva pregunta

Pregunta:

Fecha: 04-11-2015 22:00:11 (En Español)

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.
Etiquetas: $_GET - $_SESSION - Array PHP - PHP - Pregunta 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
 
frjcbbae garagebible.com