Foros del Web » Programando para Internet » PHP »

problemas para realizar una consulta a un array

Estas en el tema de problemas para realizar una consulta a un array en el foro de PHP en Foros del Web. Gente primero que nada buenas noches, espero que me puedan ayudar con el problema que presento: Tengo una lista de productos a la cual se ...
  #1 (permalink)  
Antiguo 14/10/2012, 23:20
 
Fecha de Ingreso: febrero-2012
Ubicación: Cagua Estado Aragua
Mensajes: 34
Antigüedad: 12 años, 2 meses
Puntos: 0
problemas para realizar una consulta a un array

Gente primero que nada buenas noches, espero que me puedan ayudar con el problema que presento:

Tengo una lista de productos a la cual se les quiere modificar (añadir) cierta cantidad de existencia; Aquí les muestro mi código:

Código PHP:
        <?
         
require_once("../conexion/conexion.php");
         
$sql="select rubros.descrip, codigo, descripcion, existencia, stock_min from productos inner join rubros on rubros.id= productos.rubro_id order by descrip asc";
         
$result=mysql_query($sql,$idconn);


        if(
$result)  
        {
            echo 
'<table><tr><th>rubro</th><th>codigo</th><th>descripcion</th><th>s_min</th><th>exist</th><th>cantidad</th></tr>';
            while(
$fila=mysql_fetch_array($result))
                {
                    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>';
                   }
                echo 
'</table>';
        }
            
?>
lo que quiero hacer es que por medio de un submit esas cantidades que el usuario ingresa en el INPUT se sumen a cada una de las existencias de los productos... (inventario)

Creo que se puede hacer a través de un bucle for, utilizando algunas funciones de php (el problema es que no se cual) en realidad no hallo la manera de hacerlo para todas las filas de la tabla al mismo tiempo.

Espero puedan ayudarme, Bless
  #2 (permalink)  
Antiguo 15/10/2012, 00:59
Avatar de zalito12  
Fecha de Ingreso: noviembre-2011
Ubicación: Coruña, España
Mensajes: 430
Antigüedad: 12 años, 5 meses
Puntos: 67
Respuesta: problemas para realizar una consulta a un array

Hola,
Mirando tu código veo que ya has puesto tú los campos INPUT, ahora, no sé muy bien si quieres que se actualicen las cantidades de cada producto o un sólo botón para cambiar todos los datos a la vez.
De todas todas necesitarás abrir un <form> para enviar los datos y cambiarlos en la bd.
Espero tu respuesta
  #3 (permalink)  
Antiguo 16/10/2012, 06:52
 
Fecha de Ingreso: febrero-2012
Ubicación: Cagua Estado Aragua
Mensajes: 34
Antigüedad: 12 años, 2 meses
Puntos: 0
Respuesta: problemas para realizar una consulta a un array

Buenos días y gracias por revisar mi tema... Quisiera que se actualizara la existencia de todos los productos a la vez, me imagino que seria recurriendo el array. Aqui te anexo el codigo completo, porque arriba solo coloque una parte:

Código PHP:
<html>
    <head>
        <link rel="stylesheet" type="text/css" href="estilo_1.css" />
        <link rel="stylesheet" type="text/css" href="estilo_lista.css" />

            <script language="JavaScript">
                function pregunta(){
                    if (confirm('Desea actualizar el inventario para el producto seleccionado?')){
                       document.select_prod.submit()
                        }
                }
            </script>
    </head>
        <body>

                      <h1>sistema administrativo racing C.A.</h1>

            <form action="form_nuevos_productos.php" method="post">
            <fieldset>            
            <legend>nuevo producto</legend>
                <button type="submit" name="nuevo" class="nuevo">
                    <img src="nuevo_prod.png"/>
                nuevo producto
                </button>
            </fieldset>
            </form>

            <form name="actualizar" method="post" action="actualizar_inventario.php">
            <fieldset>
            <legend>inventario</legend>
        <?
         
require_once("../conexion/conexion.php");
         
$sql="select rubros.descrip, codigo, descripcion, existencia, stock_min from productos inner join rubros on rubros.id= productos.rubro_id order by descrip asc";
         
$result=mysql_query($sql,$idconn);

        
        if(
$result)  
        {
            echo 
'<table><tr><th>rubro</th><th>codigo</th><th>descripcion</th><th>s_min</th><th>exist</th><th>cantidad</th></tr>';
            while(
$fila=mysql_fetch_array($result))
                {
                
$_SESSION['lista'] = $fila// Aquí le asigno el array a una variable se session para llamarla en el script 
                    
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>';
                   }
                echo 
'</table>';
             
            
mysql_free_result($result);
        }
            
?>

            <button type="submit" name="agregar_prod" onClick="pregunta()" class="guardar">
                <img src="aceptar.png"/>
            agregar
            </button>
            </fieldset>
            </form>

        </body>
</html>

y este es el script que hice para que se actualicen las existencias

Código PHP:
Ver original
  1. <?
  2. include "../conexion/conexion.php";
  3.    
  4.  
  5.     $lista[]=$_SESSION['lista'];
  6.  
  7.     for($i=0; $i<=count($lista); $i++)
  8.     {
  9.         $sql="update productos set existencia='".$lista['existencia']."'+'".$_POST['cantidad']."'";
  10.         $result=mysql_query($sql,$idconn);
  11.  
  12.     }
  13.  
  14.  
  15. mysql_close($idconn);
  16.  
  17.  
  18. header("location:prueba_1.php");
  19. ?>

cuando presiono el botón carga pero no hace nada...
  #4 (permalink)  
Antiguo 16/10/2012, 07:53
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años
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 =)
  #5 (permalink)  
Antiguo 16/10/2012, 20:36
 
Fecha de Ingreso: febrero-2012
Ubicación: Cagua Estado Aragua
Mensajes: 34
Antigüedad: 12 años, 2 meses
Puntos: 0
Respuesta: problemas para realizar una consulta a un array

Oye muchas gracias, me ha servido la ayuda: Reconozco que tengo muchos errores en lo que es la sintaxis de php, la cuestión es que estoy aprendiendo solo sin ayuda de nadie pues. Por eso es que hago esas loqueras que viste jajaja...

Ahora bien, para evitar el error en la actualización de los productos ( lo que me explicaste sobre los arrays) podría resolverlo utilizando un chekbox¿? es decir; que el usuario primero seleccione los productos a los cuales les pretende modificar la existencia y después les agregue las cantidades, y para este no deje campos en blanco le hago una validación con javascript que no permita casillas en blanco...

Etiquetas: php+base+de+datos+array, php+basedatos+clicks
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 21:00.