Foros del Web » Programando para Internet » PHP »

actualizar un valor de un registro con el mismo id

Estas en el tema de actualizar un valor de un registro con el mismo id en el foro de PHP en Foros del Web. Hola que tal pues aqui de nuevo pidiendo ayuda tengo la siguiente cuestion necesito actualizar o modificar un valor a un registro el cual tiene ...
  #1 (permalink)  
Antiguo 07/09/2011, 00:03
 
Fecha de Ingreso: marzo-2011
Ubicación: Victoria,Mexico
Mensajes: 45
Antigüedad: 13 años, 7 meses
Puntos: 0
actualizar un valor de un registro con el mismo id

Hola que tal pues aqui de nuevo pidiendo ayuda tengo la siguiente cuestion necesito actualizar o modificar un valor a un registro el cual tiene el mismo id pero diferente informacion por ejemplo

id -----nombre-----departamento------sueldo
1 juan Informatica 100
1 juan Contabilidad 200

quiero que al actualizar el pago del departamento lacteos en juan no me cambien los 2 registros ya que si hago el update me los pone igual..

use la siguiente instruccion SQL para evitar eso pero la bronca es que ahora no actualiza nada

UPDATE empleados SET sueldo='$sueldo' WHERE idempleado=$idempleado AND departamento='$departamento'

no me actualiza el codigo lo saque de un ejemplo y ahora mi duda no se si sea bronca de php o ajax ya que usa ajax adjunto el codigo

Código AJAX:
Ver original
  1. //Desarrollado por Jesus Liñán
  2. //ribosomatic.com
  3. //Puedes hacer lo que quieras con el código
  4. //pero visita la web cuando te acuerdes
  5.  
  6. function objetoAjax(){
  7.     var xmlhttp=false;
  8.     try {
  9.         xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
  10.     } catch (e) {
  11.         try {
  12.            xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
  13.         } catch (E) {
  14.             xmlhttp = false;
  15.         }
  16.     }
  17.  
  18.     if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
  19.         xmlhttp = new XMLHttpRequest();
  20.     }
  21.     return xmlhttp;
  22. }
  23.  
  24. function enviarDatosEmpleado(){
  25.     //donde se mostrará lo resultados
  26.     divResultado = document.getElementById('resultado');
  27.     divFormulario = document.getElementById('formulario');
  28.     //valores de los inputs
  29.     id=document.frmempleado.idempleado.value;
  30.     nom=document.frmempleado.nombres.value;
  31.     dep=document.frmempleado.departamento.value;
  32.     suel=document.frmempleado.sueldo.value;
  33.    
  34.     //instanciamos el objetoAjax
  35.     ajax=objetoAjax();
  36.     //usando del medoto POST
  37.     //archivo que realizará la operacion
  38.     //actualizacion.php
  39.     ajax.open("POST", "actualizacion.php",true);
  40.     ajax.onreadystatechange=function() {
  41.         if (ajax.readyState==4) {
  42.             //mostrar los nuevos registros en esta capa
  43.             divResultado.innerHTML = ajax.responseText
  44.             //mostrar un mensaje de actualizacion correcta
  45.             divFormulario.innerHTML = "<p style=\"border:1px solid red; width:400px;\">La actualizaci&oacute;n se realiz&oacute; correctamente</p>";
  46.         }
  47.     }
  48.     //muy importante este encabezado ya que hacemos uso de un formulario
  49.     ajax.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
  50.     //enviando los valores
  51.     ajax.send("idempleado="+id+"&nombres="+nom+"&departamento="+dep+"&sueldo="+suel)
  52. }
  53.  
  54. function pedirDatos(idempleado){
  55.     //donde se mostrará el formulario con los datos
  56.     divFormulario = document.getElementById('formulario');
  57.    
  58.     //instanciamos el objetoAjax
  59.     ajax=objetoAjax();
  60.     //uso del medotod GET
  61.     ajax.open("POST", "consulta_por_id.php");
  62.     ajax.onreadystatechange=function() {
  63.         if (ajax.readyState==4) {
  64.             //mostrar resultados en esta capa
  65.             divFormulario.innerHTML = ajax.responseText
  66.             //mostrar el formulario
  67.             divFormulario.style.display="block";
  68.         }
  69.     }
  70.     //como hacemos uso del metodo GET
  71.     //colocamos null
  72.     ajax.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
  73.     //enviando los valores
  74.     ajax.send("idemp="+idempleado)
  75. }

CONSULTA.PHP
Código PHP:
Ver original
  1. <?php
  2. //Desarrollado por Jesus Liñán
  3. //ribosomatic.com
  4. //Puedes hacer lo que quieras con el código
  5. //pero visita la web cuando te acuerdes
  6.  
  7. //Configuracion de la conexion a base de datos
  8. $bd_host = "localhost";
  9. $bd_usuario = "root";
  10. $bd_password = "root";
  11. $bd_base = "empleados";
  12. $con = mysql_connect($bd_host, $bd_usuario, $bd_password);
  13. mysql_select_db($bd_base, $con);
  14.  
  15. //consulta todos los empleados
  16.  
  17. $sql=mysql_query("SELECT * FROM empleados",$con);
  18.  
  19. //muestra los datos consultados
  20. //haremos uso de tabla para tabular los resultados
  21. ?>
  22. <table style="border:1px solid #FF0000; color:#000099;width:400px;">
  23. <tr style="background:#99CCCC;">
  24.     <td>Codigo</td>
  25.     <td>Nombres</td>
  26.     <td>Departamento</td>
  27.     <td>Sueldo</td>
  28. </tr>
  29.  
  30. <?php
  31. while($row = mysql_fetch_array($sql)){
  32.     echo "  <tr>";
  33.     //mediante el evento onclick llamaremos a la funcion PedirDatos(), la cual tiene como parametro
  34.     //de entrada el ID del empleado
  35.     echo "      <td><a style=\"text-decoration:underline;cursor:pointer;\" onclick=\"pedirDatos('".$row['idempleado']."')\">".$row['idempleado']."</a></td>";
  36.     echo "      <td>".$row['nombres']."</td>";
  37.     echo "      <td>".$row['departamento']."</td>";
  38.     echo "      <td>".$row['sueldo']."</td>";
  39.     echo "  </tr>";
  40. }
  41. ?>
  42. </table>

ACTUALIZACION.PHP
Código PHP:
Ver original
  1. <?php
  2. //Desarrollado por Jesus Liñán
  3. //ribosomatic.com
  4. //Puedes hacer lo que quieras con el código
  5. //pero visita la web cuando te acuerdes
  6.  
  7. //Configuracion de la conexion a base de datos
  8. $bd_host = "localhost";
  9. $bd_usuario = "root";
  10. $bd_password = "root";
  11. $bd_base = "empleados";
  12. $con = mysql_connect($bd_host, $bd_usuario, $bd_password);
  13. mysql_select_db($bd_base, $con);
  14.  
  15. //variables POST
  16. $idemp=$_POST['idempleado'];
  17. $nom=$_POST['nombres'];
  18. $dep=$_POST['departamento'];
  19. $suel=$_POST['sueldo'];
  20.  
  21. //actualiza los datos del empleados
  22. $sql="UPDATE empleados SET  sueldo='$suel' WHERE idempleado=$idemp AND departamento='Contabilidad'";
  23.  
  24. mysql_query($sql,$con);
  25.  
  26. include('consulta.php');
  27. ?>

CONSULTA POR ID.PHP
Código PHP:
Ver original
  1. <?php
  2. //Desarrollado por Jesus Liñán
  3. //ribosomatic.com
  4. //Puedes hacer lo que quieras con el código
  5. //pero visita la web cuando te acuerdes
  6.  
  7. //Configuracion de la conexion a base de datos
  8. $bd_host = "localhost";
  9. $bd_usuario = "root";
  10. $bd_password = "root";
  11. $bd_base = "empleados";
  12. $con = mysql_connect($bd_host, $bd_usuario, $bd_password);
  13. mysql_select_db($bd_base, $con);
  14.  
  15. //consulta los datos del empleado por su id
  16. $idemp=$_POST['idemp'];
  17.  
  18. $sql=mysql_query("SELECT * FROM empleados WHERE idempleado=$idemp",$con);
  19.  
  20. $row = mysql_fetch_array($sql);
  21.  
  22. //valores de las consultas
  23. $nom=$row['nombres'];
  24. $dep=$row['departamento'];
  25. $suel=$row['sueldo'];
  26.  
  27. //muestra los datos consultados en los campos del formulario
  28. ?>
  29. <form name="frmempleado" action=""
  30. onsubmit="enviarDatosEmpleado(); return false">
  31.     <input name="idempleado" type="hidden" value="<?php echo $idemp; ?>" />
  32.   <p>Nombres
  33.     <input name="nombres" type="text" value="<?php echo $nom; ?>" />
  34.   </p>
  35.   <p>Departamento
  36.     <select name="departamento">
  37.       <?php
  38.       echo "<option value=\"".$dep."\">".$dep."</option>"
  39.       ?>
  40.       <option value="Informatica">Informatica</option>
  41.       <option value="Contabilidad">Contabilidad</option>
  42.       <option value="Administracion">Administracion</option>
  43.       <option value="Logistica">Logistica</option>
  44.     </select>
  45.   </p>
  46.   <p>Sueldo <strong>S/.</strong>
  47.     <input name="sueldo" type="text" value="<?php echo $suel; ?>" />
  48.   </p>
  49.   <p>
  50.     <input type="submit" name="Submit" value="Actualizar" />
  51.   </p>
  52. </form>

esos son los mas importantes ya que los otros son para que aarezca todo, espero me puedan que hacer saludos
  #2 (permalink)  
Antiguo 07/09/2011, 00:48
Avatar de Raziel_Ravenheart  
Fecha de Ingreso: agosto-2011
Ubicación: Ibagué, Tolima
Mensajes: 192
Antigüedad: 13 años, 2 meses
Puntos: 37
Respuesta: actualizar un valor de un registro con el mismo id

En este caso,... creo que lo más conveniente sería que modificaras la base de datos, por que? muy sencillo, digamos que por ahora tienes a juan de informatica y a juan de contabilidad, pero cuando alguien esté ingresando datos puede escribir el nombre del departamento como se le venga en gana, es decir;

Dep.inf
Info.
Informatica
informática
infor
depto.Sistemas
contabilidad
cont
depto.cont

y al hacer esto. la integridad de la base de datos se vería comprometida, en el momento en que hayan varios funcionarios de un mismo departamento y todos tengan diferente el nombre del departamento, como en el ejemplo anterior. Para evitar esto, es mejor categorizar los departamentos, creando una tabla aparte para estos, por muy pocos que sean es lo más aconsejable. en donde tendrías una tabla con dos campos idDepartamento y nomDepartamento, luego, en el campo de la base de datos donde tienes departamento, lo cambias por idDepartamento y haces una relacion con llave foránea.

Cual es el truco aquí? muy sencillo, una vez creada la llave foránea, puedes crear una llave principal compuesta, donde suponiendo que los idDepartamento sean:

idDepartamento nomDepartamento
1 Informatica
2 Contabilidad
3 Cartera

la tabla de funcionarios te quedaría algo como

id -----nombre-----idDepartamento------sueldo
1 - juan - 1 - 100
1 - juan - 2 - 200

y con base en esto puedes armar una llave principal compuesta para esta tabla, donde sus partes serían id e idDepartamento, de este modo pueden existir dos registros con id=1, pero como la llave compuesta también necesita del idDepartamento, no habrá conflicto, y te ahorras cualquier error que provenga de escribir mal los nombres de los departamentos, además que ahora tendrá un nivel más de normalización una parte de tu base de datos, lo cual la puede hacer más fácil de mantener en una futura mejora.

Por otro lado revisando tu código no he visto nada mal... pero déjame le hecho otra ojeada a ver que encuentro, pero prefiero que vayas considerando hacer los cambios que te acabo de escribir.

Ten cuidado que en el archivo "ACTUALIZACION.PHP", estoy observando que en la línea 23, tienes estático el nombre de "Contabilidad", cuando en este caso debería ir la variable $dep. O es posible que lo tengas ahí intencionalmente.

Un consejo que te doy a la hora de hacer las consultas es el siguiente, siempre que puedas utiliza comillas sencillas, por que las comillas dobles le indican al motor de php que debe buscar variables que procesar, y esto no es aconsejable cuando son muchas. En este caso no creo que haya mucho problema, pero en una futura aplicación donde se hagan cientos de consultas de esta manera, puede representar una baja en el rendimiento. Un ejemplo con comillas sencilas sería

Código PHP:
Ver original
  1. $sql = 'UPDATE empleados SET  sueldo='.$suel.' WHERE idEmpleado='.$idemp.' AND departamento='.$dep;

Última edición por Raziel_Ravenheart; 07/09/2011 a las 01:06 Razón: corregir respuesta
  #3 (permalink)  
Antiguo 07/09/2011, 11:06
 
Fecha de Ingreso: marzo-2011
Ubicación: Victoria,Mexico
Mensajes: 45
Antigüedad: 13 años, 7 meses
Puntos: 0
Respuesta: actualizar un valor de un registro con el mismo id

efectivamente gracias por el consejo y separe empleados ydepartamentos con una tabla que las relaciona y la llame emple_dep en donde envio los puros id´s de cada cosa para poder trabajar la actualizacion mas fiable la tabla se llama

emple_dep tiene campos

id_empleado | id_departamento | sueldo
0001 (juan) 0001 (lacteos) 100
0001 (juan) 0002 (abarrotes) 200

y ya me modifica por separado usando la instruccion que pusiste pero ahora tengo una bronquilla, cada vez que quiero cambiar ese valor me toma el primer registro del mismo id y no puedo elegir el 2 registro

puedo cambiar 100 sin alterar el 200 pero no me deja seleccionar el de 200

que sera??

Última edición por davidmrtnz413; 07/09/2011 a las 11:08 Razón: me equivoque ups sorry saludos
  #4 (permalink)  
Antiguo 07/09/2011, 11:21
 
Fecha de Ingreso: agosto-2010
Ubicación: Detrás de Tí
Mensajes: 162
Antigüedad: 14 años, 3 meses
Puntos: 3
Respuesta: actualizar un valor de un registro con el mismo id

¿podrías postear la consulta sql que usas? ¿Cómo la editaste?
  #5 (permalink)  
Antiguo 07/09/2011, 14:24
 
Fecha de Ingreso: marzo-2011
Ubicación: Victoria,Mexico
Mensajes: 45
Antigüedad: 13 años, 7 meses
Puntos: 0
Respuesta: actualizar un valor de un registro con el mismo id

Cita:
Iniciado por oXImLinkXo Ver Mensaje
¿podrías postear la consulta sql que usas? ¿Cómo la editaste?

Código PHP:
Ver original
  1. $sql="UPDATE emple_dep SET sueldo='$sueldo' WHERE id_empleado=$id_empleado AND id_departamento='$departamento'";

aqui esta la consulta en donde para poder hacerlo en el formulario donde actualizo hice que en un label me sacara el id_departamento y me lo tomara con la variable departamento para que comprebe que el id_empleado y id_departamento fueran iguales ya que lometi primero de esta manera

Código PHP:
Ver original
  1. $sql="UPDATE emple_dep SET sueldo='$sueldo' WHERE id_empleado=$id_empleado AND id_departamento='$id_departamento'";

y no me funciono no actualizaba ni nada y no se a que por que
saludos

Etiquetas: diferentes, ids, iguales, registos, actualizaciones
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 18:08.