Le Web devient de plus en plus “interactif”. Les utilisateurs sont de plus en plus souvent sollicités par des sites qui récupèrent les informations personnelles qu’ils veulent bien communiquer. Ces sites sont construits autour de deux axes: récupérer et traiter les données, stocker les données. Pour ce qui est de récupérer et traiter les données, le plus facile et le plus rapide à mettre en oeuvre reste la solution JavaScript et PHP. Pour le stockage des données, dans la plupart des cas c’est le moteur de base de données MySQL qui s’impose. Dans la plupart des cas, certaines données sont des dates: une date d’anniversaire fournie par l’utilisateur, une date d’inscription enregistrée au moment de la première connexion de l’utilisateur, etc. Or, MySQL utilise un format de dates qui déroute totalement les utilisateurs. Comment, dès lors, présenter aux utilisateurs un format auquel ils sont habitués et à MySQL le format exigé pour l’enregistrement des données dans une colonne de type DATE ?
1. Technologies et méthode employées
Dans notre exemple, les données sont collectées depuis un formulaire HTML par un script PHP (par l’intermédiaire de la variable globale $_POST). Ces données sont au préalable vérifiées grâce à un script JavaScript. Une fois vérifiées et collectées, elle doivent être enregistrées dans la base de données MySQL, grâce à un script PHP. Finalement, les données collectées doivent pouvoir être extraites de la base de données MySQL pour être affichées à l’écran par un script PHP.
Plus précisément, nous allons récupérer une date au format MM/JJ/AAAA, contrôler que ce format est respecté, la transformer au format AAAA-MM-JJ, et l’insérer dans la base de données. Ensuite, nous récupérerons la date au format AAAA-MM-JJ pour la reconvertir dans un format plus lisible par l’utilisateur et l’afficher à l’écran.
2. Contrôle du format de la date avec JavaScript.
Il existe deux méthodes pour contrôler les données. La “bonne vieille” méthode et la méthode élégante utilisant les expressions régulières (Regex). Nous allons détailler la “bonne vieille” méthode et faire une allusion rapide aux expressions régulières, qui seront développées par la suite lors de leur utilisation dans le script PHP.
a. Avec la “bonne vieille” méthode
La première chose à faire est de définir, dans le code HTML, le nom ou l’identifiant du champ qui contiendra la date. Ici, il s’agit d’un champ de type input qui porte le nom de date.
<input name=”date” type=”text”>
La deuxième chose à faire est invoquer le script JavaScript de contrôle dans le formulaire, pour que les données soient contrôlées quand l’utilisateur clique sur le bouton de soumission. Dans notre exemple, le nom du formulaire est soumettre et il utilise la méthode post. Les données sont transmises au code PHP en invoquant le fichier script.php. Enfin, avant soumission des données, la méthode JavaScript completude() est appelée, avec pour argument le formulaire lui-même.
<form name=”soumettre” method=”post” action=”script.php” onSubmit=”return completude(this);”>
Il faut ensuite définir la fonction completude() dans le code JavaScript. Dans un premier temps, on crée la fonction et on récupère le contenu du champ date créé ci-avant.
{
/* Ceci est le message qui sera affiché avec alert() si les données fournies ne conviennent pas. Pour l’instant, il est vide ca tout va bien */
var msg = “”;
/* On récupère le contenu du champ date */
var daten = objet.date.value;
Une fois cela fait, il faut vérifier que l’information entrée dans le champ est bien une date, et que celle-ci est correctement formatée. Il faut pour cela procéder en 3 temps:
- vérifier qu’il y a bien deux délimiteurs slash (/) (la date s’écrit au format JJ/MM/AAAA)
- vérifier que le jour et le mois sont exprimés sur 2 chiffres et l’année sur 4 chiffres
- vérifier que le jour est compris entre 01 et 31, le mois entre 01 et 12, et l’année, par exemple, supérieure à 1900.
Première étape.
On brise la chaîne qui contient la date en plusieurs morceaux. Ces morceaux sont déterminés par le délimiteur spécifié, le slash dans notre exemple (/). Ce programme va parcourir la chaîne jusqu’à trouver le délimiteur, toutes les données avant le délimiteur formeront le premier membre (le jour). Puis, il va continuer à parcourir la chaîne juqu’à trouver un second délimiteur pour former le second membre (le mois). Finalement, ce qui restera sera le troisième membre (l’année).
var temp = new Array();
temp = daten.split(‘/’);
/*
Le jour est désormais contenu dans la variable temp[0].
Le mois est désormais contenu dans la variable temp[1].
L’année est désormais contenue dans la variable temp[2].
*/
Si temp[2] est nul c’est qu’il n’y a pas d’année. Si temp[1] est nul, c’est qu’il n’y a pas de mois. Si temp[0] est nul c’est qu’il n’y a pas de jour. Dans tous les cas, la date n’est pas valable. Il faut donc qu’aucun des membres de temp ne soit nul.
if(temp[0] == null || temp[1] == null || temp[2] == null)
msg += “Veuillez formater la date au format indiqué: \n\nJJ/MM/AAAA \n\n JJ représente le jour sur 2 chiffres \n MM représente le mois sur 2 chiffres \n AAAA représente l’année sur 4 chiffres “;
// Sinon, la date a le bon séparateur (“/”)
else
{
/* Pour améliorer la lisibilité du programme, on stocke le jour dans “j”, le mois dans “m” et l’année dans “a”. */
j = temp[0];
m = temp[1];
a = temp[2];
Deuxième étape
Le test passé avec succès, on peut continuer. On va maintenant contrôler que chaque membre a le bon nombre de chiffres. Le jour et le mois sont exprimés sur 2 chiffres, l’année sur 4 chiffres.
if(j.length < 2)
msg += "Format de date incorrect. \nVeuillez entrer le jour sur 2 chiffres.";
if(m.length < 2)
msg += "Format de date incorrect. \nVeuillez entrer le mois sur 2 chiffres.";
if(a.length < 4)
msg += "Format de date incorrect. \nVeuillez entrer l'année sur 4 chiffres.";
Troisième étape
Il ne reste plus qu’à contrôler que le jour est bien compris entre 01 et 31, le mois entre 01 et 12 et l’année, dans notre exemple, postérieure à 1900.
if(!(j >= 01 && j < = 31))
msg += "Format de date incorrect. \nLe jour doit être compris entre 01 et 31.";
if(!(m >= 01 && m < = 12))
msg += "Format de date incorrect. \nLe mois doit être compris entre 01 et 12.";
if(!(a >= 1900 && a < = 2100))
msg += "Format de date incorrect. \nL'année doit être comprise entre 1900 et 2100.";
Finition
Comme on l’a dit plus haut, cette fonction est appelée lors de la soumission du formulaire. En réalité, elle est appelée juste avant que le formulaire soit soumis, et elle a une influence sur le processus. Si elle retourne TRUE, le formulaire sera soumis. Si elle retourne FALSE, le formulaire ne sera pas soumis. Il faut donc maintenant définir si elle doit retourner TRUE ou FALSE.
Au début de la fonction, nous avons créé la variable vide msg. Si elle est restée vide, c’est qu’il n’y a pas de message d’erreur et tout va bien: on renvoie TRUE. Si elle n’est plus vide c’est qu’elle contient un message d’erreur: il faudra renvoyer FALSE et afficher ce message.
if (msg == “”) return(true);
/* Ne pas l’envoyer… et afficher le message d’erreur */
else
{
alert(msg);
return(false);
}
b. Avec les expressions régulières
Tout ceci peut également être fait beaucoup plus rapidement, en utilisant les expressions régulières.
var pattern=”XXX”; /* v. plus bas, dans le code PHP, pour les expressions régulières */
var bool;
bool = pattern.test(daten);
if(!bool)
msg += “Format de date incorrect….”;
3. Formater la date pour MySQL
a. Récupérer les données
Avant de formater la date, il faut la récupérer. Pour cela, on utilisera la variable $_POST. Pour plus d’informations à ce sujet, v. Construire une base de données simple avec PHP et MySQL. Une fois la date récupérer, on la passe à la méthode formater(), détaillée plus bas.
$date = $_POST["date"];
formater($date,true);
b. La fonction formater(): principe
La fonction formater() a pour but de transformer la date du format JJ/MM/AAAA, lisible par l’utilisateur, vers le format AAAA-MM-JJ, exploitable par MySQL. Elle admet deux arguments. Le premier argument est la date à formater (une chaîne de caractères). Le second argument est une variable booléene, qui prend les valeurs TRUE ou FALSE. Cela nous permettra plus tard d’opérer la conversion dans le sens inverse (AAAA-MM-JJ vers JJ/MM/AAAA): selon que la valeur est TRUE ou FALSE, la conversion s’effectue dans un sens ou dans l’autre.
b. La fonction formater(): implémentation
Voici notre fonction:
{
// JJ/MM/AAAA => AAAA-MM-JJ
if($vers_mysql)
{
$pattern = “`([0-9]{2})/([0-9]{2})/([0-9]{4})`”;
$replacement = “$3-$2-$1″;
}
// AAAA-MM-JJ => JJ/MM/AAAA
else
{
$pattern = “`([0-9]{4})-([0-9]{2})-([0-9]{2})`”;
$replacement = “$3/$2/$1″;
}
return preg_replace($pattern, $replacement, $date);
}
Il convient d’expliquer cette fonction. Trois choses sont remarquables: la fonction preg_replace(), la variable $pattern et la variable $replacement.
La fonction preg_replace() telle qu’utilisée ici analyse $date au regard de $pattern, qui décrit la structure de la date, puis construit et renvoie une nouvelle chaîne, avec les éléments de $date, formatée selon les spécifications de $replacement.
La variable $pattern est une expression régulière qui se décompose ainsi: un bloc A, un slash, un bloc B, un slash, un bloc C: A/B/C. Le bloc A est le suivant: ([0-9]{2}). Cela signifie deux chiffres compris entre 0 et 9. Le bloc B est identique au bloc A. Le bloc C est légèrement différent, puisqu’il correspond à l’année: ([0-9]{4}) signifie quatre chiffres compris entre 0 et 9.
Autrement dit, le programme comprend l’expression ([0-9]{2})/([0-9]{2})/([0-9]{4}) comme un être humain comprendrait la phrase suivante: un élément de 2 chiffres entre 0 et 9, une barre oblique, un élément de 2 chiffres entre 0 et 9, une barre oblique, un élément de 4 chiffres entre 0 et 9.
On l’aura compris, [0-9] signifie entre 0 et 9 et {2} signifie deux chiffres. Les parenthèses servent à délimiter les blocs (A, B et C dont on parlait plus haut). Notre but final est de changer l’ordre de ces blocs: de A/B/C vers C-B-A.
La variable $replacement définit le nouveau placement des blocs: $3-$2-$1. La parenté de cette expression réelle avec l’exemple théorique C-B-A est évident. Cette expression demande au programme de placer le troisième bloc, puis un tiret, puis le deuxième bloc, puis un tiret, et enfin le premier bloc.
Voilà comment passer de JJ/MM/AAAA vers AAAA-MM-JJ. Pour effectuer l’opération inverse, le raisonnement est le même, mais les expressions régulières changent un peu (v. le code ci-dessus).
4. Insérer la date dans la base de données MySQL et l’en extraire
Pour insérer la date dans MySQL, il suffira d’une instruction SQL basique: INSERT INTO… Pour plus de précisions, v. Construire une base de données simple avec PHP et MySQL.
Pour extraire la date et l’afficher à l’écran, il suffira de réutiliser la fonction formater(), en réglant cette fois la variable booléenne sur FALSE.
while($data = mysql_fetch_assoc($sql))
$date = formater($data["date"],false);
…
echo “La date est: $date”;
Pour aller plus loin
Nous avons utilisé ici le format européen de dates: JJ/MM/AAAA. Mais aux Etats-Unis, c’est le format américain qui est utilisé: MM/JJ/AAAA. Une solution bien pratique serait de détecter la langue du visiteur pour écrire la date dans le format auquel il est habitué.
Pour déterminer la langue du visiteur, on peut dans la majorité des cas se fier à la langue de son navigateur. Cette dernière s’obtient grâce à une variable globale PHP: $_SERVER["HTTP_ACCEPT_LANGUAGE"]. Cette variable contiendra en principe un tableau indiquant quelles langues sont gérées par le navigateur. La première, exprimée en 2 lettres, est la langue principale. Il s’agit de “fr” pour le français, de “es” pour l’espagnol et de “en” pour l’anglais.
$langue = substr($_SERVER["HTTP_ACCEPT_LANGUAGE"], 0, 2);
On peut ensuite rajouter un argument pour la langue à notre fonction formater():
{
if($langue == “en”)
{
if($vers_mysql)
// regex 1 – format américain
else
//regex 2 – format américain
{
else
{
if($vers_mysql)
// regex 1 – format européen
else
//regex 2 – format européen
}
}
{ 18 comments… read them below or add one }
Pour ma part, je préfère poser un petit calendrier graphique à coté de la zone d’input associé avec le code javascript qui insère automatiquement la date.
On en trouve assez facilement sur internet.
Reste à empecher l’utilisateur de faire une saisie manuelle, source de bétises éventuelles.
Ce qui est fait avec le code suivant par exemple:
Merci pour cet article fort intéressant.
Bonjour,
J’ai suivi votre exemple car j’ai besoin à partir d’un formulaire de rentrer une date et de l’envoyer avec les autres infos des autres champs dans la table user_dbl de ma BDD et aussi l’affichage de cette date ainsi que les autres données dans une page, donc cette méthode décrite ici me paraît idéal, mais je rencontre un problème lorsque je test ce script, un message d’erreur qui est :
“Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in C:\wamp\www\BaseTelecharg\EssaiFromulaire\formulaire.php on line 112″
ligne 112 :
while($data = mysql_fetch_assoc ($sql))
Je ne comprends pas et n’arrive pas à régler ce prb d’erreur ainsi que le contrôle de ce champ ne fonctionne pas !!!
Le code de la page d’essai de ce script qui se nome formulaire.php :
Formulaire
<!–
function completude(objet)
{
/* Ceci est le message qui sera affiché avec alert() si les données fournies ne conviennent pas. Pour l’instant, il est vide ca tout va bien */
var msg = “”;
/* On récupère le contenu du champ date */
var daten = objet.date.value;
/* On brise la chaîne… */
var temp = new Array();
temp = daten.split(‘/’);
/*
Le jour est désormais contenu dans la variable temp[0].
Le mois est désormais contenu dans la variable temp[1].
L\’année est désormais contenue dans la variable temp[2].
*/
/* Si le séparateur de date n’est pas “/”: afficher un message d’erreur */
if(temp[0] == null || temp[1] == null || temp[2] == null)
msg += “Veuillez formater la date au format indiqué: \n\nJJ/MM/AAAA \n\n JJ représente le jour sur 2 chiffres \n MM représente le mois sur 2 chiffres \n AAAA représente l’année sur 4 chiffres “;
// Sinon, la date a le bon séparateur (”/”)
else
{
/* Pour améliorer la lisibilité du programme, on stocke le jour dans “j”, le mois dans “m” et l’année dans “a”. */
j = temp[0];
m = temp[1];
a = temp[2];
/* Contrôler que le jour, le mois et l’année sont bien à 2 et 4 chiffres. */
if(j.length < 2)
msg += “Format de date incorrect. \nVeuillez entrer le jour sur 2 chiffres.”;
if(m.length < 2)
msg += “Format de date incorrect. \nVeuillez entrer le mois sur 2 chiffres.”;
if(a.length 1900 */
if(!(j >= 01 && j = 01 && m = 1900 && a
AAAA-MM-JJ
if($vers_mysql)
{
$pattern = “‘([0-9]{2})/([0-9]{2})/([0-9]{4})’”;
$replacement = “$3-$2-$1″;
}
// AAAA-MM-JJ => JJ/MM/AAAA
else
{
$pattern = “‘([0-9]{4})-([0-9]{2})-([0-9]{2})’”;
$replacement = “$3/$2/$1″;
}
return preg_replace($pattern, $replacement, $date);
}
while($data = mysql_fetch_assoc ($sql))
$date = formater($data["date"],false);
echo “La date est: $date”;
//on ferme la connexion à mysql
mysql_close();
?>
date
Le code de la page script.php :
<?php
# ************ Config de connexion des Membres de la page admin.php ***************
// connexion à la base de donnée
include(‘../Connections/connexConfig.php’);
//Sélection de la table
mysql_select_db($database_connexConfig,$connexConfig)or die(‘Erreur de selection’.mysql_error()); ;
//$login = mysql_real_escape_string(htmlspecialchars($_POST['login']));
//$mdp = md5($_POST['mdp']);
$date = mysql_real_escape_string(htmlspecialchars($_POST['date']));
$sql = “INSERT INTO user_dbl VALUES(”,”, ”, ‘$date’)”;
mysql_query($sql) or die(‘Erreur SQL !’.$sql.”.mysql_error());
echo ‘infos ajoutées.’;
header (“Refresh: 5;URL=formulaire.php”);
//on ferme la connexion à mysql
mysql_close();
?>
Le code de la page connexConfig.php
?php
# FileName=”Connection_php_mysql.htm”
# Type=”MYSQL”
# HTTP=”true”
$hostname_connexConfig = “localhost”;
$database_connexConfig = “telechargements”;
$username_connexConfig = “root”;
$password_connexConfig = “”;
$connexConfig = mysql_pconnect($hostname_connexConfig, $username_connexConfig, $password_connexConfig) or trigger_error(mysql_error(),E_USER_ERROR);
define(‘DB_TABLE_DL’, ‘gestiondl’);
define(‘NB_DL_PAR_PAGE’, 10);
mysql_select_db($database_connexConfig, $connexConfig);
?>
Ma table SQL :
– phpMyAdmin SQL Dump
– version 2.10.1
– http://www.phpmyadmin.net
–
– Serveur: localhost
– Généré le : Jeu 15 Mai 2008 à 01:11
– Version du serveur: 5.0.45
– Version de PHP: 5.2.5
SET SQL_MODE=”NO_AUTO_VALUE_ON_ZERO”;
–
– Base de données: `telechargements`
–
– ——————————————————–
–
– Structure de la table `user_dbl`
–
CREATE TABLE `user_dbl` (
`id` smallint(6) NOT NULL auto_increment,
`login` varchar(25) NOT NULL,
`mdp` varchar(50) NOT NULL,
`date` date NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
–
– Contenu de la table `user_dbl`
–
Merci de votre aide !!!
Pour utiliser mysql_fetch_assoc, il faut avoir deux choses : 1) une connexion active au serveur MySQL ; 2) une requête.
L’erreur vient du fait que la fonction mysql_fetch_assoc admet une requête comme argument, et non une chaîne de texte.
Voilà ce qu’on devrait écrire :
$sql = “SELECT…”;
$requete = mysql_query($sql);
while( $data = mysql_fetch_assoc($requete) ) { }
En plus compressé :
while( $data = mysql_fetch_assoc( mysql_query( “SELECT…” ) ) ) { }
ma une connexion active au serveur
//Sélection de la table
mysql_select_db($database_connexConfig,$connexConfig)or die(’Erreur de selection’.mysql_error());
L’erreur vient du fait que la fonction mysql_fetch_assoc admet une requête comme argument, et non une chaîne de texte.
Je ne comprends pas!
Peux tu dévellopper à partir des infos que j’ai données ?
Pourquoi la vérification du format de la date en javascript ne fonctionne pas ?
Merci de ton aide !!
Comment ça tu ne comprends pas ? Je te donne un exemple tout fait dans mon précédent message…
Bon, reprenons.
1) L’erreur que tu indiques : “Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource” indique que la fonction mysql_fetch_assoc ne reçoit pas le bon argument.
Tu lui passes en effet en argument une chaîne de texte (avec $sql = “SELECT machin FROM truc”, $sql est une chaîne de texte), alors qu’il faut lui passer une ressource contenant les résultats renvoyés par MySQL.
Il faut donc procéder en deux temps :
- Créer la requête : $sql =”SELECT…”;
- Créer la ressource : $req = mysql_query($sql)
Ce n’est qu’ensuite que tu pourras passer la ressource en argument : mysql_fetch_assoc($req) dans ta boucle while.
2) Cela n’a rien à voir avec JavaScript. Ton code JavaScript ne fonctionne pas parce qu’un code JavaScript doit être appelé dans le header de la page ou, s’il est appelé dans le corps, le buffer doit être vidé immédiatement.
Autrement dit, tu as 2 possibilités :
- Mettre ton code JS entre les balises < header > et < / header > de la page générée par PHP.
- Le laisser dans le corps, mais appeler immédiatement après flush() et ob_flush() plusieurs fois. Voir cet article sur la technique du flush.
mouai je comprends bien ce que tu veux dire, mais c’est ds l’écriture que cela ne va pas, j’ai procéder ainsi:
le code dans la page formulaire :
AAAA-MM-JJ
if($vers_mysql)
{
$pattern = “‘([0-9]{2})/([0-9]{2})/([0-9]{4})’”;
$replacement = “$3-$2-$1″;
}
// AAAA-MM-JJ => JJ/MM/AAAA
else
{
$pattern = “‘([0-9]{4})-([0-9]{2})-([0-9]{2})’”;
$replacement = “$3/$2/$1″;
}
return preg_replace($pattern, $replacement, $date);
}
while($data = mysql_fetch_assoc ($req))
$date = formater($data["date"],false);
echo “La date est: $date”;
//on ferme la connexion à mysql
mysql_close();
?>
Tjrs erreur :
“Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in”
modifier pour le code javascript dans le head de la page :
mais cela ne marche pas pour la vérif avec le contenu du champ date
Formulaire
<!–
function completude(objet)
{
/* Ceci est le message qui sera affiché avec alert() si les données fournies ne conviennent pas. Pour l’instant, il est vide ca tout va bien */
var msg = “”;
/* On récupère le contenu du champ date */
var daten = objet.date.value;
/* On brise la chaîne… */
var temp = new Array();
temp = daten.split(‘/’);
/*
Le jour est désormais contenu dans la variable temp[0].
Le mois est désormais contenu dans la variable temp[1].
L\’année est désormais contenue dans la variable temp[2].
*/
/* Si le séparateur de date n’est pas “/”: afficher un message d’erreur */
if(temp[0] == null || temp[1] == null || temp[2] == null)
msg += “Veuillez formater la date au format indiqué: \n\nJJ/MM/AAAA \n\n JJ représente le jour sur 2 chiffres \n MM représente le mois sur 2 chiffres \n AAAA représente l’année sur 4 chiffres “;
// Sinon, la date a le bon séparateur (”/”)
else
{
/* Pour améliorer la lisibilité du programme, on stocke le jour dans “j”, le mois dans “m” et l’année dans “a”. */
j = temp[0];
m = temp[1];
a = temp[2];
/* Contrôler que le jour, le mois et l’année sont bien à 2 et 4 chiffres. */
if(j.length < 2)
msg += “Format de date incorrect. \nVeuillez entrer le jour sur 2 chiffres.”;
if(m.length < 2)
msg += “Format de date incorrect. \nVeuillez entrer le mois sur 2 chiffres.”;
if(a.length 1900 */
if(!(j >= 01 && j = 01 && m = 1900 && a
1) Dans ton code (post #6), je ne vois toujours pas la création de la ressource avec mysql_query… Tant que tu ne feras pas cela tu auras le même message d’erreur. J’ai déjà expliqué 2 fois comment résoudre le problème, il n’y a pas grand chose que je puisse faire de plus. Je te conseille cet article pour les bases.
C’est parti pour un copier/coller.
Remplace :
while($data = mysql_fetch_assoc ($req))
par :
$db = mysql_connect(“ip_hote”, “nom_user”, “mdp_user”); // mettre les bonnes données
mysql_select_db(“nom_de_la_base”,$db); // mettre les bonnes données
$sql = “SELECT * FROM user_dbl”;
$req = mysql_query($sql);
while($data = mysql_fetch_assoc ($req))
echo “Login: “.$data['login'].”, Date: “.formater($data['date'],false).”
\n”;
Si ça ne marche toujours pas, il faudra chercher le problème ailleurs (mauvaise configuration MySQL ?).
2) Pour le JS (post #7), le code donné est correct. Utilise un débuggeur JS pour voir que est le message d’erreur. Sans cela, c’est un peu difficile de dire ce qui cloche. Avec le message d’erreur (et la ligne de code défectueuse), on y verra plus clair.
L’enregistrement se fait ds ma BDD à chaque fois que je clique sur envoyer mais il enregistre à chaque fois 00/00/0000
le contrôle du format et de l’écriture de la date via le javascript ne fonctionne pas.
Parcontre si je rentre la date au fromat us : 2008/05/17
cela fonctionne la date est écrite dans la table de ma BDD
Donc 2 prb le prb lorsque l’écriture de la date et en FR et le controle de la date
Ma page formulaire.php :
Formulaire
<!–
function completude(objet)
{
/* Ceci est le message qui sera affiché avec alert() si les données fournies ne conviennent pas. Pour l’instant, il est vide ca tout va bien */
var msg = “”;
/* On récupère le contenu du champ date */
var daten = objet.date.value;
/* On brise la chaîne… */
var temp = new Array();
temp = daten.split(‘/’);
/*
Le jour est désormais contenu dans la variable temp[0].
Le mois est désormais contenu dans la variable temp[1].
L\’année est désormais contenue dans la variable temp[2].
*/
/* Si le séparateur de date n’est pas “/”: afficher un message d’erreur */
if(temp[0] == null || temp[1] == null || temp[2] == null)
msg += “Veuillez formater la date au format indiqué: \n\nJJ/MM/AAAA \n\n JJ représente le jour sur 2 chiffres \n MM représente le mois sur 2 chiffres \n AAAA représente l’année sur 4 chiffres “;
// Sinon, la date a le bon séparateur (”/”)
else
{
/* Pour améliorer la lisibilité du programme, on stocke le jour dans “j”, le mois dans “m” et l’année dans “a”. */
j = temp[0];
m = temp[1];
a = temp[2];
/* Contrôler que le jour, le mois et l’année sont bien à 2 et 4 chiffres. */
if(j.length < 2)
msg += “Format de date incorrect. \nVeuillez entrer le jour sur 2 chiffres.”;
if(m.length < 2)
msg += “Format de date incorrect. \nVeuillez entrer le mois sur 2 chiffres.”;
if(a.length 1900 */
if(!(j >= 01 && j = 01 && m = 1900 && a
AAAA-MM-JJ
if($vers_mysql)
{
$pattern = “‘([0-9]{2})/([0-9]{2})/([0-9]{4})’”;
$replacement = “$3-$2-$1″;
}
// AAAA-MM-JJ => JJ/MM/AAAA
else
{
$pattern = “‘([0-9]{4})-([0-9]{2})-([0-9]{2})’”;
$replacement = “$3/$2/$1″;
}
return preg_replace($pattern, $replacement, $date);
}
//while($data = mysql_fetch_assoc ($req))
mysql_select_db($database_connexConfig,$connexConfig); // mettre les bonnes données
$sql = “SELECT * FROM user_dbl”;
$req = mysql_query($sql);
while($data = mysql_fetch_assoc ($req))
echo “Login: “.$data['login'].” Date: “.formater($data['date'],false).” \n”;
$date = formater($data["date"],false);
echo “La date est: $date”;
//on ferme la connexion à mysql
mysql_close();
?>
date
Remplace tout ton code JavaScript par alert(“ok ça marche”) et exécute le programme. Si tu n’as pas le message “ok ça marche” c’est que le code JS n’est pas exécuté.
Comme je l’ai dit plus haut, le code JS doit soit être placé in extenso dans le header de la page HTML, soit placé dans un fichier .js qui sera appelé dans le header. Ta fonction JS comme ça, au beau milieu d’un code PHP, ça ne peut pas fonctionner.
Ensuite, si le problème vient d’une erreur de syntaxe, utilise un débuggeur (Outils > Console d’erreurs, dans Firefox) et donne la ligne exacte qui pose problème.
PS : pas besoin de recopier tout ton code à chaque fois…
le code est bien plassé ds le head de la page , j’ai fait le test et cela ne fonctionne pas pas message d’alerte !
le code est ainsi :
Formulaire
<!–
function completude(objet)
{
/* Ceci est le message qui sera affiché avec alert() si les données fournies ne conviennent pas. Pour l’instant, il est vide ca tout va bien */
var msg = “”;
/* On récupère le contenu du champ date */
var daten = objet.date.value;
/* On brise la chaîne… */
var temp = new Array();
temp = daten.split(‘/’);
/*
Le jour est désormais contenu dans la variable temp[0].
Le mois est désormais contenu dans la variable temp[1].
L\’année est désormais contenue dans la variable temp[2].
*/
/* Si le séparateur de date n’est pas “/”: afficher un message d’erreur */
if(temp[0] == null || temp[1] == null || temp[2] == null)
msg += “Veuillez formater la date au format indiqué: \n\nJJ/MM/AAAA \n\n JJ représente le jour sur 2 chiffres \n MM représente le mois sur 2 chiffres \n AAAA représente l’année sur 4 chiffres “;
// Sinon, la date a le bon séparateur (”/”)
else
{
/* Pour améliorer la lisibilité du programme, on stocke le jour dans “j”, le mois dans “m” et l’année dans “a”. */
j = temp[0];
m = temp[1];
a = temp[2];
/* Contrôler que le jour, le mois et l’année sont bien à 2 et 4 chiffres. */
if(j.length < 2)
msg += “Format de date incorrect. \nVeuillez entrer le jour sur 2 chiffres.”;
if(m.length < 2)
msg += “Format de date incorrect. \nVeuillez entrer le mois sur 2 chiffres.”;
if(a.length 1900 */
if(!(j >= 01 && j = 01 && m = 1900 && a
AAAA-MM-JJ
if($vers_mysql)
{
$pattern = “‘([0-9]{2})/([0-9]{2})/([0-9]{4})’”;
$replacement = “$3-$2-$1″;
}
// AAAA-MM-JJ => JJ/MM/AAAA
else
{
$pattern = “‘([0-9]{4})-([0-9]{2})-([0-9]{2})’”;
$replacement = “$3/$2/$1″;
}
return preg_replace($pattern, $replacement, $date);
}
//while($data = mysql_fetch_assoc ($req))
mysql_select_db($database_connexConfig,$connexConfig); // mettre les bonnes données
$sql = “SELECT * FROM user_dbl”;
$req = mysql_query($sql);
while($data = mysql_fetch_assoc ($req))
echo “Login: “.$data['login'].” Date: “.formater($data['date'],false).” \n”;
// $date = formater($data["date"],false);
//echo “La date est: $date”;
//on ferme la connexion à mysql
mysql_close();
?>
date
bref je ne parviens pas mettre tout le code de ma page ici,
même avec la balise
qui parmet de placer du code en xhtml….Bref, mon code est bien placer dans de ma page.
le message d’alerte ne fonctionne pas !
et ici je ne peux pas placer tout le code de ma page
Si le message d’alerte ne fonctionne pas, c’est que le code JS n’est pas exécuté. C’est donc soit que ton navigateur n’est pas compatible, soit que le code est mal placé. Ne cherche pas plus loin.
Le code source de ma page formulaire.php est dispo sur ce lien: http://lecarnetdevoyages.free.fr/Code.php
Le JS est bien placer dans le head de la page !
et pourtant cela ne fonctionne tjrs pas
bon maintenant le test d’alert en JS ca marche, mais visiblement avec le script de contrôle du format de la droite cela ne fonctionne pas
Je continu à chercher !
Ben si… mais il faut récupérer la valeur de retour dans une variable. Sinon, forcément, la fonction “formater” s’exécute dans le vide.
Le problème est là :
$date = $_POST["date"];
formater($date,true);
Il faut écrire :
$date = formater($_POST['date'],true);
Et après il suffira d’insérer : INSERT INTO ma_table (col1,…) VALUES (‘$date’,…)
J’aiessayé avec ta nouvelle ligne d’instruction mais cela ne change en rien sur le fait que le controle du format en JS ne fonctionne pas.
J’ai rajouté un liens pour le code de la page script qui traite les données du formulaire
http://lecarnetdevoyages.free.fr/Code.php
Merci de ton aide !!
Reman
Regarde le débuggeur et donne le message d’erreur.
Au passage, essaye de réécrire tes champs :
< input type="text" name="truc" value="" />