Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: Ethgar en 8 Julio 2014, 15:59 pm



Título: campo date debuelve 1970-01-01
Publicado por: Ethgar en 8 Julio 2014, 15:59 pm
Que tal buen día pues me surgio un problema que no he logrado entender porque un campo date que su value es una fecha que toma de una base de datos me devuelve 1970-01-01, se que esta fecha esta por default cuando se da un valor null a un tipo date pero se supone que no es un valor null o 0 porque esta tomando un valor registrado en una base de datos, lo raro es que este error lo hace cuando bloqueo el input, cuando esta habilitado no me da problemas, pongo el fragmento de código correspondiente:

Código:
[code]
$query = mysql_query("SELECT * FROM Tabla_Fecha");
while ($row = mysql_fetch_array($query)){
$Fecha_Orden =  $row['Fecha_Orden'];
}

<td><input class="input"  type="text" name="FechaOrden" id="FechaOrden" size="12" title="Día de Registro" placeholder="2013/06/15" value="<?php echo $Fecha_Orden;?>" disabled required/>

$FechaOrden = strtoupper($_POST['FechaOrden']);
$FechaOrden=date('Y-m-d',strtotime($FechaOrden));

$Modificar = "UPDATE Tabla_Fecha
  SET Fecha_Orden='$FechaOrden'";
  $Mod= mysql_query($Modificar);
  if( $Mod == false ) echo"<script> alert('Error al Modificar Fecha')</script>"; 
  else echo"<script>alert('La Fecha ha sido Modificada)</script>";
[/code]


Título: Re: campo date debuelve 1970-01-01
Publicado por: MinusFour en 8 Julio 2014, 18:58 pm
Revisa en tu base de datos desde PHPmyAdmin o algun otro cliente SQL que valor tienes en la tabla. Yo lo que estoy viendo es que simplemente te traes el campo y lo imprimes pero también creo que cortaste algo de tú código porque empiezas a escribir HTML sin haber cerrado la tag de PHP y vice versa y si es así no sabemos si hayas modificado la variable antes de imprimirla.

Otra cosa, revisa que tu strtotime este bién y no te devuelva FALSE:

Código
  1. $FechaOrden=date('Y-m-d',strtotime($FechaOrden));

Si no te reconoce el string de la fecha
Código
  1. strtoupper($_POST['FechaOrden']);

Entonces te va a mandar un FALSE (0), lo que equivale a un timestamp de 1970-01-01.


Título: Re: campo date debuelve 1970-01-01
Publicado por: Ethgar en 8 Julio 2014, 19:14 pm
Revisa en tu base de datos desde PHPmyAdmin o algun otro cliente SQL que valor tienes en la tabla. Yo lo que estoy viendo es que simplemente te traes el campo y lo imprimes pero también creo que cortaste algo de tú código porque empiezas a escribir HTML sin haber cerrado la tag de PHP y vice versa y si es así no sabemos si hayas modificado la variable antes de imprimirla.

Otra cosa, revisa que tu strtotime este bién y no te devuelva FALSE:

Código
  1. $FechaOrden=date('Y-m-d',strtotime($FechaOrden));

Si no te reconoce el string de la fecha
Código
  1. strtoupper($_POST['FechaOrden']);

Entonces te va a mandar un FALSE (0), lo que equivale a un timestamp de 1970-01-01.

Si lo que pasa es que solo extraje el código en cuestión, la variable no s emodifica, lo que estoy pensando con tu respuesta es que al hacer strotimr a una fecha ya almacenada como date pueda dar algún problema


Título: Re: campo date debuelve 1970-01-01
Publicado por: MinusFour en 8 Julio 2014, 19:25 pm
¿Cual es tú string que pasas como $_POST["FechaOrden"]?

Dame un ejemplo para ver si está correcto.


Título: Re: campo date debuelve 1970-01-01
Publicado por: Ethgar en 10 Julio 2014, 17:17 pm
¿Cual es tú string que pasas como $_POST["FechaOrden"]?

Dame un ejemplo para ver si está correcto.
$FechaOrden = strtoupper($_POST['FechaOrden']);
$FechaOrden=date('Y-m-d',strtotime($FechaOrden))

$FechaOrden es la variable string quepaso como post y  que almaceno


Título: Re: campo date debuelve 1970-01-01
Publicado por: MinusFour en 10 Julio 2014, 17:20 pm
Lo que estaba buscando un ejemplo de lo que pasas como POST..

Por ejemplo: "Junio 2014"


Título: Re: campo date debuelve 1970-01-01
Publicado por: Ethgar en 10 Julio 2014, 17:58 pm
Lo que estaba buscando un ejemplo de lo que pasas como POST..

Por ejemplo: "Junio 2014"
a ok ok , bueno , lo que pasa es por ejemplo: 2014-06-01


Título: Re: campo date debuelve 1970-01-01
Publicado por: MinusFour en 10 Julio 2014, 18:02 pm
¿Entonces para que usas strtoupper, si lo que hace esto es poner tu string en mayúsculas?


Título: Re: campo date debuelve 1970-01-01
Publicado por: Ethgar en 10 Julio 2014, 18:06 pm
¿Entonces para que usas strtoupper, si lo que hace esto es poner tu string en mayúsculas?
Ahora que lo mencionas, de hecho lo usaba porque en un principio el usuario podía manipular la fecha, pero surgió el problema de que ponían fechas que no correspondían al mes en que estaban, por lo tanto lo deshabilite, Muchas graciasMinusFour, es algo sencillo que pase por alto, pero se me paso checar eso.


Título: Re: campo date debuelve 1970-01-01
Publicado por: MinusFour en 10 Julio 2014, 18:20 pm
¿Eso te solucino tu problema?

Fechas como 2014-06-01 son reconocidas por strtotime(), así que si sigues con ese problema, no debe ser de ahí. Lo más probable es que el valor venga mal desde la base de datos.


Título: Re: campo date debuelve 1970-01-01
Publicado por: Ethgar en 10 Julio 2014, 19:29 pm
¿Eso te solucino tu problema?

Fechas como 2014-06-01 son reconocidas por strtotime(), así que si sigues con ese problema, no debe ser de ahí. Lo más probable es que el valor venga mal desde la base de datos.
Tienes razón, crei que al hacerle strtotime a una fecha daria problemas, no entiendo porque ete erronea la fecha si la traigo de la base de datos, y esta correcta, con el mismo formato, seguire buscando el error.


Título: Re: campo date debuelve 1970-01-01
Publicado por: Ari Slash en 10 Julio 2014, 19:56 pm
Código
  1. $query = mysql_query("SELECT * FROM Tabla_Fecha");
  2. while ($row = mysql_fetch_array($query)){
  3. $Fecha_Orden =  $row['Fecha_Orden'];
  4. }
  5.  
  6. <td><input class="input"  type="text" name="FechaOrden" id="FechaOrden" size="12" title="Día de Registro" placeholder="2013/06/15" value="<?php echo $Fecha_Orden;?>" disabled required/>
  7.  
  8. $FechaOrden = strtoupper($_POST['FechaOrden']);
  9. $FechaOrden=date('Y-m-d',strtotime($FechaOrden));
  10.  
  11. $Modificar = "UPDATE Tabla_Fecha
  12.  SET Fecha_Orden='$FechaOrden'";
  13.  $Mod= mysql_query($Modificar);
  14.  if( $Mod == false ) echo"<script> alert('Error al Modificar Fecha')</script>";  
  15.  else echo"<script>alert('La Fecha ha sido Modificada)</script>";
  16.  

Pues ese SELECT *, no sabes especificamente como te trae la fecha de acuerdo a la configuracion de tu servidor (no el tipo de datos), por ende, traela desde la base de datos ya con formato:

Código
  1. SELECT DATE_FORMAT(Fecha_Orden,'%Y-%m-%d') FROM Tabla_Fecha

Código
  1. $query = mysql_query("SELECT DATE_FORMAT(Fecha_Orden,'%Y-%m-%d') FROM Tabla_Fecha");
  2. while ($row = mysql_fetch_array($query)){
  3. $Fecha_Orden =  $row['Fecha_Orden'];
  4. }

La configuracion de formato puedes verla aqui:
http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_date-format

Y lo mas probable es que el formato no sea el correcto, y pase lo que comento MinusFour en su primer post:

Si no te reconoce el string de la fecha
Código
  1. strtoupper($_POST['FechaOrden']);

Entonces te va a mandar un FALSE (0), lo que equivale a un timestamp de 1970-01-01.


Título: Re: campo date debuelve 1970-01-01
Publicado por: MinusFour en 10 Julio 2014, 20:21 pm
¿Una pregunta... Fecha_Orden es un campo de tipo Date? ¿O de tipo Timestamp?

En tu base de datos dices que tienes la fecha bien (no es 1970-01-01) ¿Pero cuando cargas la página te sale "1970-01-01"???

Eso es bastante extraño considerando que estás imprimiendo el dato tal cual viene de la base de datos y aún que le des un formato, no debería cambiarte la fecha en sí.


Título: Re: campo date debuelve 1970-01-01
Publicado por: Ethgar en 16 Julio 2014, 16:31 pm
¿Una pregunta... Fecha_Orden es un campo de tipo Date? ¿O de tipo Timestamp?

En tu base de datos dices que tienes la fecha bien (no es 1970-01-01) ¿Pero cuando cargas la página te sale "1970-01-01"???

Eso es bastante extraño considerando que estás imprimiendo el dato tal cual viene de la base de datos y aún que le des un formato, no debería cambiarte la fecha en sí.
Es Tipo Date, y si, en la base de datos si tengo la fecha bien por ejemplo 2014-07-07 y al mostrarla en la pagina sale la misma 2014-07-07, todo bien, el problema es cuando la guardo, lo que ise ahora fue simplemente que muestre la fecha pero al momento de guardar guarde todos los datos menos la fecha, para mantenerla integra, y todo anda bien, pero  sigo con la pregunta para entender que es lo que pasa, para futuras referencias, voy a probar con lo que Ari Slash propone, vere que pasa y publico que paso,. Gracias por sus respuestas.


Título: Re: campo date debuelve 1970-01-01
Publicado por: MinusFour en 16 Julio 2014, 18:44 pm
Yo creo que el problema es tu query del UPDATE o el strtotime:

Prueba poner justo debajo de $FechaOrden:

Código
  1. if($FechaOrden == "1970-01-01"){
  2.   die("El problema es strtotime o \$_POST[\"FechaOrden\"] = " . $_POST["FechaOrden"]);
  3. }

Si esto no es, hay algo mal con la query.

Tienes:

Código
  1. $Modificar = "UPDATE Tabla_Fecha SET Fecha_Orden='$FechaOrden'";

Estás poniendole a todos tus registros de la Tabla_Fecha la misma Fecha_Orden. ¿Esto es lo que quieres?