Ver Mensaje Individual
  #4 (permalink)  
Antiguo 16/10/2012, 07:53
Avatar de Nemutagk
Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años, 1 mes
Puntos: 406
Respuesta: problemas para realizar una consulta a un array

Esta completamente mal lo que estas intentando hacer, para comenzar, el input que tienes cuando el while termine su trabajo tendras N inputs con el mismo nombre, por lo cual el unico valor que se enviará será el ultimo, mas no todos, para eso debes convertir el input en un array dandole el mismo nombre a todos los input y agregando dos corchetes al final del nombre....

Código PHP:
Ver original
  1. while($fila=mysql_fetch_array($result))
  2. {
  3.      echo '<tr><td>'.$fila["descrip"].'</td><td>'.$fila["codigo"].'</td><td>'.$fila["descripcion"].'</td><td>'.$fila["stock_min"].'</td><td>'.$fila["existencia"].'</td><td><input type="text" name="cantidad[]" size="4"/></td></tr>';
  4. }

Ya en el archivo donde vas a actualizar los datos unicamente tienes que indicarle a MySQL que debe sumarlos, mas no reemplazarlos...

Código PHP:
Ver original
  1. if (isset($_POST['cantidad'])) {
  2.      foreach($_POST['cantidad'] as $cantidad) {
  3.           $sql = ' UPDATE productos SET existencia += '.$cantidad;
  4.           mysql_query($sql) or die(mysql_error());
  5.      }
  6. }

Ahora, tal como lo estas planteando tiene sus deficiencias, eh incluso le llamaría errores, para comenzar, el FORM solo enviaría los input que tienen un valor, lo que no se les agrega valor los desecha, por lo cual si tienes X items diferentes cada uno con su ID vas a revolver las existencias, ejemplo:

En el formulario:
Código:
producto 1: 30
producto 2: 
producto 3: 10
producto 4:
producto 5:
producto 6: 8
Al final, el formulario solo enviaria 3 items por lo cual quedaría como array(30,10,8), entonces, cuando actualices los datos no sabras a quien corresponde los datos enviados (a que producto se le va a sumar), mas aparte, peor aun, tu sentencia SQL no tiene un filtro (where), por lo cual, sumará a todos los productos existentes en la tabla los datos que envies en el form, mejor, analiza bien lo que pretendes hacer, porque tal cual como lo tienes esta completamente mal =/

Actualización: por cierto, se me olvidaba, también estas asociando mal la fila a la variable de sesión 'lista', cada vez que el while hace un ciclo, este reemplaza el valor anterior, para que PHP lo trate como un array debes agregar corchetes al final de la variable, aparte de eso, por buenas practicas SIEMPRE debes definir antes la variable como array!

Código PHP:
Ver original
  1. $_SESSION['lista'] = array();
  2. while($fila=mysql_fetch_array($result))
  3. {
  4.      $_SESSION['lista'][] = $fila;
  5.      echo '<tr><td>'.$fila["descrip"].'</td><td>'.$fila["codigo"].'</td><td>'.$fila["descripcion"].'</td><td>'.$fila["stock_min"].'</td><td>'.$fila["existencia"].'</td><td><input type="text" name="cantidad[]" size="4"/></td></tr>';
  6. }
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)