Page 1 sur 1

Empêcher l'envoi d'un formulaire vide sans utiliser JS

Publié : 11 mai 2005, 01:48
par Nerva
Bonjour.

J'utilise le script suivant pour interdire l'envoi d'un formulaire (en PHP et MySql) vide :

Code : Tout sélectionner

<script>
function test_form(messageID, expediteurID)
{
	if(messageID.value=="")
   		{
			alert('Vous devez écrire un message !')
       		messageID.focus();return false 
		}
	if(expediteurID.value=="")
		{
			alert('Vous devez taper un pseudo !')
       		expediteurID.focus();return false
		}
	return true
}
</script>
Le problème, c'est qu'il suffit de désactiver l'option JavaScript pour pouvoir l'envoyer quand même !
Quel autre méthode simple d'interdiction est disponible ?

Merci.

Publié : 11 mai 2005, 02:08
par jv2759
Ce n'est pas possible, pour la simple et bonne résont que pour envoyer les formulaire on passe par cgi qui n'est en fait que des ajout au html. Donc le systéme n'est pas capable de connetre la logique de la pages elle même...

La seul chose que tu peux faire c'est interdire de traiter un formulaire vide mais pas empecher qu'il soit envoyer...

Publié : 11 mai 2005, 09:23
par golemboy
je confirme ce qu'a dit jv2759 pour le formulaire vide, par contre tu peux recharger la page du formulaire s'il est renvoyé vide avec un petit message d'erreur (pas une alerte).
je te conseil de lire l'article d'openweb sur la validation des formulaires

Publié : 11 mai 2005, 16:36
par JulienA
Pour empêcher qu'un formulaire soit envoyé si l'utilisateur a desactivé le javascript, c'est très simple. Ton formulaire :

Code : Tout sélectionner

<form id="formulaire" action="javascript:void(0)" method="post">
...
Ton script de vérification :

Code : Tout sélectionner

<script>
function test_form(messageID, expediteurID)
{
   if(messageID.value=="")
         {
         alert('Vous devez écrire un message !')
             messageID.focus();return false
      }
   if(expediteurID.value=="")
      {
         alert('Vous devez taper un pseudo !')
             expediteurID.focus();return false
      }
   form=document.getElementById("formulaire");
   form.setAttribute("action","l'url de traitement");
   form.submit();
}
</script>

Publié : 11 mai 2005, 21:18
par calimo
Ah non, non NON !!!!! Pas ça !!! :x :x :evil:

Comment quelqu'un qui n'a pas le javascript peut-il l'envoyer ? Il ne le peut pas, ce qui est encore pire que la situation précdente. C'est absolument inadmissible !
Un peu de lecture ne te ferait pas de mal : http://openweb.eu.org/articles/validation_formulaire/ et j'espère que tu n'as pas trop de formulaires dans ce style (ou alors tu va aller corriger ça immédiatement)


Le traitement des données doit se faire côté serveur et le javascript ne doit être considéré que comme un petit plus pour éviter l'envoi du formulaire si on sait qu'il n'est pas bon et que ça permet de gagner du temps. En aucun cas il ne doit dépendre de javascript !

Publié : 11 mai 2005, 21:47
par JulienA
Tu as tout à fait raison. J'aurais du préciser que ce n'était pas recommandé. Je voulais juste démontrer que c'était... possible :roll:

Publié : 12 mai 2005, 17:24
par Gasp
et en PHP avec un isset, ça devrait être possible non ?

Code : Tout sélectionner

<?
if (isset ($_POST['pseudo']))
{

   if ($_POST['pseudo'] != NULL)
     {
     ... exécution de l'action ...
     }

}
?>
Ou alors je me trompe complètement de problème (ce qui est tout à fait possible, je débute...)

Publié : 12 mai 2005, 18:10
par calimo
Il y a un problème avec les isset c'est que parfois ils sont remplis s'il y avait un champ dans le formulaire envoyé, ainsi $_POST['pseudo']="" est "set" même s'il est vide. Par contre tu peux faire une petite règle du style

Code : Tout sélectionner

if $_POST['pseudo']!="" {...}
Je dis parfois parce que j'ai l'impression que ça dépend, des fois les champs sont vides d'autres pas, j'ai jamais trop compris :|

Publié : 12 mai 2005, 19:31
par Gasp
c'est pour ça qu'il faut rajouter :

Code : Tout sélectionner

if ($_POST['pseudo'] != NULL)
Et pour être sur on peut rajouter un isset sur $_POST['message'] et rajouter $_POST['message'] != NULL

normalement ça fonctionne...

Publié : 13 mai 2005, 10:34
par olab
Plutôt que d'utiliser deux comparaisons, tu peux tout simplement utiliser

Code : Tout sélectionner

if (!empty($trucmuche)) {
...
}