Foros del Web » Programando para Internet » PHP »

Actualizar una tabla

Estas en el tema de Actualizar una tabla en el foro de PHP en Foros del Web. Buenos días, tengo un problema y creo que estoy planteándolo mal. Lo que intento hacer es que me muestre en una tabla todos los materiales ...
  #1 (permalink)  
Antiguo 25/11/2013, 01:37
 
Fecha de Ingreso: octubre-2013
Ubicación: Asturias
Mensajes: 52
Antigüedad: 10 años, 6 meses
Puntos: 1
Actualizar una tabla

Buenos días, tengo un problema y creo que estoy planteándolo mal. Lo que intento hacer es que me muestre en una tabla todos los materiales cuya cantidad sea mayor que lo recibido (SELECT * FROM entradas WHERE cantidad>recibido)

Mediante un while y usando arrays me muestra eso, pero quiero que la columna de recibido se pueda modificar, y ahí es donde está el problema.

Os adjunto los php.

Código PHP:
Ver original
  1. <?php
  2. //Conectar la base de datos
  3. $conectar = mysql_connect("localhost","rasty","rasty");
  4.  if (! $conectar){die ("ERROR EN LA CONEXION CON MYSQL: ".mysql_error());}
  5.  
  6. $base = mysql_select_db ("consumibles",$conectar);
  7.  if(! $base){die ("ERROR AL CONECTAR CON LA BASE DE DATOS: ".mysql_error());}
  8.  
  9.  
  10. $sql = "SELECT * FROM entradas WHERE cantidad>recibido";
  11.  
  12. $resultado = mysql_query($sql);
  13.  
  14. echo "<html>
  15.         <h1>Actaulizar una entrada</h1>
  16.         <body>
  17.         <form name='actEntradasC' method='post'>
  18.             <table border='1'>
  19.                 <tr><td>Referencia Entrada</td><td>Referencia Pedido</td><td>Referencia Material</td><td>Cantidad</td><td>Recibido</td></tr>";
  20. $i = 0 ;
  21. while ($row = mysql_fetch_row($resultado)){
  22.             echo "<tr><td><input type='hidden' name='referencia_entrada[$i]' value='".$row[0]."' />".$row[0]."</td>
  23.                       <td><input type='hidden' name='referencia_pedido[$i]' value='".$row[1]."' />".$row[1]."</td>
  24.                       <td><input type='hidden' name='referencia_material[$i]'value='".$row[2]."'/>".$row[2]."</td>
  25.                       <td><input type='hidden' name='cantidad[$i]' value='".$row[3]."'/>".$row[3]."</td>
  26.                       <td><input type='text' name='recibido'/></td>
  27.                 </tr>";$i++;
  28. }
  29. echo "</table><input type='submit' value='Actualizar'>";
  30. echo"</form><a href='menu.php'>Menu</a></body></html>";
  31.  
  32.  
  33.  
  34. require ('funciones.php');
  35.  
  36.  
  37. if(!empty ($_POST['referencia_entrada']) && !empty($_POST['recibido'])){
  38.  
  39.  
  40.     $_SESSION['referencia_entrada']=$_POST['referencia_entrada'];
  41.     $_SESSION['recibido']=$_POST['recibido'];
  42.  
  43.     if(actualizarCantidad($_SESSION['referencia_entrada'])&&($_SESSION['recibido'])){
  44.  
  45.  
  46.         echo 'Entrada actualizada correctamente<br>';
  47.  
  48.         echo '<a href="menu.php">Menú </a>';
  49.  
  50.     }else
  51.  
  52.         echo '';
  53.  
  54. }else echo '';
  55.  
  56.  
  57. ?>
funciones.php
Código PHP:
Ver original
  1. function actualizarCantidad($referencia_entrada,$recibido) {
  2.     //Comprueba si el identificador se ha introducido
  3.     if($referencia_entrada&&$recibido) {
  4.         //Se conecta a la base de datos
  5.         $enlace=conectar_bd();
  6.         //Borrar
  7.         $actualizar="UPDATE entradas SET recibido='$recibido' WHERE referencia_entrada = $referencia_entrada";
  8.         //$actualizar="UPDATE entradas SET referencia_pedido='$referencia_pedido', referencia_material='$referencia_material', cantidad='$cantidad', recibido='$recibido' WHERE referencia_entrada = $referencia_entrada AND $cantidad>$recibido";
  9.         //Realiza el borrado
  10.         $resultado=mysql_query($actualizar, $enlace);
  11.         //Cierra la conexion
  12.         mysql_close($enlace);
  13.         echo "<p>Entrada actualizada</p>";
  14.     }
  15.     else {
  16.         echo "<p>Error</p>";
  17.     }
  18. }
  #2 (permalink)  
Antiguo 25/11/2013, 02:31
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Actualizar una tabla

Primero <form name='actEntradasC' method='post'> le falta el parametro action, en el debes consignar el fichero que va a recibir y tratar los datos... (puede ser el mismo donde tienes el formulario).

if(actualizarCantidad($_SESSION['referencia_entrada'])&&($_SESSION['recibido']))

Ni esa funcion ni ese campo retornan un booleano luego ese condicional no funcionará.

Modifico la función...

Código PHP:
Ver original
  1. function boolActualizarCantidad($referencia_entrada,$recibido) {
  2.     //Comprueba si el identificador se ha introducido
  3.     if(!is_null($referencia_entrada) && !is_null($recibido)) {
  4.         //Se conecta a la base de datos, NO HACE FALTA LA CONEXION YA LA TENEMOS
  5.         //$enlace=conectar_bd();
  6.         //Borrar
  7.         $actualizar="UPDATE entradas SET recibido='$recibido' WHERE referencia_entrada = $referencia_entrada";
  8.         //$actualizar="UPDATE entradas SET referencia_pedido='$referencia_pedido', referencia_material='$referencia_material', cantidad='$cantidad', recibido='$recibido' WHERE referencia_entrada = $referencia_entrada AND $cantidad>$recibido";
  9.         //Realiza el borrado
  10.         //$resultado=mysql_query($actualizar, $enlace);
  11.         $resultado=mysql_query($actualizar);
  12.         return True;
  13.     }
  14.     else {
  15.         return False;
  16.     }
  17. }

ahora es booleana ya que retorna true o false.


Digamos que el fichero es "formulario.php"


Código PHP:
Ver original
  1. <?php
  2. //Conectar la base de datos
  3. $conectar = mysql_connect("localhost","rasty","rasty");
  4.  if (! $conectar){die ("ERROR EN LA CONEXION CON MYSQL: ".mysql_error());}
  5.  
  6. $base = mysql_select_db ("consumibles",$conectar);
  7.  if(! $base){die ("ERROR AL CONECTAR CON LA BASE DE DATOS: ".mysql_error());}
  8.  
  9. include('funciones.php');
  10.  
  11. if(!empty ($_POST['referencia_entrada']) && !empty($_POST['recibido'])){
  12.  
  13. ///Para que guardas esos datos en la session
  14. //$_SESSION['referencia_entrada']=$_POST['referencia_entrada'];
  15. //$_SESSION['recibido']=$_POST['recibido'];
  16.  
  17.  
  18.  
  19. //En la session podrias guardar la conexión por ejemplo y no ir abriendo y cerrando conexiones...
  20.  
  21.  
  22.  
  23.      if (boolActualizarCantidad($_POST['referencia_entrada'],$_POST['recibido'])){
  24.           echo '<p>Entrada actualizada correctamente</p>';
  25.     }else{
  26.           echo '<p>Error</p>';
  27.     }
  28.  
  29. }
  30.  
  31.      $sql = "SELECT * FROM entradas WHERE cantidad>recibido";
  32.      $resultado = mysql_query($sql);
  33.      echo "<html>
  34.        <h1>Actaulizar una entrada</h1>
  35.        <body>
  36.            <table border='1'>
  37.                <tr><td>Referencia Entrada</td><td>Referencia Pedido</td><td>Referencia Material</td><td>Cantidad</td><td>Recibido</td></tr>";
  38. $i = 0 ;
  39. while ($row = mysql_fetch_row($resultado)){
  40.             echo "<form id='actEntradasC".$row[0]."' name='actEntradasC".$row[0]."' method='post' action='formulario.php'>";
  41.             echo "<tr><td><input type='hidden' name='referencia_entrada' value='".$row[0]."' />".$row[0]."</td>
  42.                      <td><input type='hidden' name='referencia_pedido' value='".$row[1]."' />".$row[1]."</td>
  43.                      <td><input type='hidden' name='referencia_material' value='".$row[2]."'/>".$row[2]."</td>
  44.                      <td><input type='hidden' name='cantidad' value='".$row[3]."'/>".$row[3]."</td>
  45.                      <td><input type='text' name='recibido'/></td></tr>";
  46.              echo "<input type='submit' value='Actualizar' id='bot".$row[0]."'></form>"
  47. }
  48. echo "</table>";
  49. echo"<a href='menu.php'>Menu</a></body></html>";
  50.  
  51. //Cierra la conexion
  52.         mysql_close();
  53.        
  54.  
  55. ?>

Lo he modificado de forma que para cada referencia crea un formulario distinto ....
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Última edición por quimfv; 25/11/2013 a las 02:41
  #3 (permalink)  
Antiguo 25/11/2013, 03:24
 
Fecha de Ingreso: octubre-2013
Ubicación: Asturias
Mensajes: 52
Antigüedad: 10 años, 6 meses
Puntos: 1
Respuesta: Actualizar una tabla

Muchas gracias por tu respuesta, me ha servido de mucha ayuda.

Una cosa, al ejecutarlo, me salen tantos botones como filas tiene la consulta. Si lo saco fuera del while ya no me funciona, como puedo ponerlo?

Saludos y Gracias otra vez!
  #4 (permalink)  
Antiguo 25/11/2013, 05:01
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Actualizar una tabla

Si saca un boton para cada formulario y hay un formulario para cada referencia.... si lo sacas del while el boton que queda no sabe que referencia esta mandando.

Tienes 3 opciones:

- modificar la apareiencia del boton para que sea esteticamente agradable y mantener esta logica.

- asociar al onBlur del input "recibido" una función que mande el formulario (manda(this.form)), quizas con un confirm, y omitir los botones.

- Cambiar totalmente la estrategia y trabajar con arrays para ir guardando todas las referencias que se cambien y mandarlas todas con un solo botón...(referencia y recibido)...
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #5 (permalink)  
Antiguo 25/11/2013, 05:15
 
Fecha de Ingreso: octubre-2013
Ubicación: Asturias
Mensajes: 52
Antigüedad: 10 años, 6 meses
Puntos: 1
Respuesta: Actualizar una tabla

Muchas gracias por responder otra vez, veré cual escojo de las tres. Ah, añadí otra columna mas (pendiente en lugar de recibido) y ahora voy a ver como puedo hacerlo para que sumen

Cantidad = Recibido + Pendiente

Cantidad es lo que pedí, recibido lo que recibí(si recibí todo lo que pedía queda igual) y pendiente que es lo que me falta por recibir.

Saludos

Etiquetas: html, mysql, select, sql, tabla
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




La zona horaria es GMT -6. Ahora son las 09:46.