Foros del Web » Programando para Internet » PHP »

Cómo actualizo sólo algunos campos?

Estas en el tema de Cómo actualizo sólo algunos campos? en el foro de PHP en Foros del Web. Hola. Tengo unos datos de un form que envío por post y actualizo una tabla en mi base de datos. Este form tiene los siguientes ...
  #1 (permalink)  
Antiguo 31/03/2013, 12:37
 
Fecha de Ingreso: junio-2012
Ubicación: Santiago, Chile
Mensajes: 20
Antigüedad: 11 años, 10 meses
Puntos: 0
Cómo actualizo sólo algunos campos?

Hola. Tengo unos datos de un form que envío por post y actualizo una tabla en mi base de datos. Este form tiene los siguientes campos:

campo1 textbox
campo2 combobox
campo3 combobox

Mi problema es que el usuario debería poder hacer cambios sólo en un campo, ej campo 1, y el campo 2 y 3 dejarlos tal cual. Pero si la base de datos ya tenía datos en el campo 2 y 3 los pierdo.

Creo que tengo que validar si los campos tienen datos, que actualice, pero no me sale. Este es el código del update:

Código PHP:
if ((isset($_POST["MM_update"]))  &&($_POST["MM_update"] == "form1")) {
  
$updateSQL sprintf("UPDATE mitabla SET campo1=%s, campo2=%s, campo3=%s, PRIMERA_CONSULTA_RRLL=%s, PRIMERA_RESPUESTA_RRLL=%s, ULTIMA_CONSULTA_RRLL=%s, ULTIMA_RESPUESTAS_RRLL=%s, TIEMPO_TOTAL_CASO=%s, TIEMPO_TOTAL_REGION=%s, TIEMPO_TOTAL_RRLL=%s, CIERRE_REGION=%s, TIPO_INVESTIGACION=%s, MATERIA=%s, ESTADO=%s, SANCION=%s, TIPOSANCION=%s, SINSANCION=%s, MOTIVODESPIDO=%s, JARDIN=%s, OBSERVACIONES=%s WHERE ID_HECHO=%s",
                       
GetSQLValueString($_POST['campo1'], "text"),
                       
GetSQLValueString($_POST['campo2'], "text"),
                       
GetSQLValueString($_POST['campo3'], "text"),

  
mysql_select_db($database_conex$conex);
  
$Result1 mysql_query($updateSQL$conex) or die(mysql_error());

  
$updateGoTo "mipagina.php";
  if (isset(
$_SERVER['QUERY_STRING'])) {
    
$updateGoTo .= (strpos($updateGoTo'?')) ? "&" "?";
    
$updateGoTo .= $_SERVER['QUERY_STRING'];
  }
  
header(sprintf("Location: %s"$updateGoTo));

  #2 (permalink)  
Antiguo 31/03/2013, 20:31
MCF
 
Fecha de Ingreso: marzo-2008
Mensajes: 126
Antigüedad: 16 años, 2 meses
Puntos: 4
Respuesta: Cómo actualizo sólo algunos campos?

El problema es que en tu query le dices que actualice los 3 campos, cuando debería ser algo como:

Código MySQL:
Ver original
  1. UPDATE mi tabla SET campo1=%s, PRIMERA_CONSULTA_RRLL=%s ...

los demás campos supongo que si los quieres actualizar así que pues esos si los dejas, pero al poner los 3 campos en la misma consulta los actualizará los 3, lo que yo te recomendaría es que cheques cual es el que se editó y ya después dependiendo de eso le dices en la consulta cuál es el que va a actualizar
  #3 (permalink)  
Antiguo 01/04/2013, 09:22
 
Fecha de Ingreso: junio-2012
Ubicación: Santiago, Chile
Mensajes: 20
Antigüedad: 11 años, 10 meses
Puntos: 0
Respuesta: Cómo actualizo sólo algunos campos?

Cita:
Iniciado por MCF Ver Mensaje
El problema es que en tu query le dices que actualice los 3 campos, cuando debería ser algo como:

Código MySQL:
Ver original
  1. UPDATE mi tabla SET campo1=%s, PRIMERA_CONSULTA_RRLL=%s ...

los demás campos supongo que si los quieres actualizar así que pues esos si los dejas, pero al poner los 3 campos en la misma consulta los actualizará los 3, lo que yo te recomendaría es que cheques cual es el que se editó y ya después dependiendo de eso le dices en la consulta cuál es el que va a actualizar
Gracias por tu respuesta!.

Lo que no sé como hacer es chequear cuál campo cambió.
Cómo lo chequeo?

Intenté hacerlo asi:

Puse un if antes del update pero no funcionó:

Código PHP:
if ( (!empty($campo1)) OR (!empty($campo2))  ) { 
Aprovecho de aclarar que estos campos no van, se me fueron: PRIMERA_CONSULTA_RRLL=%s, PRIMERA_RESPUESTA_RRLL=%s,, etc etc etc
  #4 (permalink)  
Antiguo 01/04/2013, 10:55
 
Fecha de Ingreso: abril-2008
Ubicación: El Salvador
Mensajes: 736
Antigüedad: 16 años
Puntos: 47
Respuesta: Cómo actualizo sólo algunos campos?

Mira para empezar si el usuario nada mas podra cambiar el campo1 entonces empieza por limitarlo y no dejarlo editar el resto de campos, si no es necesario ni le muestres esa información, pero si quieres puedes mostrarsela unicamente como contenido no como campos editables, recuerda que tu decides que puede editar y que no...
  #5 (permalink)  
Antiguo 01/04/2013, 11:29
 
Fecha de Ingreso: junio-2012
Ubicación: Santiago, Chile
Mensajes: 20
Antigüedad: 11 años, 10 meses
Puntos: 0
Respuesta: Cómo actualizo sólo algunos campos?

Cita:
Iniciado por alex1084 Ver Mensaje
Mira para empezar si el usuario nada mas podra cambiar el campo1 entonces empieza por limitarlo y no dejarlo editar el resto de campos, si no es necesario ni le muestres esa información, pero si quieres puedes mostrarsela unicamente como contenido no como campos editables, recuerda que tu decides que puede editar y que no...
Hola! gracias por responder.

Lo que pasa es que el usuario puede cambiar sólo un campo o todos, es opción de él. Por eso estoy complicado, ya que al enviar el form por post, pasa por el Update de la consulta y actualiza todo. Entonces, si el usuario cambia el campo1 y el campo 2 y 3 no les hace nada, al enviarlo por update tomará el valor cero o null que se envía, y si anteriormente ya tenía datos en la base de datos, pierdo ese último dato y lo actualiza a null.
  #6 (permalink)  
Antiguo 01/04/2013, 11:42
 
Fecha de Ingreso: abril-2008
Ubicación: El Salvador
Mensajes: 736
Antigüedad: 16 años
Puntos: 47
Respuesta: Cómo actualizo sólo algunos campos?

ok mira pero entonces ordena tu codigo porque por ejemplo soy el usuario y tu me permites que cambien el campo1 campo2 y campo3 lo menos que tu debes hacer es capturar dicha informacion y actualizarla, pero si cuando recibes los datos solo recibes el campo1 y en la consulta mandas a hacer update a todos los campos claro que te va perder la informacion....
  #7 (permalink)  
Antiguo 01/04/2013, 11:48
 
Fecha de Ingreso: junio-2012
Ubicación: Santiago, Chile
Mensajes: 20
Antigüedad: 11 años, 10 meses
Puntos: 0
Respuesta: Cómo actualizo sólo algunos campos?

Cita:
Iniciado por alex1084 Ver Mensaje
ok mira pero entonces ordena tu codigo porque por ejemplo soy el usuario y tu me permites que cambien el campo1 campo2 y campo3 lo menos que tu debes hacer es capturar dicha informacion y actualizarla, pero si cuando recibes los datos solo recibes el campo1 y en la consulta mandas a hacer update a todos los campos claro que te va perder la informacion....
Entonces tengo que hacer el update campo por campo? para no perder la información en la base de datos del campo que no se va a actualizar?
  #8 (permalink)  
Antiguo 01/04/2013, 11:51
 
Fecha de Ingreso: abril-2008
Ubicación: El Salvador
Mensajes: 736
Antigüedad: 16 años
Puntos: 47
Respuesta: Cómo actualizo sólo algunos campos?

estas ocupando este codigo???

Código PHP:
Ver original
  1. if ((isset($_POST["MM_update"]))  &&($_POST["MM_update"] == "form1")) {
  2.   $updateSQL = sprintf("UPDATE mitabla SET campo1=%s, campo2=%s, campo3=%s, PRIMERA_CONSULTA_RRLL=%s, PRIMERA_RESPUESTA_RRLL=%s, ULTIMA_CONSULTA_RRLL=%s, ULTIMA_RESPUESTAS_RRLL=%s, TIEMPO_TOTAL_CASO=%s, TIEMPO_TOTAL_REGION=%s, TIEMPO_TOTAL_RRLL=%s, CIERRE_REGION=%s, TIPO_INVESTIGACION=%s, MATERIA=%s, ESTADO=%s, SANCION=%s, TIPOSANCION=%s, SINSANCION=%s, MOTIVODESPIDO=%s, JARDIN=%s, OBSERVACIONES=%s WHERE ID_HECHO=%s",
  3.                        GetSQLValueString($_POST['campo1'], "text"),
  4.                        GetSQLValueString($_POST['campo2'], "text"),
  5.                        GetSQLValueString($_POST['campo3'], "text"),
  6.  
  7.   mysql_select_db($database_conex, $conex);
  8.   $Result1 = mysql_query($updateSQL, $conex) or die(mysql_error());
  9.  
  10.   $updateGoTo = "mipagina.php";
  11.   if (isset($_SERVER['QUERY_STRING'])) {
  12.     $updateGoTo .= (strpos($updateGoTo, '?')) ? "&" : "?";
  13.     $updateGoTo .= $_SERVER['QUERY_STRING'];
  14.   }
  15.   header(sprintf("Location: %s", $updateGoTo));
  16. }

Porque si te fijas ahi mandas actualizar muchos campos, por lo tanto debes de recibir toda la informacion....
  #9 (permalink)  
Antiguo 01/04/2013, 11:57
 
Fecha de Ingreso: junio-2012
Ubicación: Santiago, Chile
Mensajes: 20
Antigüedad: 11 años, 10 meses
Puntos: 0
Respuesta: Cómo actualizo sólo algunos campos?

Cita:
Iniciado por alex1084 Ver Mensaje
estas ocupando este codigo???

Código PHP:
Ver original
  1. if ((isset($_POST["MM_update"]))  &&($_POST["MM_update"] == "form1")) {
  2.   $updateSQL = sprintf("UPDATE mitabla SET campo1=%s, campo2=%s, campo3=%s, PRIMERA_CONSULTA_RRLL=%s, PRIMERA_RESPUESTA_RRLL=%s, ULTIMA_CONSULTA_RRLL=%s, ULTIMA_RESPUESTAS_RRLL=%s, TIEMPO_TOTAL_CASO=%s, TIEMPO_TOTAL_REGION=%s, TIEMPO_TOTAL_RRLL=%s, CIERRE_REGION=%s, TIPO_INVESTIGACION=%s, MATERIA=%s, ESTADO=%s, SANCION=%s, TIPOSANCION=%s, SINSANCION=%s, MOTIVODESPIDO=%s, JARDIN=%s, OBSERVACIONES=%s WHERE ID_HECHO=%s",
  3.                        GetSQLValueString($_POST['campo1'], "text"),
  4.                        GetSQLValueString($_POST['campo2'], "text"),
  5.                        GetSQLValueString($_POST['campo3'], "text"),
  6.  
  7.   mysql_select_db($database_conex, $conex);
  8.   $Result1 = mysql_query($updateSQL, $conex) or die(mysql_error());
  9.  
  10.   $updateGoTo = "mipagina.php";
  11.   if (isset($_SERVER['QUERY_STRING'])) {
  12.     $updateGoTo .= (strpos($updateGoTo, '?')) ? "&" : "?";
  13.     $updateGoTo .= $_SERVER['QUERY_STRING'];
  14.   }
  15.   header(sprintf("Location: %s", $updateGoTo));
  16. }

Porque si te fijas ahi mandas actualizar muchos campos, por lo tanto debes de recibir toda la informacion....
Ese codigo era solo un ejemplo (mal ejemplo jaja).
Este es el código originalñ que estoy ocupando en el update:

Código PHP:
if ((isset($_POST["MM_update"]))  &&($_POST["MM_update"] == "form1")) {
  
$updateSQL sprintf("UPDATE hecho SET REGION=%s, FECHA_HECHO=%s, FECHA_CONOCIMIENTO=%s, PRIMERA_CONSULTA_RRLL=%s, PRIMERA_RESPUESTA_RRLL=%s, ULTIMA_CONSULTA_RRLL=%s, ULTIMA_RESPUESTAS_RRLL=%s, TIEMPO_TOTAL_CASO=%s, TIEMPO_TOTAL_REGION=%s, TIEMPO_TOTAL_RRLL=%s, CIERRE_REGION=%s, TIPO_INVESTIGACION=%s, MATERIA=%s, ESTADO=%s, SANCION=%s, TIPOSANCION=%s, SINSANCION=%s, MOTIVODESPIDO=%s, JARDIN=%s, OBSERVACIONES=%s WHERE ID_HECHO=%s",
                       
GetSQLValueString($_POST['REGION'], "text"),
                       
GetSQLValueString($_POST['FECHA_HECHO'], "date"),
                       
GetSQLValueString($_POST['FECHA_CONOCIMIENTO'], "date"),
                       
GetSQLValueString($_POST['PRIMERA_CONSULTA_RRLL'], "date"),
                       
GetSQLValueString($_POST['PRIMERA_RESPUESTA_RRLL'], "date"),
                       
GetSQLValueString($_POST['ULTIMA_CONSULTA_RRLL'], "date"),
                       
GetSQLValueString($_POST['ULTIMA_RESPUESTAS_RRLL'], "date"),
                       
GetSQLValueString($_POST['TIEMPO_TOTAL_CASO'], "date"),
                       
GetSQLValueString($_POST['TIEMPO_TOTAL_REGION'], "date"),
                       
GetSQLValueString($_POST['TIEMPO_TOTAL_RRLL'], "date"),
                       
GetSQLValueString($_POST['CIERRE_REGION'], "date"),
                       
GetSQLValueString($_POST['TIPO_INVESTIGACION'], "text"),
                       
GetSQLValueString($_POST['MATERIA'], "text"),
                       
GetSQLValueString($_POST['ESTADO'], "text"),
                       
GetSQLValueString($_POST['SANCION'], "text"),
                       
GetSQLValueString($_POST['TIPOSANCION'], "text"),
                       
GetSQLValueString($_POST['SINSANCION'], "text"),
                       
GetSQLValueString($_POST['MOTIVODESPIDO'], "text"),
                       
GetSQLValueString($_POST['JARDIN'], "text"),
                       
GetSQLValueString($_POST['OBSERVACIONES'], "text"),
                       
GetSQLValueString($_POST['ID_HECHO'], "int"));
                       

  
mysql_select_db($database_conex$conex);
  
$Result1 mysql_query($updateSQL$conex) or die(mysql_error());

  
$updateGoTo "ingresohechos.php";
  if (isset(
$_SERVER['QUERY_STRING'])) {
    
$updateGoTo .= (strpos($updateGoTo'?')) ? "&" "?";
    
$updateGoTo .= $_SERVER['QUERY_STRING'];
  }
  
header(sprintf("Location: %s"$updateGoTo));

Sé que estoy mandando tooodo a actualizar, pero no me ha resultado poder actualizar solo los campos que modifica el usuario en el form.
Y de verdad, muchas gracias por tus respuestas.
  #10 (permalink)  
Antiguo 01/04/2013, 12:04
 
Fecha de Ingreso: abril-2008
Ubicación: El Salvador
Mensajes: 736
Antigüedad: 16 años
Puntos: 47
Respuesta: Cómo actualizo sólo algunos campos?

mmm ok

Si tu muestras un formulario y el usuario podra editar toda la informacion del formulario es correcto que mandes a actualizar todos los campos que le usuario tenga capacidad de modificar..

Ahora hay que ver que la consulta lleve los datos que se supone debe llevar, para esto antes de hacer ejecutar la consulta imprime la variable $updateSQL, asi podras asegurarte que lleva los datos correctos....

antes de esto

Código PHP:
Ver original
  1. mysql_select_db($database_conex, $conex);
  2.   $Result1 = mysql_query($updateSQL, $conex) or die(mysql_error());
  3.  
  4.   $updateGoTo = "ingresohechos.php";
  5.   if (isset($_SERVER['QUERY_STRING'])) {
  6.     $updateGoTo .= (strpos($updateGoTo, '?')) ? "&" : "?";
  7.     $updateGoTo .= $_SERVER['QUERY_STRING'];
  8.   }
  9.   header(sprintf("Location: %s", $updateGoTo));
  10. }

manda un

Código PHP:
Ver original
  1. echo $updateSQL;

Y comprueba que lleva toda la informacion del formulario..
  #11 (permalink)  
Antiguo 01/04/2013, 12:09
 
Fecha de Ingreso: junio-2012
Ubicación: Santiago, Chile
Mensajes: 20
Antigüedad: 11 años, 10 meses
Puntos: 0
Respuesta: Cómo actualizo sólo algunos campos?

Cita:
Iniciado por alex1084 Ver Mensaje
mmm ok

Si tu muestras un formulario y el usuario podra editar toda la informacion del formulario es correcto que mandes a actualizar todos los campos que le usuario tenga capacidad de modificar..

Ahora hay que ver que la consulta lleve los datos que se supone debe llevar, para esto antes de hacer ejecutar la consulta imprime la variable $updateSQL, asi podras asegurarte que lleva los datos correctos....

antes de esto

Código PHP:
Ver original
  1. mysql_select_db($database_conex, $conex);
  2.   $Result1 = mysql_query($updateSQL, $conex) or die(mysql_error());
  3.  
  4.   $updateGoTo = "ingresohechos.php";
  5.   if (isset($_SERVER['QUERY_STRING'])) {
  6.     $updateGoTo .= (strpos($updateGoTo, '?')) ? "&" : "?";
  7.     $updateGoTo .= $_SERVER['QUERY_STRING'];
  8.   }
  9.   header(sprintf("Location: %s", $updateGoTo));
  10. }

manda un

Código PHP:
Ver original
  1. echo $updateSQL;

Y comprueba que lleva toda la informacion del formulario..

Ok, lo hice y lleva toda la información... y toda la información se actualiza en la base de datos...
  #12 (permalink)  
Antiguo 01/04/2013, 12:13
 
Fecha de Ingreso: abril-2008
Ubicación: El Salvador
Mensajes: 736
Antigüedad: 16 años
Puntos: 47
Respuesta: Cómo actualizo sólo algunos campos?

Y eso es correcto???
  #13 (permalink)  
Antiguo 01/04/2013, 12:18
 
Fecha de Ingreso: junio-2012
Ubicación: Santiago, Chile
Mensajes: 20
Antigüedad: 11 años, 10 meses
Puntos: 0
Respuesta: Cómo actualizo sólo algunos campos?

Cita:
Iniciado por alex1084 Ver Mensaje
Y eso es correcto???

No, no es correcto, porque me muestra tambien los "null" o nada en los campos que no modifico o agrego información...
  #14 (permalink)  
Antiguo 01/04/2013, 13:29
 
Fecha de Ingreso: abril-2008
Ubicación: El Salvador
Mensajes: 736
Antigüedad: 16 años
Puntos: 47
Respuesta: Cómo actualizo sólo algunos campos?

Cita:
Iniciado por deepdesign Ver Mensaje
Ok, lo hice y lleva toda la información... y toda la información se actualiza en la base de datos...
Mira si dices que lleva toda la información no debería dejarte los campos vacíos, cuando dije que imprimieras la consulta era justamente para ver que enverdad la consulta lleva la información de los campos....
  #15 (permalink)  
Antiguo 01/04/2013, 16:13
 
Fecha de Ingreso: abril-2013
Mensajes: 1
Antigüedad: 11 años, 1 mes
Puntos: 0
Respuesta: Cómo actualizo sólo algunos campos?

que tal soy nuevo pero me gustaria opinar, si usas inputs, porque no ocultas las cajas de texto que no quieres que el usuario modifique, mas sin embargo carga los valores anteriores en esos inputs ocultos, de esa forma cuando se envie el formulario tmb estaras enviando esos valores aunque solo actualice los demas, yo lo eh hecho mas o menos de esta forma:

<input type="$variablePermiso" value="$infoBD" name="caja1" />

donde la $variablePermiso debe tomar 2 datos, si tiene permiso deberia ser TEXT, y si no tiene permiso deberia ser HIDDEN, y en value se debe imprimir siempre el valor que ya se le habia asignado, de esta forma aunque el no vea el campo, este se actualiza con el ultimo valor otorgado, espero ser de ayuda !!

----

Saludos !!
George_GmEs
  #16 (permalink)  
Antiguo 01/04/2013, 16:17
 
Fecha de Ingreso: abril-2008
Ubicación: El Salvador
Mensajes: 736
Antigüedad: 16 años
Puntos: 47
Respuesta: Cómo actualizo sólo algunos campos?

Cita:
Iniciado por sistemas_medix Ver Mensaje
que tal soy nuevo pero me gustaria opinar, si usas inputs, porque no ocultas las cajas de texto que no quieres que el usuario modifique, mas sin embargo carga los valores anteriores en esos inputs ocultos, de esa forma cuando se envie el formulario tmb estaras enviando esos valores aunque solo actualice los demas, yo lo eh hecho mas o menos de esta forma:

<input type="$variablePermiso" value="$infoBD" name="caja1" />

donde la $variablePermiso debe tomar 2 datos, si tiene permiso deberia ser TEXT, y si no tiene permiso deberia ser HIDDEN, y en value se debe imprimir siempre el valor que ya se le habia asignado, de esta forma aunque el no vea el campo, este se actualiza con el ultimo valor otorgado, espero ser de ayuda !!

----

Saludos !!
George_GmEs

Hola bienvenido al foro, mira lo que tu dices no es tan practico ya que como el dice el usuario debe tener la opcion de modificar toda la información pero eso no significa que siempre lo va a hacer, entiendo que por ejemplo le muestra 10 input pero no necesariamente va modificar la informacion de los 10 input por lo que todoa la informacion debe viajar siempre a mi me parece que el problema es en la forma en que captura la informacion, posiblemente la consulta no lleva la informacion correcta o en su defecto no lleva la información ...
  #17 (permalink)  
Antiguo 02/04/2013, 04:59
MCF
 
Fecha de Ingreso: marzo-2008
Mensajes: 126
Antigüedad: 16 años, 2 meses
Puntos: 4
Respuesta: Cómo actualizo sólo algunos campos?

se me ocurre que podrías hacer una concatenación de cadenas, donde empieza algo como

Código PHP:
Ver original
  1. $updateSQL = "UPDATE hecho SET";

y ya después por concatenación y con if por cada campo le vas agregando a esa cadena cual si y cual campo no se actualizará, eso sería poniendo como condición en el if un isset y la variable, y al ultimo terminas con el WHERE y listo.

La verdad se me acaba de ocurrir y es algo tarde jaja por si alguien dice que es ineficiente o si alguien puede pulirlo mas estaría muy bien.

Etiquetas: 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 21:35.