Virgule acceptée dans un formulaire

Signaler
Messages postés
70
Date d'inscription
dimanche 9 août 2009
Statut
Membre
Dernière intervention
19 novembre 2020
-
Messages postés
30234
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
19 novembre 2020
-
Bonjour,

Pourquoi aucune de mes cases n'acceptent de virgules svp ?

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<?php
header('Content-type: text/html; charset=utf-8');
//------------------------------------------------------------//
//Récupération propre des variables:
//------------------------------------------------------------//
$A = isset($_POST['A']) ? (float)$_POST['A'] : 0;
$R = isset($_POST['R']) ? (float)$_POST['R'] : 0;
$C = isset($_POST['C']) ? (float)$_POST['C'] : 0;
$Q = isset($_POST['Q']) ? (float)$_POST['Q'] : 0;
$S = isset($_POST['S']) ? (float)$_POST['S'] : 0;

if($R>0 && $S>0){
$resultat = ($A * $C / $R) * $Q / $S;
}

//------------------------------------------------------------//
//le temps des tests :.
//------------------------------------------------------------//

if(!preg_match("#^[0-9]+$#", $_POST['A'])
|| !preg_match("#^[0-9]+$#", $_POST['R'])
|| !preg_match("#^[0-9]+$#", $_POST['Q'])
|| !preg_match("#^[0-9]+$#", $_POST['S'])){
?>
<form method="post" action="">
<label for="nb_tot_j_tr" class="float">Nombre total de jour de travail à prendre en compte pour le calcul de la durée des vacances : </label>
<p>
<input type="number" name="A" />
</p>
<label for="nb_moy_j_sem" class="float">Nombre moyen de jours par semaine durant lesquels le travailleur est censé travailler sur la base de son contrat : </label>
<p>
<input type="number" name="R" />
</p>
<label for="nb_moy_h_semc" class="float">Nombre moyen d'heures par semaine durant lesquelles le travailleur est censé travailler sur la base de son contrat : </label>
<p>
<input type="number" name="Q" />
</p>
<label for="nb_moy_h_sem" class="float">Nombre moyen d'heures par semaine durant lesquelles un travailleur à temps plein est censé travailler : </label>
<p>
<input type="number" name="S" />
</p>
<input type="hidden" name="C" value="5" />
<input type="submit" value="Calculer" />
</form>
<?php
} else {
if ($resultat >= 0 && $resultat < 10) {
echo 'Vu que vous avez travaillé ' .$resultat.' jour(s) l\'année précédente vous avez droit à aucun jour de congé';
}elseif ($resultat >= 10 && $resultat < 20) {
// on teste si la valeur de notre variable est comprise entre 10 et 19
echo 'Vu que vous avez travaillé ' .$resultat.' jour(s) l\'année précédente vous avez droit à 1 jour de congé';
}elseif ($resultat >= 20 && $resultat < 39) {
// on teste si la valeur de notre variable est comprise entre 20 et 38
echo 'Vu que vous avez travaillé ' .$resultat.' jour(s) l\'année précédente vous avez droit à 2 jours de congés';
}elseif ($resultat >= 39 && $resultat < 48) {
// on teste si la valeur de notre variable est comprise entre 39 et 47
echo 'Vu que vous avez travaillé ' .$resultat.' jour(s) l\'année précédente vous avez droit à 3 jours de congés';
}elseif ($resultat >= 48 && $resultat < 64) {
// on teste si la valeur de notre variable est comprise entre 48 et 63
echo 'Vu que vous avez travaillé ' .$resultat.' jour(s) l\'année précédente vous avez droit à 4 jours de congés';
}elseif ($resultat >= 64 && $resultat < 77) {
// on teste si la valeur de notre variable est comprise entre 64 et 76
echo 'Vu que vous avez travaillé ' .$resultat.' jour(s) l\'année précédente vous avez droit à 5 jours de congés';
}elseif ($resultat >= 77 && $resultat < 87) {
// on teste si la valeur de notre variable est comprise entre 77 et 86
echo 'Vu que vous avez travaillé ' .$resultat.' jour(s) l\'année précédente vous avez droit à 6 jours de congés';
}elseif ($resultat >= 87 && $resultat < 97) {
// on teste si la valeur de notre variable est comprise entre 87 et 96
echo 'Vu que vous avez travaillé ' .$resultat.' jour(s) l\'année précédente vous avez droit à 7 jours de congés';
}elseif ($resultat >= 97 && $resultat < 107) {
// on teste si la valeur de notre variable est comprise entre 97 et 106
echo 'Vu que vous avez travaillé ' .$resultat.' jour(s) l\'année précédente vous avez droit à 8 jours de congés';
}elseif ($resultat >= 107 && $resultat < 125) {
// on teste si la valeur de notre variable est comprise entre 107 et 124
echo 'Vu que vous avez travaillé ' .$resultat.' jour(s) l\'année précédente vous avez droit à 9 jours de congés';
}elseif ($resultat >= 125 && $resultat < 135) {
// on teste si la valeur de notre variable est comprise entre 125 et 134
echo 'Vu que vous avez travaillé ' .$resultat.' jour(s) l\'année précédente vous avez droit à 10 jours de congés';
}elseif ($resultat >= 135 && $resultat < 144) {
// on teste si la valeur de notre variable est comprise entre 135 et 144
echo 'Vu que vous avez travaillé ' .$resultat.' jour(s) l\'année précédente vous avez droit à 11 jours de congés';
}elseif ($resultat >= 144 && $resultat < 154) {
// on teste si la valeur de notre variable est comprise entre 144 et 154
echo 'Vu que vous avez travaillé ' .$resultat.' jour(s) l\'année précédente vous avez droit à 12 jours de congés';
}elseif ($resultat >= 154 && $resultat < 163) {
// on teste si la valeur de notre variable est comprise entre 154 et 162
echo 'Vu que vous avez travaillé ' .$resultat.' jour(s) l\'année précédente vous avez droit à 13 jours de congés';
}elseif ($resultat >= 163 && $resultat < 182) {
// on teste si la valeur de notre variable est comprise entre 163 et 181
echo 'Vu que vous avez travaillé ' .$resultat.' jour(s) l\'année précédente vous avez droit à 14 jours de congés';
}elseif ($resultat >= 182 && $resultat < 192) {
// on teste si la valeur de notre variable est comprise entre 182 et 191
echo 'Vu que vous avez travaillé ' .$resultat.' jour(s) l\'année précédente vous avez droit à 15 jours de congés';
}elseif ($resultat >= 192 && $resultat < 202) {
// on teste si la valeur de notre variable est comprise entre 192 et 201
echo 'Vu que vous avez travaillé ' .$resultat.' jour(s) l\'année précédente vous avez droit à 16 jours de congés';
}elseif ($resultat >= 202 && $resultat < 212) {
// on teste si la valeur de notre variable est comprise entre 202 et 211
echo 'Vu que vous avez travaillé ' .$resultat.' jour(s) l\'année précédente vous avez droit à 17 jours de congés';
}elseif ($resultat >= 202 && $resultat < 221) {
// on teste si la valeur de notre variable est comprise entre 212 et 220
echo 'Vu que vous avez travaillé ' .$resultat.' jour(s) l\'année précédente vous avez droit à 18 jours de congés';
}elseif ($resultat >= 221 && $resultat < 231) {
// on teste si la valeur de notre variable est comprise entre 221 et 230
echo 'Vu que vous avez travaillé ' .$resultat.' jour(s) l\'année précédente vous avez droit à 19 jours de congés';
}elseif ($resultat >= 231 && $resultat > 231) {
// on teste si la valeur de notre variable est comprise entre 231 et 230
echo 'Vu que vous avez travaillé ' .$resultat.' jour(s) l\'année précédente vous avez droit à 20 jours de congés';

} else {
// si les deux tests précédents n'ont pas aboutis, alors on tombe dans ce cas
echo '';
}
}
?>


Configuration: Windows / Chrome 86.0.4240.198

4 réponses

Messages postés
30234
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
19 novembre 2020
2 993
Bonjour

Essaye avec
<input type="number" step="any" />


Messages postés
70
Date d'inscription
dimanche 9 août 2009
Statut
Membre
Dernière intervention
19 novembre 2020

Cela ne change rien sa me demande un entier
Messages postés
30234
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
19 novembre 2020
2 993
Avec l'attribut step="any" tu devrais pouvoir mettre des float
par contre, le séparateur décimal, c'est le point.

Si tu veux utiliser comme séparateur, la virgule, dans ce cas il te faudra passer par un input type text et utiliser du javascript pour autoriser que les caractères désirés... mais ça risque de te poser des soucis pour ensuite utiliser ces nombres dans tes calculs en php.
Messages postés
70
Date d'inscription
dimanche 9 août 2009
Statut
Membre
Dernière intervention
19 novembre 2020

Même avec les points sa passe pas
Messages postés
30234
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
19 novembre 2020
2 993
Tu parles bien de tes inputs comme
 <input type="number" name="R"  />


Et donc, si tu les remplace par
 <input type="number" name="R"  step="any" />

ça ne marche pas ??

Tu as vidé le cache de ton navigateur ?

Au pire, remplace le "any" par 0.01
 <input type="number" name="R"  step="0.01" />


si ça ne fonctionne toujours pas, montre nous ton code modifié et précise nous quel navigateur internet tu utilises.
Le cache de mon navigateur est vide c'est chrome, voici le code
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<?php
header('Content-type: text/html; charset=utf-8');
 //------------------------------------------------------------//
 //Récupération propre des variables:
 //------------------------------------------------------------//
$A = isset($_POST['A']) ? (float)$_POST['A'] : 0;
$R = isset($_POST['R']) ? (float)$_POST['R'] : 0;
$C = isset($_POST['C']) ? (float)$_POST['C'] : 0;
$Q = isset($_POST['Q']) ? (float)$_POST['Q'] : 0;
$S = isset($_POST['S']) ? (float)$_POST['S'] : 0; 

if($R>0 && $S>0){
 $resultat = ($A * $C / $R) * $Q / $S;
}

//------------------------------------------------------------//
//le temps des tests :.
//------------------------------------------------------------//

if(!preg_match("#^[0-9]+$#", $_POST['A'])
   || !preg_match("#^[0-9]+$#", $_POST['R']) 
   || !preg_match("#^[0-9]+$#", $_POST['Q'])  
   || !preg_match("#^[0-9]+$#", $_POST['S'])){
?>
<form method="post" action="">
 <label for="nb_tot_j_tr" class="float">Nombre total de jour de travail à prendre en compte pour le calcul de la durée des vacances : </label>
 <p>
 <input type="number" name="A" step="0.01" />
 </p>
 <label for="nb_moy_j_sem" class="float">Nombre moyen de jours par semaine durant lesquels le travailleur est censé travailler sur la base de son contrat : </label>
 <p>
 <input type="number" name="R" step="0.01" />
 </p>
 <label for="nb_moy_h_semc" class="float">Nombre moyen d'heures par semaine durant lesquelles le travailleur est censé travailler sur la base de son contrat : </label>
 <p>
 <input type="number" name="Q" step="0.01" />
 </p>
 <label for="nb_moy_h_sem" class="float">Nombre moyen d'heures par semaine durant lesquelles un travailleur à temps plein est censé travailler : </label>
 <p>
 <input type="number" name="S" step="0.01" />
 </p>
 <input type="hidden" name="C" value="5" />
 <input type="submit" value="Calculer" />
</form>
<?php
} else {
 if ($resultat >= 0 && $resultat < 10) {
    echo 'Vu que vous avez travaillé ' .$resultat.' jour(s) l\'année précédente vous avez droit à aucun jour de congé';
 }elseif ($resultat >= 10 && $resultat < 20) {
  // on teste si la valeur de notre variable est comprise entre 10 et 19
   echo 'Vu que vous avez travaillé ' .$resultat.' jour(s) l\'année précédente vous avez droit à 1 jour de congé';
  }elseif ($resultat >= 20 && $resultat < 39) {
  // on teste si la valeur de notre variable est comprise entre 20 et 38
   echo 'Vu que vous avez travaillé ' .$resultat.' jour(s) l\'année précédente vous avez droit à 2 jours de congés';
 }elseif ($resultat >= 39 && $resultat < 48) {
  // on teste si la valeur de notre variable est comprise entre 39 et 47
   echo 'Vu que vous avez travaillé ' .$resultat.' jour(s) l\'année précédente vous avez droit à 3 jours de congés';
 }elseif ($resultat >= 48 && $resultat < 64) {
  // on teste si la valeur de notre variable est comprise entre 48 et 63
   echo 'Vu que vous avez travaillé ' .$resultat.' jour(s) l\'année précédente vous avez droit à 4 jours de congés';
   }elseif ($resultat >= 64 && $resultat < 77) {
  // on teste si la valeur de notre variable est comprise entre 64 et 76
   echo 'Vu que vous avez travaillé ' .$resultat.' jour(s) l\'année précédente vous avez droit à 5 jours de congés';
      }elseif ($resultat >= 77 && $resultat < 87) {
  // on teste si la valeur de notre variable est comprise entre 77 et 86
   echo 'Vu que vous avez travaillé ' .$resultat.' jour(s) l\'année précédente vous avez droit à 6 jours de congés';
   }elseif ($resultat >= 87 && $resultat < 97) {
  // on teste si la valeur de notre variable est comprise entre 87 et 96
   echo 'Vu que vous avez travaillé ' .$resultat.' jour(s) l\'année précédente vous avez droit à 7 jours de congés';
   }elseif ($resultat >= 97 && $resultat < 107) {
  // on teste si la valeur de notre variable est comprise entre 97 et 106
   echo 'Vu que vous avez travaillé ' .$resultat.' jour(s) l\'année précédente vous avez droit à 8 jours de congés';
   }elseif ($resultat >= 107 && $resultat < 125) {
  // on teste si la valeur de notre variable est comprise entre 107 et 124
   echo 'Vu que vous avez travaillé ' .$resultat.' jour(s) l\'année précédente vous avez droit à 9 jours de congés';
   }elseif ($resultat >= 125 && $resultat < 135) {
  // on teste si la valeur de notre variable est comprise entre 125 et 134
   echo 'Vu que vous avez travaillé ' .$resultat.' jour(s) l\'année précédente vous avez droit à 10 jours de congés';
   }elseif ($resultat >= 135 && $resultat < 144) {
  // on teste si la valeur de notre variable est comprise entre 135 et 144
   echo 'Vu que vous avez travaillé ' .$resultat.' jour(s) l\'année précédente vous avez droit à 11 jours de congés';
   }elseif ($resultat >= 144 && $resultat < 154) {
  // on teste si la valeur de notre variable est comprise entre 144 et 154
   echo 'Vu que vous avez travaillé ' .$resultat.' jour(s) l\'année précédente vous avez droit à 12 jours de congés';
   }elseif ($resultat >= 154 && $resultat < 163) {
  // on teste si la valeur de notre variable est comprise entre 154 et 162
   echo 'Vu que vous avez travaillé ' .$resultat.' jour(s) l\'année précédente vous avez droit à 13 jours de congés';
   }elseif ($resultat >= 163 && $resultat < 182) {
  // on teste si la valeur de notre variable est comprise entre 163 et 181
   echo 'Vu que vous avez travaillé ' .$resultat.' jour(s) l\'année précédente vous avez droit à 14 jours de congés';
  }elseif ($resultat >= 182 && $resultat < 192) {
  // on teste si la valeur de notre variable est comprise entre 182 et 191
   echo 'Vu que vous avez travaillé ' .$resultat.' jour(s) l\'année précédente vous avez droit à 15 jours de congés';
  }elseif ($resultat >= 192 && $resultat < 202) {
  // on teste si la valeur de notre variable est comprise entre 192 et 201
   echo 'Vu que vous avez travaillé ' .$resultat.' jour(s) l\'année précédente vous avez droit à 16 jours de congés';
  }elseif ($resultat >= 202 && $resultat < 212) {
  // on teste si la valeur de notre variable est comprise entre 202 et 211
   echo 'Vu que vous avez travaillé ' .$resultat.' jour(s) l\'année précédente vous avez droit à 17 jours de congés';
  }elseif ($resultat >= 202 && $resultat < 221) {
  // on teste si la valeur de notre variable est comprise entre 212 et 220
   echo 'Vu que vous avez travaillé ' .$resultat.' jour(s) l\'année précédente vous avez droit à 18 jours de congés';
  }elseif ($resultat >= 221 && $resultat < 231) {
  // on teste si la valeur de notre variable est comprise entre 221 et 230
   echo 'Vu que vous avez travaillé ' .$resultat.' jour(s) l\'année précédente vous avez droit à 19 jours de congés';
  }elseif ($resultat >= 231 && $resultat > 231) {
  // on teste si la valeur de notre variable est comprise entre 231 et 230
   echo 'Vu que vous avez travaillé ' .$resultat.' jour(s) l\'année précédente vous avez droit à 20 jours de congés';

  } else {
    // si les deux tests précédents n'ont pas aboutis, alors on tombe dans ce cas
    echo '';
  }
}
?>

je me demande si mon problème ne vient pas de mon preg_match
Messages postés
30234
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
19 novembre 2020
2 993 > tzmagnum
Déjà,
ça serait bien d'utiliser correctement les balises de code en y précisant le langage ( je viens d'éditer ton précédent message pour le mettre)


Explications à lire ENTIEREMENT disponibles ici : https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code


Ensuite,
tu demandais pourquoi tes cases n'autorisaient pas les nombres à virgule ....
Je pensais que tu ne pouvais pas écrire dedans ... pas que tu avais un souci ensuite au submit ...

Donc oui, c'est bien tes regex qui ne sont pas bonnes
essayes avec
^[0-9\.]+$