Jan
lundi 1 novembre 2004 à 21:49
Bonjour,
Tu peux procéder de la façon suivante:
- tu inclues dans ton formulaire un champ caché dont la seule utilité est d'indiquer au serveur lors de la soumission si javascript est activé (et donc si PHP peut se contenter d'une vérification "légère", le gros de la vérification ayant été fait par javascript)
- lors de la soumission du formulaire, tu exécutes la vérification en javascript, et tu modifies la valeur de ce champ caché, toujours en js. A ce stade si js est activé, la vérification est faite ET le champ caché positionné. Dans le cas contraire, la vérification js n'est pas faite, mais le champ caché garde sa valeur par défaut
- ainsi lors de l'envoi au serveur, il ne reste plus à PHP qu'à tester la valeur du champ caché pour savoir si la vérification js a été faite, ou si au contraire il faut tout vérifier en PHP.
Un peu compliqué dans le principe, mais très simple dans l'implémentation. Ca donne ça:
CODE
<?php
if (isset($_POST["envoyer"])) { // l'utilisateur a soumis le formulaire
if ($_POST["jsactif"]=="non") { // le javascript de vérif des données n'a pas été exécuté: le faire en php
....
}
else { // i.e. $_POST["jsactif"]=="oui", le javascript de vérif des données a pas été exécuté: une vérif légère en php suffit
....
}
}
?>
<html>
<head>
...
<script type="text/javascript" language="JavaScript">
<!--
function verif(formulaire)
{
// vérification des champs et positionnement du flag erreur si une erreur est rencontrée
....
if (erreur) { // erreur: on informe l'utilisateur mais on ne soumet pas le formulaire
alert ('Erreur dans un des champs du formulaire.');
return false;
}
else { // pas d'erreur, on soumet le formulaire
// sans oublier de positonner le champ caché pour indiquer au serveur que la vérif js a été faire
formulaire.jsactif.value="oui";
return true;
}
// -->
</script>
</head>
<body>
....
<form action="<?php echo $_SERVER["PHP_SELF"] ?>" method="post" name="tonformulaire" onsubmit="return verif(this);">
...
<input type="hidden" name="jsactif" value="non">
<input name="envoyer" type="submit" value="Envoyer">
</form>
....
</body>
</html>