Fecha y PHP

s4d1k

Buenas mirad, tengo este código:

<?php
    session_start();
    if($_POST) {
        include_once("/php/funciones.php");
        $conexionPW = conexPresenciaWeb();
        $fecha = date("Y-m-d");
        $titulo = $_POST['titulo_noticia'];
        $contenido_noticia = $_POST['contenido_noticia'];
        echo $fecha;

    $ssql = "INSERT INTO noticias_breves (Titulo, Contenido, Fecha) VALUES('" . $titulo . "',
    '" . $contenido_noticia . "', ' " . $fecha . " ')";
            
    mysql_query($ssql, $conexionPW) or die(mysql_error());

        
    mysql_close($conexionPW);
    
}
?>

Y en la base de datos MySQL el campo fecha es un date.

Aparentemente super sencillo, pues para mi no. Resulta que me esta dando continuamente un error de sintaxis y no entiendo el porque... he probado a cambiar en la bbdd el date por datetime, timestamp, etc... y no funciona. He probado tambien en poner el la sentencia SQL la funcion NOW(), pero tampoco me va, no para de salirme el error de sintaxis... estoy desesperado porque es una cosa sencilla pero que me esta amargando la mañana y no le veo el fallo.

Alguno me puede ayudar?

Gracias!

catalon

Pon el error que te da, normalmente suele decirte el punto en el que falla.

Por probar no seran los espacios que hay entre las comillas simples y las dobles de la fecha??

s4d1k

Un momento, acabo de hacer una prueba con un texto mas corto del que estaba poniendo y resulta que si me lo ha hecho...

El campo donde tengo el contenido es un TEXT, estos campos tiene limite o algo?

radykal

Todo campo tiene límite aunque en los TEXT si no recuerdo mal es muuuuuy grande. Fíjate que no estés poniendo algún caracter no permitido sin escapar, tipo comillas en el texto...

s4d1k

Concretamente con este texto me da error:

Michael Joseph Jackson (Gary, Indiana, 29 de agosto de 1958 – Los Ángeles, 25 de junio de 2009), conocido en el mundo artístico como Michael Jackson, fue un cantante, compositor y bailarín estadounidense de música pop y sus variantes. Conocido como el «Rey del Pop», logró cerca de 80 récords por diferentes motivos y fue incluido en el Guinness World Records en numerosas ocasiones, por motivos entre los que destacan, entre otros, ser el artista musical más exitoso de todos los tiempos, con cerca de 750 millones de discos vendidos; el artista musical más premiado de la historia, con 405 galardones, entre ellos 18 premios Grammy; el vocalista más joven en liderar la lista de sencillos en los Estados Unidos, con 11 años de edad; el primer vocalista en entrar en la lista de sencillos directamente en el número 1, con «You are not alone»; mayor número de semanas en el número 1 de la lista de álbumes (no bandas sonoras) en Estados Unidos, con Thriller, durante 37 semanas; videoclip más exitoso, Michael Jackson's Thriller, con alrededor de 1 millón de unidades vendidas; primer animador en ganar más de 100 millones de dólares en un año; animador mejor pagado de todos los tiempos (125 millones de dólares en la lista Forbes de 1989); y animador más exitoso de todos los tiempos.1 2 Además ha sido el primer y único artista que ha logrado empezar y terminar el año con un álbum en el número 1 (Thriller) y el primer y único artista de la historia en lograr números 1 en las décadas de 1960, 1970, 1980 y 1990. (Véase la sección «Premios y honores» para más información).3 4

s4d1k

Vale, resulta que si tenia una comilla por ahí, entonces, como hago para escapar la comilla?

Porque en principio no voy a ser yo el que suba las noticias y el que las tiene que subir no tiene ni idea de como escaparla ni nada...

Alguna idea?

radykal

hazlo así:

$titulo = mysql_real_escape_string($titulo);
$contenido_noticia = mysql_real_escape_string($contenido_noticia);


$ssql = "INSERT INTO noticias_breves (Titulo, Contenido, Fecha) VALUES('" . $titulo . "',
        '" . $contenido_noticia . "', ' " . $fecha . " ')";
s4d1k

A probar voy, gracias!

s4d1k

Funciona lo de las comillas, gracias!

Ahora tengo otro problema xD...

Guardo la fecha con el NOW() de MySQL, porque haciendolo como lo tenia con la variable $fecha, me ponia la fecha asi: 00-00-0000, pero con el NOW() me la saca al estilo guiri, o sea, mes/dia/año. Y bueno, bien, pero intento darle formato a la fecha con el date_format y me encuentro con esto: date() expects parameter 2 to be long, string given in...

Que rallote tengo, alguna aportacion respecto a esto?

1 respuesta
tOWERR

#9

Tienes que guardarlo con el formato americano. Asi:

$fecha = date("Y-m-d"); 
1 respuesta
s4d1k

#10, asi tampoco me funciona :S

MrTurbo

Prueba con:

 $ssql = "INSERT INTO noticias_breves (Titulo, Contenido, Fecha) VALUES('" . $titulo . "','" . $contenido_noticia . "', DATE_FORMAT(NOW(),'%Y-%m-%d')";
tOWERR

Prueba esto:

date_format(now(),'%Y-%m-%d')
s4d1k

Gracias a todos por contestar, ya lo tengo ;).

Otra cosa, y para no abrir otro hilo, espero que alguien lo lea, sino me tocara buscar mas o abrir otro hilo.

Cuando yo hago una validacion de un formulario en PHP, como hago para que en la propia página del formulario, si ha habido algun tipo de problema, aparezca un mensaje de error arriba del todo?

No se si me explico.

Tunnecino

Puedes hacerlo con php y html, con datos enviados por post o get, o incluso con session.

if($error = 1) $_SESSION['error'] = 'Ha habido un error en el formulario. Revísalo :)';

if(!empty($SESSION['error'])) echo $SESSION['error'];

Hay mil formas, esta se me acaba de ocurrir en 1 m.

1 respuesta
s4d1k

#15, gracias, lo probaré ;)

Ya comentaré.

Edit: Apañao, realmente era super sencillo, pero no lo habia pensado asi :P

1 respuesta
Tunnecino

#16 Te lo aclaro por si acaso, la primera línea iría en el archivo que procesa el formulario, y la segunda en donde lo quieres mostrar. Aún así es muy básico, se puede hacer de mil formas, con javascript, con ajax, etc.

2 respuestas
s4d1k

#17, justo cuando editaba has contestado.

Ya lo tengo hecho, si realmente era muy facil xD, gracias por la idea ;)

s4d1k

#17, el único inconveniente que le veo con PHP es que al enviar los datos al server y si hay algo mal, al volver pierdo todo lo escrito...

Con JavaScript puedo tener una capa ahí vacia y si algun campo está vacio le puedo añadir texto verdad?

Tunnecino

Hmmm.. así al voleo, se me ocurre seguir usando session:

$SESSION['Nombre'] = $POST['Nombre'];

Y en el input pones de value="<?php $_SESSION['Nombre']; ?>"

1 respuesta
s4d1k

#20, se me habia ocurrido exactamente lo mismo, pero al final me he decantado por no mandar los datos al servidor y hacerlo con JavaScript, pero tengo la siguiente funcion que me esta mareando porque creo que esta bien pero no rula:

En el formulario, tengo el onsubmit='return validarFormNoticia()'

function validarFormNoticia() {
    var validacion = true;
    var Mostrarerror = "";
    if(document.getElementById("titulo_noticia").value == "") {
        Mostrarerror = "<p>El campo título debe estar rellenado.</p>";
        alert(Mostrarerror);
        validacion = false;
    }
    if(validacion == true) {
        return true;
    } else {
        document.getElementById('errorValidacion').style.display='block';
        return false;
    }
}

Pero la línea

document.getElementById('errorValidacion').style.display='block';

no me la hace y no se porque, porque pienso que está bien.

O sea, tengo una capa oculta que la quiero mostrar cuando ocurra algun error de validacion, pero esa linea no funciona, porque el formulario se envia vacio, o sea que no hace el return false, pero si quito la linea que me falla, el return si que funciona...

Que fallo le veis?

Edit: Los alert y eso los quitaré cuando me funcione del todo, es una prueba, bueno y de paso por favor si me podeis decir como le adjunto el texto que tengo en 'Mostrarerror' a la capa que tengo oculta que es errorValidacion... Gracias!

Usuarios habituales

  • s4d1k
  • Tunnecino
  • tOWERR
  • MrTurbo
  • radykal
  • catalon