Interdire la saisie d'une date antérieur à la 1er date saisie

bruno3591 Messages postés 155 Date d'inscription dimanche 28 septembre 2008 Statut Membre Dernière intervention 28 mars 2010 - 24 oct. 2008 à 20:51
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 - 25 oct. 2008 à 14:11
Bonsoir,

Je me sers d'un code java script pour afficher un calendrier qui permet de saisir une date au format Fr.

J'ai un formulaire avec 2 champs date que je remplis avec ce code. J'aimerais que l'utilisateur ne puisse pas saisir une 2eme date plus récente que la 1er date saisie. Que mes 2 champs date ne fonctionnent que dans un sens.
Voici le code :

<style><![CDATA[

td {font-family:Tahoma;font-size:12px}
]]></style>

11 réponses

bruno3591 Messages postés 155 Date d'inscription dimanche 28 septembre 2008 Statut Membre Dernière intervention 28 mars 2010
24 oct. 2008 à 20:52
<style><![CDATA[

td {font-family:Tahoma;font-size:12px}
]]></style>
0
bruno3591 Messages postés 155 Date d'inscription dimanche 28 septembre 2008 Statut Membre Dernière intervention 28 mars 2010
24 oct. 2008 à 20:53
<style>

td {font-family:Tahoma;font-size:12px}
</style>

<script language="javascript">
moisX=["","Janvier","Fevrier","Mars","Avril","Mai","Juin","Juillet","Aout","Septembre","Octobre","Novembre","Decembre"];
JourM=["Di","Lu","Ma","Me","Je","Ve","Sa"];

var fermable_microcal=true;
var select_old= null;

var startWeek=0;//debut de la semaine 0=dim,1=lun,...
var jourPause={0:true,6:true}; //jour de pause de la semaine
var jourFeriee={"1-1":"jour an","1-5":"fête du travail","8-5":"armistice","14-7":"fête nationale","15-8":"ascencion","1-11":"armistice","11-11":"toussain","25-12":"noel"};

//structure la date
function strucDate(dateX)
{return {"pos":dateX.getDay(),"jour":dateX.getDate(),"mois":dateX.getMonth()+1,"annee":dateX.getFullYear()};}


var dateS= strucDate(new Date());//date Selectionné
var dnow= strucDate(new Date());//date actuelle


//retourne le ième jour du 1er du mois
function premJourMois(mois,annee)
{return (new Date(annee,mois-1,1).getDay());}
//retourne le jour max du mois
function JmaxMois(mois,annee)
{return (new Date(annee,mois,0).getDate());}


/* Test une date si elle est correct...spécial killer*/
function testTypeDate(dateEntree)
{
tst=false;
try
{rc=dateEntree.split("/");nd=new Date(rc[2],(rc[1]-1),rc[0]);
tst=(rc[2]>1800&&rc[2]<2200&&rc[2]==nd.getFullYear()&&rc[1]==(nd.getMonth()+1)&&rc[0]==nd.getDate());
} catch(e) {}
return tst;
}

//selection de la zone avec la souris
function choix(koi,code)
{
if (code)
{ select_old= koi.style.background;
koi.style.background ='#c0c0FF';
}
else
{
koi.style.background =select_old;
}
}


function testTravail(oldX,xx,jj,mm,aa)
{
styleX="font-family:Tahoma;font-size:10px;text-align:center;";
styleX+=(oldX)?"":"color:#e0e0e0;";
styleX+="cursor:hand;border-right:1px #e0e0e0 solid;border-bottom:1px #e0e0e0 solid;";
if (jourPause[xx]||jourFeriee[jj+"-"+mm]!=null) styleX+="background:#f0f0f0;";
if (jj==dnow.jour&&mm==dnow.mois&&aa==dnow.annee) styleX+="border:2px red solid;";
return styleX;
}

//test si année bissextile
function bissextile(annee) {
return (annee%4==0 && annee %100!=0 || annee%400==0);
}

//Retourne le nombre de jour depuis le 1er janvier (num de semaine)
function nbJAnnee(dateX){
var nb_mois=[,0,31,59,90,120,151,181,212,243,273,304,334];
j=dateX.jour ; m=dateX.mois ; a=dateX.annee;
nb=nb_mois[m]+j-1 ;
if (bissextile(a) && m>2) nb++;
return nb;
}

//affiche le calendrier
function view_microcal(actif,ki,source,mxS,axS)
{
if (actif)
{
//decalage du mois su on clique sur -/+
if (mxS!=-1)
{
clearTimeout(cc);
ki.focus();
fermable_microcal=true;
dateS.mois=mxS;
dateS.annee=axS;
if (dateS.mois<1) {dateS.annee--;dateS.mois+=12;}
if (dateS.mois>12) {dateS.annee++;dateS.mois-=12;}
}
//init
Dstart=(premJourMois(dateS.mois,dateS.annee)+7-startWeek)%7;
jmaxi=JmaxMois(dateS.mois,dateS.annee);
jmaxiAvant=JmaxMois((dateS.mois-1),dateS.annee);
//si on veux ajouter le numero de la semaine ...
//idxWeek=parseInt(nbJAnnee(strucDate(new Date(dateS.mois+'-01-'+dateS.annee)))/7,10)+1;

ymaxi=parseInt((jmaxi+Dstart+1)/7,10);

//generation du tableau
//--entête
htm="\";
htm+=\"-, \";
htm+=\" "+moisX[dateS.mois]+" "+dateS.annee+", \";
htm+=\"+, \";
//--corps
htm+=\"----
\";
//affichage des jours DLMMJVS
for (x=0;x<7;x++)
htm+=\""+JourM[(x+startWeek)%7]+", \";
htm+=\"\"

//------------------------
for (y=0;y<=ymaxi;y++)
{
htm+=\"----
\";
for (x=0;x<7;x++)
{
idxP=y*7+x-Dstart+1; //numero du jour
aa=dateS.annee;
xx=(x+startWeek)%7;
//jour du mois précedent
if (idxP<=0)
{
jj=idxP+jmaxiAvant;mm=dateS.mois-1;
if (mm==0)
{mm=12;aa--;}
htm+=\""+jj+", \";
}
else if (idxP>jmaxi) //jour du mois suivant
{
jj=idxP-jmaxi;mm=dateS.mois+1;
if (mm==13)
{mm=1;aa++;}

htm+=\""+jj+", \";}
else //jour du mois en cours
{
jj=idxP;mm=dateS.mois;
htm+=\""+jj+", \";}
}
htm+=\"\"
}//-------------------------
htm+="
"
//affiche le tableau
source.innerHTML=htm;
source.style.visibility="";
} else
{
//ferme le calendrier
if (fermable_microcal)
cc=setTimeout(source.id+".style.visibility='hidden'",500);
}
}

</script>
0
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
25 oct. 2008 à 10:51
bonjour,

c'est bien le javascript donné... mais à quoi sert-il pour la question ?

>>J'ai un formulaire avec 2 champs date que je remplis avec ce code.

>>J'aimerais que l'utilisateur ne puisse pas saisir une 2eme date plus
récente que la 1er date saisie.

j'eusse préféré le formulaire avec ces 2 champs, ainsi que le contrôle que tu fais et quand !
mais un if ( date2 < date1 ) { erreur } suffira probablement !

Cordialement

          Bul
0
bruno3591 Messages postés 155 Date d'inscription dimanche 28 septembre 2008 Statut Membre Dernière intervention 28 mars 2010
25 oct. 2008 à 11:27
Bonjour Bultez,

effectivement donner le code du calendrier ne va pas beaucoup aider, je n'étais pas réveillé :)

Voici le code avec le contrôle que tu proposes. Mais ça ne fonctionne toujours pas. Je peux toujours enregistrer date2 < date1 alors que j'aimerais date1 > date2

<?php
include('connection.inc.php');

if((isset($_POST['enregistrer'])) || ($dateDebut > $dateFin))
{
$id = $_POST['id'];
$nom = $_POST['liste1'];
$dateDebut = $_POST['dateDebut'];
$dateFin = $_POST['dateFin'];
$nature = $_POST['nature'];
$nbjour = $_POST['nbjour'];

$req = mysql_query("INSERT INTO absence (id, nom, nature, nbjour, debut, fin) VALUES ('','$nom','$nature','$nbjour',STR_TO_DATE(' $dateDebut', '%d/%m/%Y'),STR_TO_DATE('$dateFin', '%d/%m/%Y') )");
}

?>
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
25 oct. 2008 à 11:42
toujours pas éveillé ? à 11h30 ? la bringue vendredi soir ?
qu'est-ce que ce php vient faire ici ?  sur le forum dhtml/javascript !
mais bon... ($dateDebut > $dateFin)   t'es sûr ?
et que contiennent donc ces $dateXXX ?
quel est le format de saisie de ces dates ?
à priori tu fais une comparaison en caractères (?)
et aussi, "23/10/1933" c'est > à "20/10/2008"  par exemple....
          Bul
0
bruno3591 Messages postés 155 Date d'inscription dimanche 28 septembre 2008 Statut Membre Dernière intervention 28 mars 2010
25 oct. 2008 à 11:56
Pas de problème pour déplacer ce sujet si un modérateur passe par là.

Même pas la bringue hier soir ! :)
Les $dateXXX contiennent une date au format jj/mm/aaaa.

Qu'appelles-tu une comparaison en caractères ?
0
bruno3591 Messages postés 155 Date d'inscription dimanche 28 septembre 2008 Statut Membre Dernière intervention 28 mars 2010
25 oct. 2008 à 12:00
Voici la partie du formulaire contenant les champs date :

<TD></TD>
<td>

</td>
<TH>Au</TH>
<TD></TD>
<td>

</td>
0
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
25 oct. 2008 à 12:08
>>Les $dateXXX contiennent une date au format jj/mm/aaaa.


>>Qu'appelles-tu une comparaison en caractères ?
si tu fais     if (  '26/03/1922' >  '23/10/2008' )
                  ça donne : oui, c'est supérieur
                  caractère par caractère, 2 :: 2 c'est = , 6 :: 3 c'est >
                                le test retourne donc true.

          Bul
0
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
25 oct. 2008 à 12:10
alors soit tu convertis les dates en aaaa/mm/jj soit tu utilises date(...)
          Bul
0
bruno3591 Messages postés 155 Date d'inscription dimanche 28 septembre 2008 Statut Membre Dernière intervention 28 mars 2010
25 oct. 2008 à 13:59
Ok j'ai compris le principe concernant les caractères. php ne voit pas un date proprement dîte mais de simple caractères mit bout à bout.

Convertir en aaaa/mm/jj je le fais déjà mais dans la requête d'insertion avec STR_TO_DATE.

"soit tu utilises date(...)" ?? Pas compris m'sieur :)
0
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
25 oct. 2008 à 14:11
>>php ne voit pas un date proprement dîte mais de simple caractères mit bout à bout.

car tu lui donne une chaîne de caractères !
il ne peut pas deviner.
en php aussi, tu as ce qu'il faut comme fonction pour transformer
    une chaîne de caractère en un "variable date".
je pense qu'il vaudrait mieux transformer en aaaa/mm/jj  ? peut-être me trompe-je !
          Bul
0
Rejoignez-nous