Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Error insertando valores de una fecha desde formulario.

Estas en el tema de Error insertando valores de una fecha desde formulario. en el foro de PHP en Foros del Web. Hola. Estoy haciendo pruebas en un formulario de insertar/editar varias opciones incluyendo la fecha. Para ellos he creado un formulario incluyendo un "select" para las ...
  #1 (permalink)  
Antiguo 13/09/2015, 04:12
Avatar de kahlito
Colaborador
 
Fecha de Ingreso: marzo-2003
Ubicación: En el Estrecho y el mar
Mensajes: 2.936
Antigüedad: 21 años, 1 mes
Puntos: 65
Error insertando valores de una fecha desde formulario.

Hola.

Estoy haciendo pruebas en un formulario de insertar/editar varias opciones incluyendo la fecha. Para ellos he creado un formulario incluyendo un "select" para las fechas y su campo mysql fecha_de_nacimiento tipo date.

El formulario que tengo en cuanto a la parte de las fechas es el siguiente:

Código HTML:
<form method="post" action="" enctype="multipart/form-data">
<label>Fecha de nacimiento: </label>    
    <select id="dia_nacimiento" name="dia_nacimiento">	
	<option value="">Día: </option>
	<?php
	for ($i=1;$i<32;$i++)
	{
	?>
	<option value="<?php echo $i; ?>"><?php echo $i; ?></option>
	<?php
	}
	?>
</select>
<select id="mes_nacimiento" name="mes_nacimiento">	
<option value="">Mes: </option>
	<?php
	$meses = array('Enero','Febrero','Marzo','Abril','Mayo','Junio','Julio',
               'Agosto','Septiembre','Octubre','Noviembre','Diciembre');
	for ($i=0;$i<sizeof($meses); $i++)
	{
	?>
	<option value="<?php echo $i; ?>"><?php echo $meses[$i]; ?></option>
	<?php
	}
	?>
</select>  
<select id="ano_nacimiento" name="ano_nacimiento">	
	<option value="">Año: </option>
	<?php
	for ($i=1930;$i<=2005;$i++)
	{
	?>
	<option value="<?php echo $i; ?>"><?php echo $i; ?></option>
	<?php
	}
	?>
</select>
<input type="submit" value="Editar" name="editar_usuario">
</form> 
Y llamo o intento recoger las fechas así:

Código PHP:
Ver original
  1. <?php
  2. if(isset($_POST['editar_usuario'])){
  3. $dia_nacimiento = $_POST['dia_nacimiento'];
  4.     $mes_nacimiento = $_POST['mes_nacimiento'];
  5.     $ano_nacimiento = $_POST['ano_nacimiento'];
  6. $fecha = $ano_nacimiento."-".$mes_nacimiento."-".$dia_nacimiento;
  7.     $fechaFinal = date("Y-m-d", $fecha);
  8.  
  9. $query = "UPDATE usuarios SET ";
  10. $query .="fecha_de_nacimiento = '{$fechaFinal}' ";
  11. $query .="WHERE id_usuario = {$id_usuario} ";
  12. }
  13. ?>

Sin embargo siempre me sale este error:

Notice: A non well formed numeric value encountered in C:\xampp\htdocs\...\inc\editar_usuario.php on line 66


He hecho varias búsquedas en el foro pero no logro de solucionar el problema. ¿Qué estoy haciendo mal o que debo cambiar?

Gracias de antemano, saludos.
  #2 (permalink)  
Antiguo 13/09/2015, 06:34
Avatar de chronos682  
Fecha de Ingreso: febrero-2004
Ubicación: Tunja - Boyacá - Colombia
Mensajes: 627
Antigüedad: 20 años, 2 meses
Puntos: 69
Respuesta: Error insertando valores de una fecha desde formulario.

La fecha que estás pasando a la función date por la variable $fecha está mal formateada, prueba haciendo echo de esa variable para que veas como está quedando. Si ves que cumple con el formato correcto de fecha intenta usando la función mktime para generar la fecha en formato unix y ahí si se la pasas a date o puedes usar la función strtotime para que generes la fecha unix a partir de un string como es tu caso y luego pasas ese valor a la función date.
__________________
Si te gustó la respuesta dale +1

HERNÁN G. SIABATO M.
[email protected]
  #3 (permalink)  
Antiguo 13/09/2015, 07:09
Avatar de kahlito
Colaborador
 
Fecha de Ingreso: marzo-2003
Ubicación: En el Estrecho y el mar
Mensajes: 2.936
Antigüedad: 21 años, 1 mes
Puntos: 65
Respuesta: Error insertando valores de una fecha desde formulario.

Hola chronos682.

La verdad es que había probando con un echo $fechaFinal; el resultado de la fecha y veía que algo fallaba.

He probado las dos opciones y con la que creo que mejor me sale es con strtotime

Código PHP:
Ver original
  1. $fecha = strtotime($ano_nacimiento."-".$mes_nacimiento."-".$dia_nacimiento);   
  2. $fechaFinal = date("Y-m-d", $fecha);
  3.  
  4. o incluso así:
  5.  
  6. $fecha = $dia_nacimiento."-".$mes_nacimiento."-".$ano_nacimiento;
  7. $fechaFinal = date("Y-m-d", strtotime($fecha));

No se si será la mejor manera pero por ahora me sirve.

Gracias por tu ayuda, saludos

Última edición por kahlito; 13/09/2015 a las 07:29
  #4 (permalink)  
Antiguo 13/09/2015, 21:33
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 11 años, 11 meses
Puntos: 320
Respuesta: Error insertando valores de una fecha desde formulario.

Un input date no te sirve?
Código HTML:
Ver original
  1. <input type="date" name="fecha_nacimeinto">
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios
  #5 (permalink)  
Antiguo 21/09/2015, 11:45
Avatar de kahlito
Colaborador
 
Fecha de Ingreso: marzo-2003
Ubicación: En el Estrecho y el mar
Mensajes: 2.936
Antigüedad: 21 años, 1 mes
Puntos: 65
Respuesta: Error insertando valores de una fecha desde formulario.

Hola de nuevo.

NSD, lo vi hace poco aunque aun no lo he probado, voy a intentar terminar la anterior manera y luego paso a usar este, muchas gracias

Por cierto si con este mismo ejemplo que tengo en vez de tener tres parametros (día, mes y año) quiero tener dos y solo usar dia y mes ¿tambien tengo que dejar el campo de la tabla mysql como date o podría pasar a int o incluso varchar? Por ejemplo suponiendo que el usuario solo quiera mostrar o introducir la fecha de su santo pero sin el año, solo día y mes.

He probado creando tres variables y dandole al año un valor "0000" para probar pero siempre me coge el anterior de la fecha de nacimiento o tampoco termina de salir bien:

Código PHP:
Ver original
  1. <?php
  2. $dia_santo = $_POST['dia_santo'];
  3.     $mes_santo = $_POST['mes_santo'];
  4.     $ano_santo = "0000";
  5.     $fecha_s = $ano_nacimiento."-".$mes_santo."-".$dia_santo;
  6.     $santo = date("Y-m-d", strtotime($fecha_s));
  7. ?>

Código HTML:
Ver original
  1. <select id="dia_santo" name="dia_santo">   
  2.     <option value="">Día: </option>
  3.     <?php
  4.     for ($i=1;$i<32;$i++)
  5.     {
  6.     ?>
  7.     <option value="<?php echo $i; ?>"><?php echo $i; ?></option>
  8.     <?php
  9.     }
  10.     ?>
  11. <select id="mes_santo" name="mes_santo">   
  12. <option value="">Mes: </option>
  13.     <?php
  14.     $meses = array('Meses','Enero','Febrero','Marzo','Abril','Mayo','Junio','Julio',
  15.               'Agosto','Septiembre','Octubre','Noviembre','Diciembre');
  16.     for ($i=1;$i<sizeof($meses); $i++)
  17.     {
  18.     ?>
  19.     <option value="<?php echo $i; ?>"><?php echo $meses[$i]; ?></option>
  20.     <?php
  21.     }
  22.     ?>

Otra opción aparte de la anterior y que también sigo probando pero no termino de sacar es dejar marcada si ya existe la fecha de un usuario en su campo correspondiente. Por ejemplo si hago esta prueba dentro del option o select tampoco la reconoce:

Código PHP:
Ver original
  1. <?php
  2. //Aquí si la reconoce fuera del select option al menos diciendo que no existe fecha
  3.     if(isset($_POST['dia_nacimiento'])){
  4.         echo "Existe día de nacimiento".$_POST['dia_nacimiento'];
  5.     }
  6.     else{ echo "No existe";}   
  7.     ?>
  8.    
  9.     <select id="dia_nacimiento" name="dia_nacimiento">
  10.     <?php
  11. //A partir de aquí ni siquiera muestra el aviso de no existe.
  12.     if(isset($_POST['dia_nacimiento'])){
  13.         echo "Existe día de nacimiento en select".$_POST['dia_nacimiento'];
  14.     }
  15.     else{ echo "No existe en select";}

He probado incluso dentro del option y mirando en mis anteriores mensajes del foro que tenía algo parecido pero en este caso al llamarlo de la base de datos no termino de sacarlo.

Tengo estas dos cosas por resolver y por más que pruebo no termino de sacarlo. ¿Como podría arreglarlas?

Gracias de nuevo por vuestra ayuda
  #6 (permalink)  
Antiguo 21/09/2015, 15:23
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 11 años, 11 meses
Puntos: 320
Respuesta: Error insertando valores de una fecha desde formulario.

Cita:
Por cierto si con este mismo ejemplo que tengo en vez de tener tres parametros (día, mes y año) quiero tener dos y solo usar dia y mes ¿tambien tengo que dejar el campo de la tabla mysql como date o podría pasar a int o incluso varchar?
Yo lo dejaría como date ya que mysql puede manejarlos perfectamente asi.
Viendo tu ejemplo te comento lo que implemento yo para sistemas de feriados:
En argentina tenemos dos tipos de feriados: inamovibles y movibles, los inamovibles ocurren todos los años en un dia fijo, por ejemplo del 9 de julio o el 1 de mayo, mientras que los movibles pueden cambiar de fecha cada año segun cuando caen, ademas, ultimamente aparecio un tercer tipo que denomine "esporadicos" que se agregan solo para un año en particular pero que no se repite los proximos años, o bien lo hace pero en otra fecha.

Asi que en la base de datos de la tabla feriados tengo un campo de tipo "date" donde guardo en el año un valor por defecto ("2000" en mi caso) para indicar que se trata de un feriado inamovible y ademas guardo feriados movibles y esporadicos con la fecha del año (Ej: 2015) por lo que a la hora de mostrar los feriados, muestro todos los que tengan año 2000 o año actual ordenado por mes y dia, la bd lo maneja muy bien a eso de una forma simple.

Esto:
Código PHP:
Ver original
  1. $ano_santo = "0000";
  2.     $fecha_s = $ano_nacimiento."-".$mes_santo."-".$dia_santo;

Seria asi:
Código PHP:
Ver original
  1. $ano_santo = "0000";
  2.     $fecha_s = $ano_santo ."-".$mes_santo."-".$dia_santo;

Esto:
Código PHP:
Ver original
  1. <?php
  2. //Aquí si la reconoce fuera del select option al menos diciendo que no existe fecha
  3.     if(isset($_POST['dia_nacimiento'])){
  4.         echo "Existe día de nacimiento".$_POST['dia_nacimiento'];
  5.     }
  6.     else{ echo "No existe";}    
  7.     ?>
  8.    
  9.     <select id="dia_nacimiento" name="dia_nacimiento">
  10.     <?php
  11. //A partir de aquí ni siquiera muestra el aviso de no existe.
  12.     if(isset($_POST['dia_nacimiento'])){
  13.         echo "Existe día de nacimiento en select".$_POST['dia_nacimiento'];
  14.     }
  15.     else{ echo "No existe en select";}
Los tags select no admiten contenido dentro que no sea un tag option, para mostrar yo haria lo siguiente:
Código PHP:
Ver original
  1. <select id="dia_nacimiento" name="dia_nacimiento">    
  2.     <option value="">Día: </option>
  3.     <?php
  4.         $selected = (empty($_POST['dia_nacimiento']) ? 0 : $_POST["dia_nacimiento"]);
  5.         for ($i=1; $i<32; $i++)
  6.             echo "<option value=\"$i\" ".($i == $selected ? "selected" : "").">$i</option>";
  7.     ?>
  8. </select>
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios
  #7 (permalink)  
Antiguo 23/09/2015, 10:31
Avatar de kahlito
Colaborador
 
Fecha de Ingreso: marzo-2003
Ubicación: En el Estrecho y el mar
Mensajes: 2.936
Antigüedad: 21 años, 1 mes
Puntos: 65
Respuesta: Error insertando valores de una fecha desde formulario.

Hola de nuevo NSD

He seguido tus ejemplos paso a paso y parece que por fin se imprime todo correctamente a exepción de si repito alguna fecha en plan santo.

Por ejemplo para buscar los valores de fecha de nacimiento y santo lo he hecho así:

Código PHP:
Ver original
  1. <?php
  2. $fecha_de_nacimiento = $fila['fecha_de_nacimiento'];               
  3. $dia_nacimiento = date('d',strtotime($fecha_de_nacimiento));
  4. $mes_nacimiento = date('m',strtotime($fecha_de_nacimiento));
  5. $ano_nacimiento = date('Y',strtotime($fecha_de_nacimiento));
  6.    
  7. $santo = $fila['santo'];
  8. $dia_santo = date('d',strtotime($santo));
  9. $mes_santo = date('m',strtotime($santo));
  10. ?>

Y luego en el formulario de edición igual que en tu ejemplo pero cambiando $_POST["dia_nacimiento"] por $dia_nacimiento:

Código php:
Ver original
  1. <label>Fecha de nacimiento: </label>
  2.     <select id="dia_nacimiento" name="dia_nacimiento">    
  3.         <option value="">Día: </option>
  4.         <?php
  5.         //$selected = (empty($_POST['dia_nacimiento']) ? 0 : $_POST["dia_nacimiento"]);
  6.         $selected = (empty($dia_nacimiento) ? 0 : $dia_nacimiento);
  7.         for ($i=1; $i<32; $i++)
  8.             echo "<option value=\"$i\" ".($i == $selected ? "selected" : "").">$i</option>";
  9.         ?>
  10.     </select>
  11.     <select id="mes_nacimiento" name="mes_nacimiento"> 
  12.         <option value="">Mes: </option>
  13.         <?php          
  14.         $selected = (empty($mes_nacimiento) ? 0 : $mes_nacimiento);
  15.         $meses = array('Meses','Enero','Febrero','Marzo','Abril','Mayo','Junio','Julio',
  16.             'Agosto','Septiembre','Octubre','Noviembre','Diciembre');
  17.         for ($i=1;$i<sizeof($meses); $i++){
  18.             echo "<option value=\"$i\" ".($i == $selected ? "selected" : "").">$meses[$i]</option>";   
  19.         }
  20.         ?>
  21.     </select>  
  22.     <select id="ano_nacimiento" name="ano_nacimiento">
  23.         <option value="">Año: </option>
  24.         <?php      
  25.         $selected = (empty($ano_nacimiento) ? 0 : $ano_nacimiento);
  26.         for ($i=1930; $i<2002; $i++)
  27.             echo "<option value=\"$i\" ".($i == $selected ? "selected" : "").">$i</option>";
  28.         ?> 
  29.     </select>

Hasta aquí va todo perfectamente, sin embargo si repito la opción del campo "santo" (que por cierto la he mantenido como "date" en la base de datos) pues la edita correctamente pero a la hora de volver a imprimirla muestra día: 1 y mes: Enero.

Código PHP:
Ver original
  1. <label>Fecha del santo: </label>
  2.     <select id="dia_santo" name="dia_santo">    
  3.         <option value="">Día: </option>
  4.         <?php        
  5.         $selected = (empty($dia_santo) ? 0 : $dia_santo);
  6.         for ($i=1; $i<32; $i++)
  7.             echo "<option value=\"$i\" ".($i == $selected ? "selected" : "").">$i</option>";
  8.         ?>
  9.     </select>
  10.     <select id="mes_santo" name="mes_santo">   
  11.         <option value="">Mes: </option>
  12.         <?php          
  13.         $selected = (empty($mes_santo) ? 0 : $mes_santo);          
  14.  
  15.         $meses = array('Meses','Enero','Febrero','Marzo','Abril','Mayo','Junio','Julio',
  16.             'Agosto','Septiembre','Octubre','Noviembre','Diciembre');
  17.         for ($i=1;$i<sizeof($meses); $i++){
  18.             echo "<option value=\"$i\" ".($i == $selected ? "selected" : "").">$meses[$i]</option>";   
  19.         }      
  20.         ?>
  21.     </select>

Lo he revisado varias veces y no encuentro un error o el por qué de imprimir siempre 1 o Enero en santo.

¿Es la manera correcta?

Gracias de nuevo por tu ayuda, saludos.
  #8 (permalink)  
Antiguo 24/09/2015, 16:51
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 11 años, 11 meses
Puntos: 320
Respuesta: Error insertando valores de una fecha desde formulario.

Todo pareceria estar correcto, quizas tengas un problema con los datos que vienen de la base de datos, es decir, antes del codigo publicado.

En este ejemplo basado en tu codigo puedes ver que funciona correctamente en ambos casos.
Código PHP:
Ver original
  1. <?php  
  2. $fecha_de_nacimiento = "1998-10-15"; // Esto saldria de la bd.
  3. $santo = "1998-10-15"; // Esto saldria de la bd.
  4.  
  5. // Ahora obtenemos cada parte por separado:
  6. $fecha_de_nacimiento = explode("-", $fecha_de_nacimiento);
  7. $santo = explode("-", $santo);
  8.  
  9. // Meses.
  10. $meses = array('Mes', 'Enero','Febrero','Marzo','Abril','Mayo','Junio','Julio', 'Agosto','Septiembre','Octubre','Noviembre','Diciembre');
  11.  
  12. ?>
  13. <label>Fecha de nacimiento: </label>
  14.  
  15. <select id="dia_nacimiento" name="dia_nacimiento">    
  16.     <option value="">Día: </option>
  17. <?php
  18. $selected = (empty($fecha_de_nacimiento[2]) ? 0 : $fecha_de_nacimiento[2]);
  19. for ($i=1; $i<32; $i++)
  20.     echo "<option value=\"$i\" ".($i == $selected ? "selected" : "").">$i</option>";
  21. ?>
  22. </select>
  23.  
  24. <select id="mes_nacimiento" name="mes_nacimiento">  
  25. <?php          
  26.     $selected = (empty($fecha_de_nacimiento[1]) ? 0 : $fecha_de_nacimiento[1]);
  27.     foreach ($meses as $nro => $mes) {
  28.         echo "<option value=\"$nro\" ".($nro == $selected ? "selected" : "").">$mes</option>";    
  29.     }
  30. ?>
  31. </select>  
  32.  
  33. <select id="ano_nacimiento" name="ano_nacimiento">
  34.     <option value="">Año: </option>
  35. <?php      
  36.     $selected = (empty($fecha_de_nacimiento[0]) ? 0 : $fecha_de_nacimiento[0]);
  37.     for ($i=1930; $i<2002; $i++)
  38.         echo "<option value=\"$i\" ".($i == $selected ? "selected" : "").">$i</option>";
  39. ?>  
  40. </select>
  41. <hr>
  42. <label>Fecha del santo: </label>
  43. <select id="dia_santo" name="dia_santo">    
  44.     <option value="">Día: </option>
  45. <?php        
  46. $selected = (empty($santo[2]) ? 0 : $santo[2]);
  47. for ($i=1; $i<32; $i++)
  48.     echo "<option value=\"$i\" ".($i == $selected ? "selected" : "").">$i</option>";
  49. ?>
  50. </select>
  51.  
  52. <select id="mes_santo" name="mes_santo">    
  53. <?php          
  54.     $selected = (empty($santo[1]) ? 0 : $santo[1]);
  55.     foreach ($meses as $nro => $mes) {
  56.         echo "<option value=\"$nro\" ".($nro == $selected ? "selected" : "").">$mes</option>";    
  57.     }
  58. ?>
  59. </select>
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios
  #9 (permalink)  
Antiguo 25/09/2015, 13:44
Avatar de kahlito
Colaborador
 
Fecha de Ingreso: marzo-2003
Ubicación: En el Estrecho y el mar
Mensajes: 2.936
Antigüedad: 21 años, 1 mes
Puntos: 65
Respuesta: Error insertando valores de una fecha desde formulario.

Hola de nuevo NSD

He seguido tu ejemplo y me va perfectamente solo que he cambiado el orden de numeros de los campos día y año ya que estaban cambiandos y no se imprimian correctamente:

Código PHP:
Ver original
  1. <label>Fecha de nacimiento: </label>
  2.  
  3. <select id="dia_nacimiento" name="dia_nacimiento">    
  4.     <option value="">Día: </option>
  5. <?php
  6. $selected = (empty($fecha_de_nacimiento[0]) ? 0 : $fecha_de_nacimiento[0]);
  7. for ($i=1; $i<32; $i++)
  8.     echo "<option value=\"$i\" ".($i == $selected ? "selected" : "").">$i</option>";
  9. ?>
  10. </select>
  11.  
  12. <select id="mes_nacimiento" name="mes_nacimiento">  
  13. <?php          
  14.     $selected = (empty($fecha_de_nacimiento[1]) ? 0 : $fecha_de_nacimiento[1]);
  15.     foreach ($meses as $nro => $mes) {
  16.         echo "<option value=\"$nro\" ".($nro == $selected ? "selected" : "").">$mes</option>";    
  17.     }
  18. ?>
  19. </select>  
  20.  
  21. <select id="ano_nacimiento" name="ano_nacimiento">
  22.     <option value="">Año: </option>
  23. <?php      
  24.     $selected = (empty($fecha_de_nacimiento[2]) ? 0 : $fecha_de_nacimiento[2]);
  25.     for ($i=1930; $i<2002; $i++)
  26.         echo "<option value=\"$i\" ".($i == $selected ? "selected" : "").">$i</option>";
  27. ?>  
  28. </select>
  29. <hr>
  30. <label>Fecha del santo: </label>
  31. <select id="dia_santo" name="dia_santo">    
  32.     <option value="">Día: </option>
  33. <?php        
  34. $selected = (empty($santo[0]) ? 0 : $santo[0]);
  35. for ($i=1; $i<32; $i++)
  36.     echo "<option value=\"$i\" ".($i == $selected ? "selected" : "").">$i</option>";
  37. ?>
  38. </select>
  39.  
  40. <select id="mes_santo" name="mes_santo">    
  41. <?php          
  42.     $selected = (empty($santo[1]) ? 0 : $santo[1]);
  43.     foreach ($meses as $nro => $mes) {
  44.         echo "<option value=\"$nro\" ".($nro == $selected ? "selected" : "").">$mes</option>";    
  45.     }
  46. ?>
  47. </select>

Creo que ya está resuelto el asunto, muchas gracias por tu gran ayuda.

Saludos.

Etiquetas: fecha, formulario, mysql, select, usuarios
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 03:51.