Ayuda con un simple insert en mysql, lenguaje php

jorge_jegv_1979

Bovino de alcurnia
#1
Hola hermanos bakunos, una vez más con molestias acerca de este tema...

Algo conozco sobre php y mysql, he alcanzado una poca experiencia en el tema y se que cuando se trata de ingresar una fecha al mysql pues no será directo sino se debe cambiar a tipo date... perfecto hasta ahí.

El texto que tiene la fecha está en formato 30/04/2009, lo tomo así y lo cambio con esta sencilla función que encontré por ahí y que la verdad ni recuerdo donde, perdón por el tema de la autoría:

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

El formato queda definido así: 2009-04-30, lo que en concepto ya serviría para mysql, pero no, todavía no me sirve, por lo que para concluir le hago un:

mysql_query("INSERT INTO informacion VALUES ($valor1,str_to_date($lafecha,'%Y-%m-%d'),$valor2,$valor3)",$link);

y lo que finalmente llega a la base de datos es: 1975-00-00

Así que aquí estoy, completamente sin saber que más hacer... por cierto, utilizo el wamp 2.0 que trae el php 5.2.9-2 y el mysql 5.1.33...

AYUDA POR FAVOR!!!
 
#2
Tal vez podrías usar str_to_date desde el principio, pero especificando otro formato y así evitas usar las otras funciones que es donde es más probable que este el error.

Como en el primer ejemplo de este link:

Código:
http://mysql.conclase.net/curso/index.php?fun=STR_TO_DATE
Tal vez tu podrías hace algo como:

Código:
STR_TO_DATE($fecha, '%d/%m/%Y');
Suponiendo que tu variable fecha contenga algo como '30/04/2009'

Aunque volviendo a revisar el ejemplo que te digo veo que en todos especifican también la hora, tal vez eso sea lo que le falte a tu variable $lafecha y al formato para que la función str_to_date trabaje bien. Podrías probar ambas a ver que tal... yo no lo hice porque ya iba saliendo, disculpa.

Saludos.
 

alejkeops

Bovino adicto
#3
Bueno... aunq llevo un rato ya sin usar MySQL

lo que se muy bien... es que tu registro en la tabla debe de ser del tipo DATE
y asi no tendrias que hacer esas conversiones.

Despues hacer un simpre INSERT...

Espero haberte ayudado en algo... si no... avisa y te ayudo mas

:vientos:
 

jorge_jegv_1979

Bovino de alcurnia
#4
Tal vez podrías usar str_to_date desde el principio, pero especificando otro formato y así evitas usar las otras funciones que es donde es más probable que este el error.

Como en el primer ejemplo de este link:

Código:
http://mysql.conclase.net/curso/index.php?fun=STR_TO_DATE
Tal vez tu podrías hace algo como:


Código:
STR_TO_DATE($fecha, '%d/%m/%Y');
Suponiendo que tu variable fecha contenga algo como '30/04/2009'

Aunque volviendo a revisar el ejemplo que te digo veo que en todos especifican también la hora, tal vez eso sea lo que le falte a tu variable $lafecha y al formato para que la función str_to_date trabaje bien. Podrías probar ambas a ver que tal... yo no lo hice porque ya iba saliendo, disculpa.

Saludos.
Gracias mkfnx, intenté hacerlo directamente pero me sale el típico 0000-00-00 o lo que esto significa que estoy enviando mal la info... Lo intenté directo y tampoco me sale... ahora estoy intentando con colocar la hora tambien, ojala funcione.

Bueno... aunq llevo un rato ya sin usar MySQL

lo que se muy bien... es que tu registro en la tabla debe de ser del tipo DATE
y asi no tendrias que hacer esas conversiones.

Despues hacer un simpre INSERT...

Espero haberte ayudado en algo... si no... avisa y te ayudo mas

:vientos:
Gracias por el consejo alejkeops, pero aunque talvez no lo expliqué en el post original, es obvio que estoy usando un tipo DATE, no un DATETIME ni nada parecido...

Lo que no logro comprender es el resultado de 1975-00-00 que obtengo luego del proceso de str_to_date... Si alguien me puede explicar o darme alguna solución, muchas gracias por adelantado
 
#5
Ya probé tu código y obtengo el mismo resultado, no se porque salga el valor de 1957-00-00 es cercano a la fecha inicial de tiempo de los sistemas Unix, 1970-01-01, tal vez tenga algo que ver.

También probé mis sugerencias y no funciona ninguna :(.

¿Porqué dices que no te sirve pasar el valor de la cadena ya con formato, en este caso tu variable $lafecha?
Ya que de esta manera sí lo inserta y aunque este especificado como DATE en el tipo de dato, pero como dices que no te sirve pues entonces no sé... jaja.

Saludos.
 

jorge_jegv_1979

Bovino de alcurnia
#6
LO LOGRE!!!

Todavía no se porqué razón tenía ese estúpido error en el insert del mysql, pero lo que hice fue hacer de forma automática en DreamWeaver, luego copié la función que el DW crea para el insert y cruzando los dedos mandé la información...

PERFECTO!!!

Aca les dejo tanto la función como el insert como lo puse al final...

PHP:
if (!function_exists("GetSQLValueString")) {
function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "") 
{
  $theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;

  $theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);

  switch ($theType) {
    case "text":
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;    
    case "long":
    case "int":
      $theValue = ($theValue != "") ? intval($theValue) : "NULL";
      break;
    case "double":
      $theValue = ($theValue != "") ? "'" . doubleval($theValue) . "'" : "NULL";
      break;
    case "date":
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;
    case "defined":
      $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
      break;
  }
  return $theValue;
}
}


              $insertSQL = sprintf("INSERT INTO informacion (valor1,valor2,valor3, valor4) VALUES (%s, %s, %s, %s)",
               GetSQLValueString($dato1, "int"),
               GetSQLValueString($fecha, "date"),
               GetSQLValueString($dato3, "int"),
               GetSQLValueString($dato4, "double"));
            
              $Result1 = mysql_query($insertSQL, $link);

                    $my_error = mysql_error($link);
                    echo $my_error;
En realidad la función no hace nada más que comprobar los formatos, pero de alguna manera cambia la forma en la que se envía al final la información...

Espero le sirva por ahí a alguien más... me despido
 
#7
Hola compañeros aca les voy a dejar una funciones que he estado utilizando ultimamente con respecto a fechas

1. Fechanormal.php
Código:
<?
function fechanormal($fechan)
{ 
if (($fechan == "") or ($fechan == "0000-00-00") )
    {return "";} 
else 
    {return date("d/m/Y",strtotime($fechan));}
}
?>
Esta funcion recibe una variable de fecha en formato "1995-01-16" y la devuelve como "16/01/1995".


2. Fechamysql.php
Código:
<?
function fechamysql($Fecha) 
{ 
if ($Fecha<>""){ 
   $trozos=explode("/",$Fecha,3); 
   return "".$trozos[2]."-".$trozos[1]."-".$trozos[0].""; } 
else 
   {return "NULL";} 
} 
?>
Esta funcion recibe una variable de fecha en formato "16/01/1995" y la devuelve como "1995-01-16".


La forma de usar las funciones es la siguiente:

$fechaN="10/07/2009";
$fechaM="2009-07-10";
echo fechanormal($fechaM) # Devuelve 10/07/2009
echo fechamysql($fechaN) # Devuelve 2009-07-10


Espero les sirva.

* No recuerdo exactamente de donde saque esos scripts pero ninguno es mio andan, por ahi en la web.
 

olvera9

Bovino adicto
#9
veo en tu query que no usas los strings para las variables es decir tu haces el insert de VALUES($variable,$variable2) pero una manera simple y que a veces da lata que no sabemos es usar las comillas para las variables lo cual te quedaria asi VALUES('$variable','$variable2') suena un poco tonto pero son los pequeños grandes errores que nunca faltan ;) saludos
 
Arriba