formulaires : forcer la saisi! !

formulaires : forcer la saisi! ! - HTML/CSS - Programmation

Marsh Posté le 23-09-2003 à 12:23:02    

Comment forcer l'utilisateur a saisir un nombre dans le formulaire?
 
merci d'avance


Message édité par saxgard le 23-09-2003 à 12:23:34
Reply

Marsh Posté le 23-09-2003 à 12:23:02   

Reply

Marsh Posté le 23-09-2003 à 12:27:36    

Un truc un peu dans ce genre là ?
http://developer.irt.org/script/1717.htm
 
Mais c'est du javascript, mieux vaut prévoir une vérification serveur derrière...

Reply

Marsh Posté le 23-09-2003 à 12:32:36    

fastclemmy a écrit :

Un truc un peu dans ce genre là ?
http://developer.irt.org/script/1717.htm
 
Mais c'est du javascript, mieux vaut prévoir une vérification serveur derrière...


 
ya  pas moyen dans le  "type" du form de dire que c'ets un nombre et d'emepcher la saisi d'une chaine de caractère? :/
 
sinon quelle est la fonction PHP qui permet de tester si la valeur dans le champ est un nombre (décimal)?
j'ai essayer is_float mais ca ne marche pas on dirai qu'il ne teste pas sur la valeur mais sur le type de la variable.
 

Reply

Marsh Posté le 23-09-2003 à 13:50:43    

up

Reply

Marsh Posté le 23-09-2003 à 17:19:49    

up

Reply

Marsh Posté le 23-09-2003 à 18:46:42    

If ((empty($_POST["$var"])) OR (!is_numeric($_POST["var"])))
{echo "message d'erreur et initialisation de $var";}
 
enfin un truc du genre, je sais pas comment tu fais tes contrôles...


Message édité par deliriumtremens le 23-09-2003 à 18:50:56
Reply

Marsh Posté le 23-09-2003 à 18:56:36    

DeliriumTremens a écrit :

If ((empty($_POST["$var"])) OR (!is_numeric($_POST["var"])))
{echo "message d'erreur et initialisation de $var";}
 
enfin un truc du genre, je sais pas comment tu fais tes contrôles...


 
je te remercie j'essayerai ca
 

Reply

Marsh Posté le 23-09-2003 à 19:02:58    

et si tu ne veux pas recharger la page, tu peux rester en javascript (tout en sachant que ça peut être désactivé) avec la fonction prévue à cet effet, isNaN()

Reply

Marsh Posté le 13-10-2003 à 12:14:29    

Voila,
 
j'aimerai savoir si il est possible de forcer la saisi d'uen date dans un formulaire:
 
c'ets a dire de mettre : --/--/-- dans le champ?mais que ca soit des caractères que l'in ne peu pas effacer!

Reply

Marsh Posté le 13-10-2003 à 12:55:07    

Fais trois champs séparés.

Reply

Marsh Posté le 13-10-2003 à 12:55:07   

Reply

Marsh Posté le 13-10-2003 à 13:14:10    

mais il faudra quoiqu'il arrive effectuer un controle serveur ressemblant a ce que propose DeliriumTremens [:spamafote]


---------------
from here and there -- \o__________________________________ -- la révolution de la terre, en silence
Reply

Marsh Posté le 13-10-2003 à 14:36:20    

oui la methode du controle au niveau serveur je la fais deja.
Bon bin je crois que je vais en resté soit a un choix de date dans un menu deroulant retsreint ou alors comme le propose fastclemmy , je vais separer les champs.
 
je vous remercie

Reply

Marsh Posté le 13-10-2003 à 15:04:36    

Voilà une fonction de vérification / formatage de date en javascript
 
Elle est relativement intelligente, par exemple si tu saisi :
1 1 1
dans le champs, elle comprends :
1/1/2001
 
Dans le même ordre d'idée :
12 8 78 => 12/8/1978
120878 => 12/8/1978
12081978 => 12/8/1978
12/08/78 => 12/8/1978
...
 
En fais si année < 50 alors année = année + 2000.
 
Bien sûr tu as le droit de saisir les / :)
 
Exemple d'utilisation :
<input id="date_debut" onChange="javascript:return checkDate(this);" type="text" name=DateDebut" />
 
Mais rien n'empèche un utilisateur de passer outre, donc comme l'ont dit les autres, il faut un vérif coté serveur.
En fait j'ai le même fonction en PHP :D
 

// Vérifie qu'une date est bien saisie dans le format JJ/MM/AAAA
// oDateToCheck est l'objet champs à vérifier
function checkDate( oDateToCheck )
{
 var dDate; // Utilisé pour générer un objet Date
 var nDate; // Utilisé pour générer une référence temporelle numérique !
 
 var aDate; // Tableau des éléments du champs de saisie séparés par de "/"
 
 
 // Messages d'erreur.  
 var sErrFormat = "La date doit être saisie dans le format JJ/MM/AAAA !";
 var sErrFormatJour = "Le jour doit être compris entre 1 et 31 !";
 var sErrFormatMois = "Le mois doit être compris entre 1 et 12!";
 var sErrFormatAnnee = "L'année doit être sur 1,2 ou 4 chiffres !";
 
 // Suppression des espaces du début
 oDateToCheck.value = oDateToCheck.value.replace( /^\s+/, "" );
 
 // Suppression des espaces de fin
 oDateToCheck.value = oDateToCheck.value.replace( /\s+$/, "" );
 
 // Remplacement des espaces par des /
 oDateToCheck.value = oDateToCheck.value.replace( /\s+/, "/" );
 oDateToCheck.value = oDateToCheck.value.replace( /\s+/, "/" );
 oDateToCheck.value = oDateToCheck.value.replace( /\s+/, "/" );
 
 oDateToCheck.ok = false;
 
 //cas d'une date vide
 if( oDateToCheck.value == "" )
 {
  oDateToCheck.ok = true;
  return true;
 }
 
 // Séparation des éléments de la date.
 aDate = oDateToCheck.value.split( "/" );
 
 // On vérifie qu'on a bien 3 éléments  
 if( aDate.length != 3 )
 {
  // S'il n'y as pas de /, on découpe la chaine en 3 si sa longueur est 6 ou 8
  if( aDate.length == 1 )
  {
   if( oDateToCheck.value.length == 6 )
   {
    aDate[0] = oDateToCheck.value.substr( 0, 2);
    aDate[1] = oDateToCheck.value.substr( 2, 2);
    aDate[2] = oDateToCheck.value.substr( 4, 2);
   }
   else if( oDateToCheck.value.length == 8 )
   {
    aDate[0] = oDateToCheck.value.substr( 0, 2);
    aDate[1] = oDateToCheck.value.substr( 2, 2);
    aDate[2] = oDateToCheck.value.substr( 4, 4);
   }
   else
   {
    alert( sErrFormat );
    return false;
   }
  }
  else
  {
   alert( sErrFormat );
   return false;
  }
 }
 
 // On vérifie que c'est bien des nombres
 if( isNaN( aDate[0] ) ||  isNaN( aDate[1] ) || isNaN( aDate[2] )  )
 {
  alert( sErrFormat );
  return false;
 }
 
 // Vérification grossière sur le jour
 if( aDate[0] > 31 || aDate[0] < 1 )
 {
  alert( sErrFormatJour );
  return false;
 }
 
 // Vérification du mois
 if( aDate[1] > 12 || aDate[1] < 1 )
 {
  alert( sErrFormatMois );
  return false;
 }
 
 // Vérifier que l'année est bien sur 1, 2 ou 4 chiffres
 if( aDate[2].length != 1 && aDate[2].length != 2 && aDate[2].length != 4  )
 {
  alert( sErrFormatAnnee );
  return false;
 }
 
 // Si l'année est sur 1 ou 2 chiffres, on la remet sur 4
 if( aDate[2] < 50 )
 {
  aDate[2] = 2000 + parseInt( aDate[2] );
 }
 else
 {
  if( aDate[2] >= 50 && aDate[2] < 100 )
  {
   aDate[2] = 1900 + parseInt( aDate[2] );
  }
 }
 
 // Création d'une référence temporelle numérique à partir des élémentnt de la date  
 nDate = Date.parse( aDate[1] + "/" + aDate[0] + "/" + aDate[2]  );
 
 // Vérification que la référence temporelle est une date valide
 if( isNaN( nDate ) )
 {
  alert( oDateToCheck.value + " n'est pas une date valide !" );
  return false;
 }
 else
 {
  // On renvoie la date formatée
  dDate = new Date( nDate )
  oDateToCheck.value = dDate.getDate() + "/" + ( dDate.getMonth() + 1 ) + "/" + dDate.getFullYear();
  oDateToCheck.ok = true;
  return true;
 }
}


 
Remarque, une date vide est considérée comme bonne !
Le champs était facultatif dans mon appli.


Message édité par Mara's dad le 13-10-2003 à 15:08:56

---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 13-10-2003 à 15:34:13    

Mara's dad a écrit :

Voilà une fonction de vérification / formatage de date en javascript
 
Elle est relativement intelligente, par exemple si tu saisi :
1 1 1
dans le champs, elle comprends :
1/1/2001
 
Dans le même ordre d'idée :
12 8 78 => 12/8/1978
120878 => 12/8/1978
12081978 => 12/8/1978
12/08/78 => 12/8/1978
...
 
En fais si année < 50 alors année = année + 2000.
 
Bien sûr tu as le droit de saisir les / :)
 
Exemple d'utilisation :
<input id="date_debut" onChange="javascript:return checkDate(this);" type="text" name=DateDebut" />
 
Mais rien n'empèche un utilisateur de passer outre, donc comme l'ont dit les autres, il faut un vérif coté serveur.
En fait j'ai le même fonction en PHP :D
 

// Vérifie qu'une date est bien saisie dans le format JJ/MM/AAAA
// oDateToCheck est l'objet champs à vérifier
function checkDate( oDateToCheck )
{
 var dDate; // Utilisé pour générer un objet Date
 var nDate; // Utilisé pour générer une référence temporelle numérique !
 
 var aDate; // Tableau des éléments du champs de saisie séparés par de "/"
 
 
 // Messages d'erreur.  
 var sErrFormat = "La date doit être saisie dans le format JJ/MM/AAAA !";
 var sErrFormatJour = "Le jour doit être compris entre 1 et 31 !";
 var sErrFormatMois = "Le mois doit être compris entre 1 et 12!";
 var sErrFormatAnnee = "L'année doit être sur 1,2 ou 4 chiffres !";
 
 // Suppression des espaces du début
 oDateToCheck.value = oDateToCheck.value.replace( /^\s+/, "" );
 
 // Suppression des espaces de fin
 oDateToCheck.value = oDateToCheck.value.replace( /\s+$/, "" );
 
 // Remplacement des espaces par des /
 oDateToCheck.value = oDateToCheck.value.replace( /\s+/, "/" );
 oDateToCheck.value = oDateToCheck.value.replace( /\s+/, "/" );
 oDateToCheck.value = oDateToCheck.value.replace( /\s+/, "/" );
 
 oDateToCheck.ok = false;
 
 //cas d'une date vide
 if( oDateToCheck.value == "" )
 {
  oDateToCheck.ok = true;
  return true;
 }
 
 // Séparation des éléments de la date.
 aDate = oDateToCheck.value.split( "/" );
 
 // On vérifie qu'on a bien 3 éléments  
 if( aDate.length != 3 )
 {
  // S'il n'y as pas de /, on découpe la chaine en 3 si sa longueur est 6 ou 8
  if( aDate.length == 1 )
  {
   if( oDateToCheck.value.length == 6 )
   {
    aDate[0] = oDateToCheck.value.substr( 0, 2);
    aDate[1] = oDateToCheck.value.substr( 2, 2);
    aDate[2] = oDateToCheck.value.substr( 4, 2);
   }
   else if( oDateToCheck.value.length == 8 )
   {
    aDate[0] = oDateToCheck.value.substr( 0, 2);
    aDate[1] = oDateToCheck.value.substr( 2, 2);
    aDate[2] = oDateToCheck.value.substr( 4, 4);
   }
   else
   {
    alert( sErrFormat );
    return false;
   }
  }
  else
  {
   alert( sErrFormat );
   return false;
  }
 }
 
 // On vérifie que c'est bien des nombres
 if( isNaN( aDate[0] ) ||  isNaN( aDate[1] ) || isNaN( aDate[2] )  )
 {
  alert( sErrFormat );
  return false;
 }
 
 // Vérification grossière sur le jour
 if( aDate[0] > 31 || aDate[0] < 1 )
 {
  alert( sErrFormatJour );
  return false;
 }
 
 // Vérification du mois
 if( aDate[1] > 12 || aDate[1] < 1 )
 {
  alert( sErrFormatMois );
  return false;
 }
 
 // Vérifier que l'année est bien sur 1, 2 ou 4 chiffres
 if( aDate[2].length != 1 && aDate[2].length != 2 && aDate[2].length != 4  )
 {
  alert( sErrFormatAnnee );
  return false;
 }
 
 // Si l'année est sur 1 ou 2 chiffres, on la remet sur 4
 if( aDate[2] < 50 )
 {
  aDate[2] = 2000 + parseInt( aDate[2] );
 }
 else
 {
  if( aDate[2] >= 50 && aDate[2] < 100 )
  {
   aDate[2] = 1900 + parseInt( aDate[2] );
  }
 }
 
 // Création d'une référence temporelle numérique à partir des élémentnt de la date  
 nDate = Date.parse( aDate[1] + "/" + aDate[0] + "/" + aDate[2]  );
 
 // Vérification que la référence temporelle est une date valide
 if( isNaN( nDate ) )
 {
  alert( oDateToCheck.value + " n'est pas une date valide !" );
  return false;
 }
 else
 {
  // On renvoie la date formatée
  dDate = new Date( nDate )
  oDateToCheck.value = dDate.getDate() + "/" + ( dDate.getMonth() + 1 ) + "/" + dDate.getFullYear();
  oDateToCheck.ok = true;
  return true;
 }
}


 
Remarque, une date vide est considérée comme bonne !
Le champs était facultatif dans mon appli.


 
je te remercie

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed