Hola. He abierto este tema, que aunque es continuación del otro pensé que sería útil para más de uno.
Pasar en PHP una fecha de "string" a "DATE".
Estoy haciendo una web (sobre fiestas en pueblos) con objetivo didáctico, y para ello he construido varios archivos:
-formulario.html (contiene un formulario que recibe los datos introducidos por el usuario: nombre del pueblo, fiesta, fecha de inicio de la fiesta y fecha de fin)
-calendario.html (saca por pantalla las fiestas agrupadas por meses).
-script.php (recibe los datos del formulario y los guarda en la base de datos localizada en 000webhost).
Se supone que la fecha debe ser introducida de una forma que no incomode al usuario, es decir en el formato dd-mm-aaaa, y no aaaa-mm-dd. Aunque en la BD sí estará en aaaa-mm-dd.
He utilizado "strtotime()" y "date()", poniendo un "echo" al final de ambas funciones para ver que me sale. Pero con "strtotime" no aparece nada y con "date" aparece el famoso "1969-12-31".
He leído tutoriales y he toqueteado bastante, pero nada... a ver si vosotros me podéis ayudar.
Dejo aquí los códigos de formulario.html y de script.php. Gracias.
FORMULARIO.HTML:
<form id="form1" name="form1" method="get" action="script.php">
<p>Pueblo:
<input type="text" name="pueblo" value="">
Fiesta: <input type="text" name="fiesta" value="">
</p>
<p>Fecha inicio (formato: día-mes-año):
<input type="text" name="fecha_inicio" value="">
</p>
<p>Fecha fin (formato: día-mes-año):
<input type="text" name="fecha_fin" value="">
</p>
<p>
<input type="submit"/>
</p>
</form>
SCRIPT.PHP:
<?php $pueblo= $_GET['pueblo']; $fiesta= $_GET['fiesta']; $fecha_inicio= $_GET['fecha_inicio']; $fecha_fin= $_GET['fecha_fin']; $fecha_inicio = strtotime("$fecha_inicio"); echo "1".$fecha_inicio; $fecha_inicio = date("Y-m-d", $fecha_inicio); echo "2".$fecha_inicio; //$fecha_fin = date("Y-m-d",$fecha_fin); $link = mysql_connect("mysql13.000webhost.com","a4047274_fiestas","urkaka12");if(! $link ){ die('No es posible conectar: ' . mysql_error());}else{ echo "conexion correcta. "; } mysql_select_db("a4047274_fiestas", $link); $result=mysql_query("INSERT INTO valencia VALUES('$pueblo', '$fiesta','$fecha_inicio','$fecha_fin')", $link);if(! $result ){ die('Datos no insertados de forma correcta. ' . mysql_error());}else{ echo "datos insertados";} mysql_close($link);?>
Sí, lo he probado y veo lo que te aparece. Es extraño. Lo primero que tienes que comprobar es si eres capaz de recuperar el dato en el archivo php, da la impresión de que no lo está haciendo.
Prueba este código HTML en otro archivo en el servidor (créalo nuevo para despejar dudas, por ejemplo http:/ / prueba123451.site11.com/fiestas/formulario2.html:)
<html>
<head>
<meta charset="utf-8">
</head>
<form id="form1" name="form1" method="get" action="script2.php">
<p>Pueblo:
<input type="text" name="pueblo" value="">
Fiesta: <input type="text" name="fiesta" value="">
</p>
<p>Fecha inicio (formato: día-mes-año):
<input type="text" name="fecha_inicio" value="">
</p>
<p>Fecha fin (formato: día-mes-año):
<input type="text" name="fecha_fin" value="">
</p>
<p>
<input type="submit"/>
</p>
</form>
</html>
Y crea este archivo script2.php, también simplemente para comprobar qué te devuelve:
<?php $pueblo= $_GET['pueblo']; $fiesta= $_GET['fiesta']; $fecha_inicio= $_GET['fecha_inicio']; $fecha_fin= $_GET['fecha_fin']; echo '<br/> Recibido dato fecha inicio : '.$fecha_inicio.'<br/>'; $fecha1= date("m-d-Y", strtotime("$fecha_inicio")); echo $fecha1." es fecha1 <br/> y ademas "; $fecha2=date("Y-m-d",strtotime($fecha1)); echo $fecha2. '<br/> Fin ';?>
Si introduces como fecha inicio 05-04-2077 debes obtener:
Recibido dato fecha inicio : 05-04-2077
04-05-2077 es fecha1
y ademas 2077-05-04
Fin
Es posible que te hayan quedado fragmentos de código erróneos. Si tuvieras esto en el archivo:
<?php $pueblo= $_GET['pueblo']; $fiesta= $_GET['fiesta']; $fecha_inicio= $_GET['fecha_inicio']; $fecha_fin= $_GET['fecha_fin']; $fecha_inicio = strtotime("$fecha_inicio"); echo '<br/> Recibido dato fecha inicio : '.$fecha_inicio.'<br/>'; $fecha1= date("m-d-Y", strtotime("$fecha_inicio")); echo $fecha1." es fecha1 <br/> y ademas "; $fecha2=date("Y-m-d",strtotime($fecha1)); echo $fecha2. '<br/> Fin ';?>
Te devuelve esto:
Recibido dato fecha inicio : 3682047600
12-31-1969 es fecha1
y ademas 1969-12-31
Fin
porque la línea $fecha_inicio = strtotime("$fecha_inicio"); te está borrando el contenido de la variable...
Bueno, añado otro mensaje.
He probado poniendo esto, para entender porqué no me funcionaba:
$fecha_inicio= date("m-d-Y", strtotime("$fecha_inicio"));
echo $fecha_inicio." es fecha1 <br/> y ademas ";
$fecha_inicio=date("Y-m-d",strtotime($fecha_inicio));
echo $fecha_inicio. '<br/> Fin ';
y me ha funcionado usando formulario2.
pero cuando utilizo mi formulario.html no me funciona...
¿Pero qué está pasando?
De hecho, el principio del código en ambos script es igual, así que no sé que pasa...
¿habrá algo mal en mi formulario?
Añado los scripts modificados:
SCRIPT.HTML
<?php $pueblo= $_GET['pueblo']; $fiesta= $_GET['fiesta']; $fecha_inicio= $_GET['fecha_inicio']; $fecha_fin= $_GET['fecha_fin']; $fecha_inicio= date("m-d-Y", strtotime("$fecha_inicio")); echo $fecha_inicio." es fecha1 <br/> y ademas "; $fecha_inicio=date("Y-m-d",strtotime($fecha_inicio)); echo $fecha_inicio. '<br/> Fin '; $fecha_fin= date("m-d-Y", strtotime("$fecha_fin")); echo $fecha_fin." es fecha fin <br/> y ademas "; $fecha_fin=date("Y-m-d",strtotime($fecha_fin)); echo $fecha_fin. '<br/> Fin '; $link = mysql_connect("mysql13.000webhost.com","a4047274_fiestas","urkaka12");if(! $link ){ die('No es posible conectar: ' . mysql_error());}else{ echo "conexion correcta. "; } mysql_select_db("a4047274_fiestas", $link); $result=mysql_query("INSERT INTO valencia VALUES('$pueblo', '$fiesta','$fecha_inicio','$fecha_fin')", $link);if(! $result ){ die('Datos no insertados de forma correcta. ' . mysql_error());}else{ echo "datos insertados";} mysql_close($link);?>
SCRIPT2.HTML
<?php $pueblo= $_GET['pueblo']; $fiesta= $_GET['fiesta']; $fecha_inicio= $_GET['fecha_inicio']; $fecha_fin= $_GET['fecha_fin']; echo '<br/> Recibido dato fecha inicio : '.$fecha_inicio.'<br/>'; //$fecha1= date("m-d-Y", strtotime("$fecha_inicio")); //echo $fecha1." es fecha1 <br/> y ademas "; //$fecha2=date("Y-m-d",strtotime($fecha1)); //echo $fecha2. '<br/> Fin '; $fecha_inicio= date("m-d-Y", strtotime("$fecha_inicio")); echo $fecha_inicio." es fecha1 <br/> y ademas "; $fecha_inicio=date("Y-m-d",strtotime($fecha_inicio)); echo $fecha_inicio. '<br/> Fin ';?>