Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 07/12/2014, à 22:23

gringo75

PHP/mysql : Utilisation de date_format() et de now()

Bonjour à tous,
J'ai une page avec une requête préparée (qui fonctionne nickel).
Tous mes éléments sont envoyés par formulaire sauf la date car je veux la date du moment où j'ai envoyé mon formulaire donc la date de l'enregistrement sur serveur.
Voici le code de ma page accueil_website.php :

<!DOCTYPE html>

<html>

<head>
	<title>Formulaire du site web</title>
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
	<link rel="stylesheet" type="text/css" href="css/style.css" />
</head>

<body>
<div>
<div class="accueil">
<h3>Envoi des liens vers la base de données de mon site web perso</h3>
</div>

<div class="accueil">
<form method="post" action="accueil_website.php">
	<label for="sujet">Sujet:</label><input type="text" name="sujet" /><br/>
	<label for="url">Url:</label><input type="text" name="url" /><br/>
	<label for="rubrique">Rubrique:</label><input type="text" name="rubrique" /><br/>
	<label for="type">Type:</label><input type="text" name="type" /><br/>
	<label for="sous_rubrique">Sous-rubrique:</label><input type="text" name="sous_rubrique" /><br/>
	<label for="description">Description:</label><textarea type="text" name="description" rows="2" cols=55 /></textarea><br/>

	<label for="submit">Actualiser BDD</label><input type="submit" value="OK" />	
	<br />
</form>
</div>

<?php
try
{
	$bdd=new PDO('mysql:host=localhost;dbname=nom_bdd','root','mdp', array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'utf8\''));
}

// En cas d'erreur, on affiche un message et on arrête tout
catch (Exception $e) 
{
	die('Erreur:'.$e->getMessage());
}

?>

<?php

	$req = $bdd->prepare('INSERT INTO nom_table(sujet, url, rubrique, type, sous_rubrique, description, date) VALUES(:sujet, :url, :rubrique, :type, :sous_rubrique, :description, now())');
	$req->execute(array(
		'sujet'=>$_POST['sujet'],
		'url'=>$_POST['url'],
		'rubrique'=>$_POST['rubrique'],
		'type'=>$_POST['type'],
		'sous_rubrique'=>$_POST['sous_rubrique'],
		'description'=>$_POST['description'],
	));



?>

=>Là c'est nickel MAIS ça se corse quand je souhaite utiliser date_format() pour ne pas avoir la date au format US mais au format '%d %b %Y %T:%f' en utilisant date_format() pour avoir une date "personnalisée" type : 04 Nov 2008 11:45:34:243 .

Dans la ligne concernée, j'écris :

$req = $bdd->prepare('INSERT INTO nom_table(sujet, url, rubrique, type, sous_rubrique, description, DATE_FORMAT(date,\'%d %b %Y %T:%f\')) VALUES(:sujet, :url, :rubrique, :type, :sous_rubrique, :description, now())');

=>Là ça ne fonctionne pas !
Si quelqu'un pouvait m'aider.
Merci d'avance

Dernière modification par gringo75 (Le 07/12/2014, à 22:26)

Hors ligne

#2 Le 08/12/2014, à 00:05

Rufus T. Firefly

Re : PHP/mysql : Utilisation de date_format() et de now()

Salut,

Je crois qu'il y a plusieurs erreurs.

INSERT INTO nom_table(sujet, url, rubrique, type, sous_rubrique, description, DATE_FORMAT(date,\'%d %b %Y %T:%f\'))

Après insert into, tu as le nom de la table, ça c'est bon, la liste des champs concernés, - les noms des champs tels qu'ils ont été définis lors de la création de la table -, et enfin la liste des valeurs correspondantes.
Or là, tu essaye de formater un nom de champ, même pas une valeur...

Ensuite, tu ne peux pas faire n'importe quoi : ça dépend du type de champ que tu as défini lors de la création de la table, ce qui indique à mysql la nature des données dans ce champ, et donc le mécanisme à utiliser pour les stocker, pour optimiser, etc. Si tu indiques un type "date" (voir dans la doc de mysql à quoi ça correspond), d'abord il va rejeter tout ce qu'il n'arrive pas à comprendre comme une donnée de ce type, en particulier une date dont la syntaxe n'est pas correcte (2014-12-08 : correct, 12 décembre : probablement incorrect) et ensuite il va de toutes façons le convertir en son format interne de gestion des dates (2014-12-08 et éventuellement l'heure)

De toutes façons, le format, au sens de la présentation, n'a d'intérêt qu'au moment de la lecture des données. Au moment de leur stockage, c'est mysql qui décide, en fonction du type de champ que tu as indiqué.

La solution la plus élégante, dans ton cas, c'est tout simplement un champ de type "timestamp" (voir dans la doc) qui stocke automatiquement la date où la requête d'insertion a été faite. Du coup, tu ne t'en préoccupes même pas, de la date...

Et c'est à la lecture du champ (requête select) que tu formates de la manière dont tu le souhaites, selon le contexte... Ou même avec php, lors du traitement du résultat de select... Un truc de ce genre :

function ts_to_date($ts) { // convertit un timestamp en date au format jour/mois/année
	if ($ts == 0) {
		return '';
	}
	return date('d/m/Y', $ts);
}

Edit : tu ferais bien d'activer l'affichage des erreurs dans /etc/php5/apache2/php.ini
error_reporting = E_ALL
display_errors = On

Dernière modification par Rufus T. Firefly (Le 08/12/2014, à 00:19)


La provocation est une façon de remettre la réalité sur ses pieds. (Bertolt Brecht)
Il n'y a pas de route royale pour la science et ceux-là seulement ont chance d'arriver à ses sommets lumineux qui ne craignent pas de se fatiguer à gravir ses sentiers escarpés. (Karl Marx)
Il est devenu plus facile de penser la fin du monde que la fin du capitalisme

Hors ligne