Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Modificar atributo timestamp

Estas en el tema de Modificar atributo timestamp en el foro de Mysql en Foros del Web. Tengo un campo FECHA tipo timestamp que tiene asociado un atributo ON UPDATE CURRENT_TIMESTAMP Gracias a este se añade automáticamente ese campo con el valor ...
  #1 (permalink)  
Antiguo 26/10/2010, 04:52
 
Fecha de Ingreso: septiembre-2004
Mensajes: 64
Antigüedad: 19 años, 7 meses
Puntos: 2
Modificar atributo timestamp

Tengo un campo FECHA tipo timestamp que tiene asociado un atributo
ON UPDATE CURRENT_TIMESTAMP
Gracias a este se añade automáticamente ese campo con el valor correspondiente al alta del registro.
Cómo puedo editarlo para que refleje el valor de cualquier modificación de ese registro?
Es decir que si desde la web se edita un registro el campo FECHA refleje el dato correspondiente a la modificación, no al alta.
  #2 (permalink)  
Antiguo 26/10/2010, 05:07
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Modificar atributo timestamp

Eso solamente lo puedes lograr con un trigger, si te refieres al registro que ingresa o se actualiza.
Si te refieres a modificaciones en la estructura de la tabla, esa información ya se almacena en MySQL.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 26/10/2010, 05:13
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Modificar atributo timestamp

Quita el ON UPDATE y pon DEFAULT CURRENT_TIMESTAMP, de manera que si se deja en blanco la fecha ponga la actual y si se entra una fecha ponga esa...

(Manual)

ALTER ... SET DEFAULT or ALTER ... DROP DEFAULT

Quim
  #4 (permalink)  
Antiguo 26/10/2010, 05:52
 
Fecha de Ingreso: septiembre-2004
Mensajes: 64
Antigüedad: 19 años, 7 meses
Puntos: 2
Respuesta: Modificar atributo timestamp

Sí me refiero al registro, no a la tabla. No se lo que es un trigger... lo siento
  #5 (permalink)  
Antiguo 26/10/2010, 05:58
 
Fecha de Ingreso: septiembre-2004
Mensajes: 64
Antigüedad: 19 años, 7 meses
Puntos: 2
Respuesta: Modificar atributo timestamp

No me permite el cambio (ni en el modo edit PHP, me da mensaje de error).
Igual existe una manera más sencilla de conseguir lo que busco:
que en una página se me muestre sólo el último registro o bien dado de alta o bien modificado.
No lo puedo hacer a través de parámetros de la URL ya que necesito que la URL se me mantenga absoluta (=link.html nunca link.php?titulo=valor)
  #6 (permalink)  
Antiguo 26/10/2010, 07:12
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Modificar atributo timestamp

No acabo de entender que te pasa:

1. La pagina web que muestra, un formulario para ingresar nuevos registros o editarlos?

2. Ese formulario ofrece el campo fecha?

3. Si ofrece el campo fecha, la solución es la que te he dado, puedes permitir que se quede en blanco, y via default se guardará la fecha actual (la del servidor) o no permitirlo con lo que el usuario siempre tendrà que entrar una fecha.

Otra opcion seria que via javascript ese campo se llene con la fecha actual siempre que haya cualquier modificación y que el usuario pueda modificarla si así lo necesita.

Por otro lado nos hablas de la necesidad de mostrar el ultimo registro entrado o modificado, manteniendo la url fija...

Ahi veo una contradicción, si el usuario puede modificar la fecha nada te asegura que vaya a poner la actual con lo que el ultimo registro "modificado" si usas esa fecha para localizarlo no será el que buscas.

En ese caso quizas lo mejor seria agregar un nuevo campo fecha donde se guarde la fecha actual, sin mostrarlo en el formulario, con eso tendrás una fecha que siempre será la actual con la que podrás identificar el ultimo modificado o insertado con independencia de la fecha entrada por el usuario.

Lo de mantener la URL fija si usas ajax lo puedes conseguir...

Quim
  #7 (permalink)  
Antiguo 27/10/2010, 01:25
 
Fecha de Ingreso: septiembre-2004
Mensajes: 64
Antigüedad: 19 años, 7 meses
Puntos: 2
Respuesta: Modificar atributo timestamp

Entiendo que es bastante complicado.
  • El usuario debe dar de alta una serie de noticias para que UNA aparezca en la home (index.html). La más reciente.
  • Desea poder aprovechar el listado de noticias histórico para, con mínimos cambios, usar viejas noticias como novedades.
  • Por cuestiones "estructurales" index.html está en un servidor y el PHP en otro.
  • Index.html contiene un iframe que contiene el lado del PHP
  • El criterio que uso en el PHP del iframe es el de un juego de registros ordenados por fechas en el que aparece sólo un registro.
  • El iframe contiene el registro más actual, todo OK con noticias nuevas.
  • El problema viene cuando el usuario edita una noticia vieja y el campo FECHA (que le es indiferente al usuario y a mí tb) no se modifica con lo que sigue apareciendo la noticia más reciente de creación pero no de edición.
Espero al menos haberme explicado, gracias por tu interés
  #8 (permalink)  
Antiguo 27/10/2010, 01:44
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Modificar atributo timestamp

Si te has explicado, trabaja con la fecha del servidor, es mejor así todas las fechas se calcularan con el mismo horario, luego puedes hacer que php cuando construya la sentencia SQL para insertar o modificar la noticia agregue el campo y valor con la fecha actual...

Es decir ademas de mandar el contenido de la noticia le mandas la fecha no tines que tener ningun problema...

Quim

Última edición por quimfv; 27/10/2010 a las 02:43
  #9 (permalink)  
Antiguo 27/10/2010, 04:16
 
Fecha de Ingreso: septiembre-2004
Mensajes: 64
Antigüedad: 19 años, 7 meses
Puntos: 2
Respuesta: Modificar atributo timestamp

Nada Quim, no lo consigo.
Trabajo con MySQL (5.0) y tengo un campo
llamado fecha
  • Tipo: TIMESTAMP
  • Longitud/Valores:
  • Cotejamiento:
  • Atributos:
  • Nulo: not null
  • Predeterminado: CURRENT_TIMESTAMP
  • Extra:
Me inserta bien la fecha de creación, pero si modifico el registro no cambia el dato de creación. Y no paso de ahí.
Hasta donde tu paciencia
  #10 (permalink)  
Antiguo 27/10/2010, 04:35
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Modificar atributo timestamp

Dime como haces el update

Código SQL:
Ver original
  1. UPDATE tutabla SET campo=valor,.....,fecha='yyyy-mm-dd hh:mm:ss' WHERE ...
La fecha en ese formato...

En el caso de insert no hace falta pasar la fecha puesto que tienes el default que solo actua en el caso de registros nuevos.

Quim

Última edición por quimfv; 27/10/2010 a las 04:40
  #11 (permalink)  
Antiguo 27/10/2010, 05:28
 
Fecha de Ingreso: septiembre-2004
Mensajes: 64
Antigüedad: 19 años, 7 meses
Puntos: 2
Respuesta: Modificar atributo timestamp

A ver el código original de la página que modifica (edit.php) es:
Código PHP:
if ((isset($_POST["MM_update"])) && ($_POST["MM_update"] == "form1")) {
  
$updateSQL sprintf("UPDATE articulos SET titulo=%s, subtitulo=%s, FECHA=%s WHERE id=%s",
                       
GetSQLValueString($_POST['titulo'], "text"),
                       
GetSQLValueString($_POST['subtitulo'], "text"),
                       
GetSQLValueString($_POST['FECHA'], "date"),
                       
GetSQLValueString($_POST['id'], "int")); 
He probado a sustituir el valor de FECHA por el que tú me mandas pero no iba. También a no mostrar la fecha en la página edit.php pero tampoco.
Sigo probando
  #12 (permalink)  
Antiguo 27/10/2010, 06:14
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Modificar atributo timestamp

GetSQLValueString($_POST['FECHA'], "date"),

$_POST['FECHA']

de donde sale este valor y que formato tiene.

Quim
  #13 (permalink)  
Antiguo 27/10/2010, 08:45
 
Fecha de Ingreso: septiembre-2004
Mensajes: 64
Antigüedad: 19 años, 7 meses
Puntos: 2
Respuesta: Modificar atributo timestamp

Ese valor me lo carga automáticamente Dreamweaver cuando llamo a un juego de registros para ser modificados.
Yo tengo la capacidad de decidir qué campos se actualizan o no (vinculando campos de un formulario con sus correspondientes del juego de registros) , pero ya te decía que si no actualizo fecha ésta mantiene el valor de su creación, por eso lo invoco en esta página.
Si el editor lo modificase a "mano" (cosa que creo no debo pedirle, debo dárselo resuelto) el problema estaría resuelto.
En la DB fecha tiene los valores que te indicaba arriba:
• Tipo: TIMESTAMP
• Longitud/Valores:
• Cotejamiento:
• Atributos:
• Nulo: not null
• Predeterminado: CURRENT_TIMESTAMP
• Extra:
Gracias
  #14 (permalink)  
Antiguo 28/10/2010, 01:29
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Modificar atributo timestamp

Cita:
Ese valor me lo carga automáticamente Dreamweaver cuando llamo a un juego de registros para ser modificados.
Luego seguramente carga la fecha que encuentra en la bbdd y claro esa es la de creación.

Debes ver el script que ha creado Dreamweaver y modificarlo para que no pase la fecha que encuentra en la bbd sino la actual.... o forzarla en el momento de construir la sentencia SQL....

Segunda opción: forzarla en el momento de construir la sentencia SQL

Código PHP:
Ver original
  1. if ((isset($_POST["MM_update"])) && ($_POST["MM_update"] == "form1")) {
  2.   $updateSQL = sprintf("UPDATE articulos SET titulo=%s, subtitulo=%s, FECHA=%s WHERE id=%s",
  3.                        GetSQLValueString($_POST['titulo'], "text"),
  4.                        GetSQLValueString($_POST['subtitulo'], "text"),
  5.                        GetSQLValueString(date("Y-m-d H:m:s"), "date"),
  6.                        GetSQLValueString($_POST['id'], "int"));

Mira la linea 5, he sustituido $_POST['FECHA'] por date("Y-m-d H:m:s"), si miramos el manual de php nos dice

Cita:
Descripción

string date ( string $format [, int $timestamp ] )

Devuelve una cadena formateada según el formato dado usando el parámetro de tipo integer timestamp dado o el momento actual si no se da una marca de tiempo. En otras palabras, timestamp es opcional y por defecto es el valor de time().
Con esto deberias tener el problema resuelto.

Quim

Última edición por quimfv; 28/10/2010 a las 03:06

Etiquetas: modificar, timestamp, atributos
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 07:51.