PHP - Actualizar fechas

 
Vista:
sin imagen de perfil

Actualizar fechas

Publicado por Pedro (7 intervenciones) el 17/01/2019 22:09:14
Hola buenas tardes.

Hacia mucho que no pasaba por aquí pero me encuentro con un problema que por mas que lo he intentado no soy capaz de solucionarlo.

Tengo un formulario para modificar los datos de la BB.DD. SQL, lo hago desde PHP, el formulario me muestra las fechas bien, como yo quiero "dd-mm-yyyy", el problema me viene cuando modifico los datos, o tengo que insertar de nuevo las fechas, todas o me da el siguiente error:

Warning: date_format() expects parameter 1 to be DateTime, boolean given in /srv/disk1/449478/www/trabajo.mywebcommunity.org/comite/registro/contratos/modifica.php on line 23

Warning: date_format() expects parameter 1 to be DateTime, boolean given in /srv/disk1/449478/www/trabajo.mywebcommunity.org/comite/registro/contratos/modifica.php on line 26

Warning: date_format() expects parameter 1 to be DateTime, boolean given in /srv/disk1/449478/www/trabajo.mywebcommunity.org/comite/registro/contratos/modifica.php on line 29

Cuando pongo yo las fechas en el formulario no me da el error, pero claro cuando entras a modificar un dato no modificas las fechas, y no soy capaz de dar con la solución.

Dejo el código por si alguien me puede ayudar.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
<?php
 
include "../ctrl/configuracion.php";
 
$fecha_alta=($_POST['fecha_alta']);//Recibe bien los datos
$fecha_modificacion=($_POST['fecha_modificacion']);//Recibe bien los datos
$fecha_baja=($_POST['fecha_baja']);//Recibe bien los datos
 
 
$obj_fecha1 = DateTime::createFromFormat('d/m/Y', $fecha_alta);
$fecha1 = date_format($obj_fecha1, "Y-m-d");//Aquí me da el error
 
$obj_fecha2 = DateTime::createFromFormat('d/m/Y', $fecha_modificacion);
$fecha2 = date_format($obj_fecha2, "Y-m-d");//Aquí me da el error
 
$obj_fecha3 = DateTime::createFromFormat('d/m/Y', $fecha_baja);
$fecha3 = date_format($obj_fecha3, "Y-m-d");//Aquí me da el error
 
if($error==""){
 
mysql_connect($server, $db_user, $db_pass) or die (mysql_error());
 
mysql_select_db($database)
or die ("No se pudo seleccionar la base de datos porque ".mysql_error());
 
mysql_query("UPDATE $contratos SET fecha_alta = '$fecha1'//Muestra bien los datos existentes en la bbdd, en el form
WHERE num_contrato = '$num_contrato'");
 
mysql_query("UPDATE $contratos SET fecha_modificacion = '$fecha2'//Muestra bien los datos existentes en la bbdd en el form

WHERE num_contrato = '$num_contrato'");
 
mysql_query("UPDATE $contratos SET fecha_baja = '$fecha3'//Muestra bien los datos existentes en la bbdd en el form

WHERE num_contrato = '$num_contrato'");
 
echo "Han quedado actualizados los datos con exito.";
}else{
echo "No Ha Sido Posible Actualizar Los Datos, Pulse <a href='modificardatos.php'><b>Aqui</b></a> para intentarlo de nuevo<br><br>";
echo "Ocurrieron Los Siguientes Errores:<br><br>".$error;
exit;
}
?>

Muchas gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Lawliet
Val: 1.034
Bronce
Ha disminuido 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

Actualizar fechas

Publicado por Lawliet (351 intervenciones) el 17/01/2019 22:42:20
Hola...

Te dejo un enlace el cual podría servirte de algo. Ya cualquier duda que tengas una vez intentado lo del enlace aquí andaremos al pendiente.

https://stackoverflow.com/questions/15567854/warning-date-format-expects-parameter-1-to-be-datetime

Sin más que comentar, quedo al pendiente de cualquier duda y/o comentario.

Saludos!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Actualizar fechas

Publicado por Pedro (7 intervenciones) el 17/01/2019 23:17:14
He estado probando y me continua ando error, ahora solo uno, pero no actualiza
El error ahora es:

Parse error: syntax error, unexpected '(', expecting T_STRING or T_VARIABLE or '{' or '$' in /srv/disk1/449478/www/trabajo.mywebcommunity.org/comite/registro/contratos/modifica.php on line 23

Línea 23:

$fecha1 = $obj_fecha1->('Y-m-d');

Sigo con la pelea
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Lawliet
Val: 1.034
Bronce
Ha disminuido 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

Actualizar fechas

Publicado por Lawliet (351 intervenciones) el 17/01/2019 23:22:30
Hola...

Basándonos en el ejemplo del enlace que había compartido, creo que hace falta la función Date para convertirlo a fecha...

1
$fecha1 = $obj_fecha1->format('Y-m-d');

Sin más que comentar, quedo al pendiente de cualquier duda y/o comentario.

Saludos!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Actualizar fechas

Publicado por Pedro (7 intervenciones) el 17/01/2019 23:40:41
He cambiado el código

1
2
$obj_fecha1 = DateTime::createFromFormat('d/m/Y', $fecha_alta);
$fecha1 = date_format($obj_fecha1, "Y-m-d");

Por

1
2
$obj_fecha1 = DateTime::createFromFormat('d/m/Y', $fecha_alta);
$fecha1 = $obj_fecha1-> ("Y-m-d");//Línea 23

Y el error que me da es:

Parse error: syntax error, unexpected '(', expecting T_STRING or T_VARIABLE or '{' or '$' in /srv/disk1/449478/www/trabajo.mywebcommunity.org/comite/registro/contratos/modifica.php on line 23
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Lawliet
Val: 1.034
Bronce
Ha disminuido 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

Actualizar fechas

Publicado por Lawliet (351 intervenciones) el 18/01/2019 00:04:01
Hola...

Como primer punto, es importante saber en que formato llega la fecha en primer lugar, te recomiendo que antes de hacer esto...

1
$obj_fecha1 = DateTime::createFromFormat('d/m/Y', $fecha_alta);

Realices una simple impresión de tu variable $fecha_alta, con el objetivo de saber como llega en primer lugar...

1
echo $fecha_alta;

Esto es importante por que tu indicas que el formato es el siguiente 'd/m/Y' y si tu variable de $fecha_alta recibe un formato completamente diferente, por ejemplo: 2019-01-17. Esto te generará un error por obvias razones, por lo que te recomiendo que primero valides como llega la fecha antes de realizar lo que haces.

Como segundo punto, hice una prueba con el código que muestras obviamente teniendo en cuenta que la fecha que recibo se encuentra en el formato correcto y no tuve problemas al momento de hacer una impresión en pantalla, te dejo el ejemplo que utilice esperando que te pueda servir como guía.

1
2
3
4
5
<?php
	$obj_fecha1 = DateTime::createFromFormat('d/m/Y', "17/01/2019");
	$fecha1 = $obj_fecha1->format("d/m/Y");
	echo "Fecha: ".$fecha1;
?>

Sin más que comentar, quedo al pendiente de cualquier duda y/o comentario.

Saludos!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Actualizar fechas

Publicado por Pedro (7 intervenciones) el 18/01/2019 01:08:04
Me he liado

Comienzo desde el principio y procurare ir con detalle.

Tengo un FORM en HTML Que envía los datos en por POST, también he probado a enviarlo por GET
La fechas las introduzco en formato "d-m-Y"
El archivo PHP que lo ejecuta da formato a las fechas para subirlas a SQL en formato "Y-m-d" con la función
1
2
$obj_fecha1 = DateTime::createFromFormat('d/m/Y', $fecha_alta);
$fecha1 = date_format($obj_fecha1, "Y-m-d");
puesto que SQL almacena las fechas en formato "Y-m-d"

Después por si hay que modificar datos tengo otro FORM en PHP que recupera los datos de la BBDD con el siguiente código
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Fecha de alta*
<input name="fecha_alta" type="text" id="fecha_alta" value="<?php
include "../ctrl/configuracion.php";
//conexion base de datos
mysql_connect($server, $db_user, $db_pass) 
or die ("No se pudo conectar con mysql porque ".mysql_error());
//seleccionar base datos
mysql_select_db($database)
or die ("No se pudo seleccionar la base de datos porque ".mysql_error());
//selecionar tabla
$check = "select * from $contratos WHERE num_contrato = '$num_contrato'";
$result = mysql_query($check)
or die ("No se pudo seleccionar tabla porque ".mysql_error());
 
while ($qry = mysql_fetch_array($result)) {
    echo $fecha_alta = date("d-m-Y",strtotime("$qry[fecha_alta]"));
}
?>"
size="20"/>
Las fechas las muestra bien, cambia otra vez el formato para mostrar y de la BBDD salen en "Y-m-d" y en el FORM se ven en "d-m Y"
Lógicamente hay mas campos que las fechas y los demás campos me funcionan perfectamente.

Este FORM también envía por POST y también he probado a enviar por GET.

Hay otro archivo PHP que ejecuta este FORM y es donde viene el problema

Las variables las recibe del FORM,

1
2
3
$fecha_alta=($_GET['fecha_alta']);
$fecha_modificacion=($_GET['fecha_modificacion']);
$fecha_baja=($_GET['fecha_baja']);
Si yo sobrescribo las fechas, no hay problema las ejecuta bien

(Bueno ahora están en GET por que he probado por si hubiese ese error.)

Ahora si yo no sobrescribo las fechas por que están bien y es un campo que no hay que modificarlo, cualquiera de las tres, es cuando me da el error, pero solo en las fechas en los emas campos que no hay que cambiar el formato no me da error aunque no los sobrescriba.

Yo creo que es al volver a cambiar el formato, que en el FORM lo recibe de la BBDD que esta en "Y-m-d" cambia el formato a "d-m Y" el archivo PHP lo recibe por POST o GET y lo tiene que volver a cambiar a "Y-m-d" para insertar en la BBDD.

Lo que no entiendo es por que si yo introduzco las fechas si funciona bien, pero si utilizo las que recibe si tocarlas no, cuando están en el mismo campo y y tienen el mismo formato "d-m-Y"

Y aunque me de el error me introduce las fechas pero la fecha de 01-01-1970, Creo que es esa

Me vuelvo loco

Perdona por ser tan corto y molestar tanto
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Actualizar fechas

Publicado por Pedro (7 intervenciones) el 18/01/2019 13:53:10
Te agradezco el interés pero lo dejo por imposible.

Si he probado a imprimirlo y $fecha_alta me da correcto, $obj_fecha1 esta vacía y $fecha1 lógicamente también vacía.

He encontrado otro código que si me da bien el formato de fecha en la variable $fecha1, pero luego no me lo sube bien a la bbdd, siempre sube 1970-01-01.

Asi que me acostumbrare a trabajar con el formato de fecha Y-m-d

Por que quitando todo el formateo de fechas si me funciona bien, en el formato de sql

Muchas gracias

Un saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve
Val: 3.037
Oro
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Actualizar fechas

Publicado por xve (6929 intervenciones) el 17/01/2019 22:55:25
Hola Pedro, creo que el problema que tienes es que la funcion createFromFormat() devuelve false en vez de un objeto datetime...
De ahí el error que recibe un valor boleano.

Puedes hacer un
1
echo $fecha_alta;
para ver exactamente el contenido?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Actualizar fechas

Publicado por Pedro (7 intervenciones) el 17/01/2019 23:17:59
Eso ya lo he probado y me da el mismo error

Continuare
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve
Val: 3.037
Oro
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Actualizar fechas

Publicado por xve (6929 intervenciones) el 18/01/2019 08:27:20
Si, pero que valor te da? porque el problema, creo que esta en el formato que tu defines en createFromFormat()
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Actualizar fechas

Publicado por Pedro (7 intervenciones) el 17/01/2019 23:21:40
Aunque supongo que es algo de eso, pues cuando hay una sola fecha no me da error, pero si tengo varias es cuando me lo da.

pero no entiendo por que no da un DateTime, cuando si recibe bien los datos en el form, que los recibe de la bbdd y lo muestra bien

Y en el form de introducir datos cuando das de alta uno nuevo si lo recoge bien con la misma funtcion
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Javier
Val: 163
Ha disminuido su posición en 3 puestos en PHP (en relación al último mes)
Gráfica de PHP

Actualizar fechas

Publicado por Javier (42 intervenciones) el 23/01/2019 19:30:13
Bueno solo como consejo, intenta siempre formatear los datos de entrada y salida siempre, asegurate que siempre todo este en UTF-8 (de preferencia) ademas en los querys tambien es posible formatear los datos a procesar.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar