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

Insertar fecha desde formulario y mostrarla

Estas en el tema de Insertar fecha desde formulario y mostrarla en el foro de Mysql en Foros del Web. Buenas, mi problema está en que quiero insertar una fecha desde un formulario, en la tabla está el campo "fecha" como DATE, así que deberían ...
  #1 (permalink)  
Antiguo 08/04/2006, 02:15
 
Fecha de Ingreso: abril-2003
Mensajes: 10
Antigüedad: 21 años
Puntos: 0
Insertar fecha desde formulario y mostrarla

Buenas, mi problema está en que quiero insertar una fecha desde un formulario, en la tabla está el campo "fecha" como DATE, así que deberían introducir la fecha aaaa/mm/dd, pero me gustaría que insertaran dd/mm/aaaa, y que a la hora de mostrar el resultado me lo diera igual, me interesa hacerlo de esta manera porque la página la estoy haciendo para alguien que pasa varias facturas y que no entiende mucho, y me gustaría facilitarle la faena en todo lo posible, a continuación os paso los códigos:

Formulario:

<td><form action="insertargastos.php" method="post" name="form2" target="_blank" id="form2">
<p>Fecha
<input name="fecha" type="text" id="fecha" maxlength="10">
(Ej. dd/mm/aaaa)</p>

Página de resultados:

$result = mysql_query($sql);
if (! $result){
echo "La consulta SQL contiene errores.";
exit();
}
//Bucle WHILE para mostrar los resultados...
while ($row = mysql_fetch_array($result)){
echo "<P>",$row["fecha"]," - ",$row["concepto"]," - ",$row["cantidad"],"</P>";
}

He probado poniendo:

////////////////////////////////////////////////////
//Convierte fecha de mysql a normal
////////////////////////////////////////////////////
function cambiaf_a_normal($fecha){
ereg( "([0-9]{2,4})-([0-9]{1,2})-([0-9]{1,2})", $fecha, $mifecha);
$lafecha=$mifecha[3]."/".$mifecha[2]."/".$mifecha[1];
return $lafecha;
}

////////////////////////////////////////////////////
//Convierte fecha de normal a mysql
////////////////////////////////////////////////////

function cambiaf_ a_mysql($fecha){
ereg( "([0-9]{1,2})/([0-9]{1,2})/([0-9]{2,4})", $fecha, $mifecha);
$lafecha=$mifecha[3]."-".$mifecha[2]."-".$mifecha[1];
return $lafecha;
}

pero la verdad, no sé cómo introducir bien éstos códigos.
  #2 (permalink)  
Antiguo 10/04/2006, 10:27
Avatar de omar1977  
Fecha de Ingreso: abril-2006
Mensajes: 178
Antigüedad: 18 años
Puntos: 4
Posible Solucion

si tienes las funciones de conversion
segun tu caso el string sql se deberia contruir como:
formulario origen
<input type="text" name="fecha">

pag resultados
$sqlstr = "SELECT * FROM tabla
WHERE fecha = '".cambiaf_a_mysql($_POST['fecha'])."'";

y luego:

$rs = mysql_query($sqlstr,$link)
while($row = mysql_fetch_array($rs)){
echo "<p> ".cambia_a_normal( $row['fecha'] )."</p>.......";
}

intenta con eso si te funciona avisa, si no es asi igual
agradecere si me dices como te fue con eso
  #3 (permalink)  
Antiguo 10/04/2006, 12:54
 
Fecha de Ingreso: abril-2003
Mensajes: 10
Antigüedad: 21 años
Puntos: 0
Buenas. Te agradezco la respuesta, pero no sé si es que lo estoy introduciendo mal o qué pasa, pero cuando introduzco:

$rs = mysql_query($sqlstr,$link)
while($row = mysql_fetch_array($rs)){
echo "<p> ".cambia_a_normal( $row['fecha'] )."</p>.......";
}

me da error en la línea de "while", y no encuentro dónde puede estar el error, puesto que $link lo he cambiado por $conectar (es como lo tengo configurado). La verdad es que no entiendo nada, ya estoy por pasar de hacer que la fecha salga como dd-mm-aaaa, con tal de que se aclare luego el tipo. La duda que me salta ahora es de otro tema, es cómo intruducir decimales, ya que el campo lo he puesto en decimal y nada, no se introduce ninguno, he estado ojeando el foro y no he encontrado respuesta alguna que me valga.

De todas maneras te lo agradezco mucho. Si alguna vez lo consigo, pondré aqui la solución para compartirla con aquel que pueda tener mi misma duda.
  #4 (permalink)  
Antiguo 10/04/2006, 13:18
Avatar de omar1977  
Fecha de Ingreso: abril-2006
Mensajes: 178
Antigüedad: 18 años
Puntos: 4
puedes mostrar el error que te aparece, quizas al al leerlo te pueda ayudar un poco mas, con respecto a los decimales no me queda claro pero creo que tu problema puede ser el tipo de datos de la bdd, pon la estructura de la tabla para verla y poder ayudarte
__________________
no hay nadie que sea tan inutil, por ultimo sirve como mal ejemplo
  #5 (permalink)  
Antiguo 11/04/2006, 02:32
 
Fecha de Ingreso: abril-2003
Mensajes: 10
Antigüedad: 21 años
Puntos: 0
Buenas, aqui te pongo primero la estructura de la tabla "ingresos":

Código:
ALTER TABLE `ingresos` CHANGE `cantidad` `cantidad` DECIMAL( 20, 0 ) DEFAULT '0' NOT NULL
Como me acabo de levantar el método más sencillo que se me ocurrió fue ese, hice como que la cambiaba, pero la dejé igual...

Ahora te pongo primero el código y las líneas y después el error:

Código:
	32. $sqlstr = "SELECT fecha FROM ingresos WHERE fecha = '".cambiaf_a_mysql($_POST['fecha'])."'";
33.    $rs = mysql_query($sqlstr,$conectar)
34.    while($row = mysql_fetch_array($rs)){
35.    echo "<p> ".cambia_a_normal( $row['fecha'] )."</p>";
36.    }
37.	?>
El error es el siguiente:

Código:
Parse error: parse error in c:\program files\easyphp1-8\www\goro\prueba.php on line 34
Lo copìé todo ya en el último intento más que nada para que no se me escapara ninguna variable, por si acaso, y tal cual te lo mando. Gracias de todas maneras.
  #6 (permalink)  
Antiguo 12/04/2006, 07:33
Avatar de omar1977  
Fecha de Ingreso: abril-2006
Mensajes: 178
Antigüedad: 18 años
Puntos: 4
me tarde un poco, pero mi amogo te cuento que no veo nada extraño en tu codigo, slbo que en la linea 33 te falta un cierre de linea es decir un ; (punto y coma).................. jeje, nos pasa a todos
__________________
no hay nadie que sea tan inutil, por ultimo sirve como mal ejemplo
  #7 (permalink)  
Antiguo 12/04/2006, 12:29
 
Fecha de Ingreso: abril-2003
Mensajes: 10
Antigüedad: 21 años
Puntos: 0
Buenas. No pasa nada tranquilo, mientras estuve trabajando en otra cosa... lo que sigue sin salirme es los decimales... y ahora me da otro error en las fechas, me dice:

Código:
Fatal error: Call to undefined function: date_format() in c:\program files\easyphp1-8\www\goro\prueba.php on line 32
Si tú me dices que ves todo bien... no sé porqué me da entonces este error, la línea es la misma, no la he tocado, he intentado varias cosas antes de ponerlo aqui, pero nada... gracias por lo de ";", no había caído. Gracias de nuevo.
  #8 (permalink)  
Antiguo 16/04/2006, 00:12
Avatar de uamistad  
Fecha de Ingreso: diciembre-2004
Ubicación: Cd. de México
Mensajes: 1.395
Antigüedad: 19 años, 4 meses
Puntos: 1
Me parece que te aventuras mucho en tus códigos.

Es como construir una televisión de parte en parte y al final esperar que con presionar el botón de encendido, todo salga perfecto. Sin haber probado las piezas (módulos/piezas) por separado.

Para encontrar el problema puedes hacer muchas cosas.

Primero, tienes:

Código:
     $result = mysql_query($sql);
     if (! $result){
     echo "La consulta SQL contiene errores.";
     exit();
Eso está muy bien, así te aseguras que al menos está conectando. Continuemos....

Luego tienes esta otra:

Código:
$sqlstr = "SELECT * FROM tabla WHERE fecha = '".cambiaf_a_mysql($_POST['fecha'])."'";
Olvídate momentariamente del while y del mysql_fetch_array, dale un echo a esa sentencia para que veas qué te imprime y confirmes que el formato es el adecuado. De ser así, continúa.

Luego haces:
Código:
$rs = mysql_query($sqlstr,$link)
Como dice Omar, hay un error de punto y coma, pero digamos que lo pones. Ahora, ¿cómo puedes estar seguro de que la consulta es correcta y poder continuar con el código confiadamente?

Necesitas comprobarlo, las comprobaciones nunca están de más:
if ( !$rs ){echo "La siguiente consulta fue errónea: ".$sqlstr;exit;}

Si pasas ese mensaje, ya puedes estar seguro de que vas bien, no hay que desesperarse, =)

Seguimos ahora con while(), ya tienes una consulta correcta, pero esa función convierte_a_normal() quién sabe si esté haciendo bien su trabajo, así que primero prueba el while sin esa conversión:

Código:
while($row = mysql_fetch_array($rs)){
    echo "<p> ".$row['fecha']."</p>";
   }
Y asegúrate de que te imprime las fechas bien.

Bien !! Ahora, como paso final, usa tu función convierte_a_normal()


Como ves, un error muy frecuente es aventarse a hacer el código sin hacer comprobaciones. Parece más rápido (y aparentemente lo es), pero al primer error con tu "televisión" qué técnico podrá arreglar más rápido el error, ¿aquél que armó la TV bien rápido o el que fue probando etapa por etapa asegurándose de que cada una funcionara?

Un saludo, brother y felices códigos.
__________________
"Di no al Internet Explorer" -Proverbio Chino-
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 05:09.