Page 1 sur 3

[PROBLEME URGENT] fonction js undefined

Posté : 07 mai 2007, 12:12
par eLman
Bonjour,

Voila mon problème, qui est, c'est évident, une anerie à la con que j'espère vous

pourrez détecter rapidement :

Je dois réaliser un formulaire et je veux avant de l'envoyer tester les champs.
J'ai donc une fonction toute simple en javascript qui donne :

Code : Tout sélectionner

<!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"> <head> <script language=javascript> function validateFormMembre(form) { if (isNotEmpty(form.login,'','Le login est obligatoire.')) { if (isNotEmpty(form.nom,'','Le nom est obligatoire.')) { if (isNotEmpty(form.prenom,'','Le pr&eacute;nom est obligatoire.')) { if (isNotEmpty(form.mdp,'','Le mot de passe est obligatoire.')) { if (isNotEmpty(form.selecttcmpt,'','Le type du compte de passe est obligatoire.')) { return true; } } } } } return false; } </script> </head> <body>
Voici mon formulaire avec le onsubmit :

Code : Tout sélectionner

<FORM name="formember" Action="......" METHOD=post onSubmit="return validateFormMembre(this)">
Rien ne se passe lorsque j'envoi un formulaire vide, donc la fonction n'a pas

"fonctionnée" ..
Pour voir d'où cela pouvait venir j'ai testé sa valeur de retour :

Code : Tout sélectionner

<?php $tst = validateFormMembre(formember); echo''.$tst.''; ?>
Et la il me dit :
Fatal error: Call to undefined function: validateFormMembre()

QUEL EST LE PROBLEME !!
Non la j'avoue que je ne comprend plus rien du tout pourquoi n'est elle pas

définie ?!

Je vous remercie d'avance.

Posté : 07 mai 2007, 12:21
par Truc
Modération :
Tes délais ne nous intéressent pas.
Nous savons que tu es en difficulté puisque tu demandes de l'aide,
mais nous sommes tous bénévoles et répondons selon nos disponibilités.

Merci de ne pas s'impatienter.


Pour ton souci:
  1. 1. <script language=javascript> mal placé, doit encapsuler le "javascript" ni plus ni moins.

    2. C'est du javascript =>
    1. 2.1 Mauvais forum
      2.2 Tu ne peux l'appeler en tant que fonction PHP ! Donc pas de "echo" mais un "alert()" bien placé.
    3.la fonction demande un paramètre que tu ne passes pas dans l'événement "onsubmit"

Posté : 07 mai 2007, 12:25
par eLman
Je vous remercie de votre aide.
Ma balise script est bien placée je m'étais jsute tromper dans mon c/c lors du premier post, et il en est de même pour le paramètre de la fonction.

Ok je comprend que je ne puisse l'appeller en tant que fct php en revanche dans le onsubmit apparement (j'ai testé par des alert dans la fonction) celle cie n'est pas appelée ... il ne la trouve pas ...

Posté : 07 mai 2007, 12:35
par Truc
Elle existe la fonction "isNotEmpty()" ?

Décompose... effectue test après test (if).

Posté : 07 mai 2007, 12:38
par Sékiltoyai
Balise correctement ausi, c'est source de très nombreux problème. Il faut mettre balise et attributs en minuscules, et ne pas oublier les guillemets autour des valeurs des attributs...

Posté : 07 mai 2007, 12:50
par eLman
Balise correctement ausi, c'est source de très nombreux problème. Il faut mettre balise et attributs en minuscules, et ne pas oublier les guillemets autour des valeurs des attributs...
Tu penses que de mettre les balises en minuscules notamment le "FORM" peut être la source de l'erreur ?!
Et je ne vois pas de quelles valeurs d'attributs tu veux parler.
Elle existe la fonction "isNotEmpty()" ?

Décompose... effectue test après test (if).
Apparement il n'execute même pas la fonction :x
J'essairai tout ça cette après midi et je vous tiens au courant ;)

Posté : 07 mai 2007, 13:13
par sadeq
hormis le fait que tu ne peux appeller une fonction javascript par php, ton code javascript ne déclare pas la fonction isNotEmpty

Par exemple:

Code : Tout sélectionner

<html> <head> <script language="javascript"> function validateFormMembre(form) { if (isNotEmpty(form.login,'','Le login est obligatoire.')) { if (isNotEmpty(form.nom,'','Le nom est obligatoire.')) { if (isNotEmpty(form.prenom,'','Le prénom est obligatoire.')) { if (isNotEmpty(form.mdp,'','Le mot de passe est obligatoire.')) { if (isNotEmpty(form.selecttcmpt,'','Le type du compte de passe est obligatoire.')) { return true; } } } } } return false; } function isNotEmpty(elem, valeur, message) { if(elem.value==valeur){ alert (message); elem.focus(); //pointer la zone à erreur return false; } else { return true; } } </script> </head> <body> Voici mon formulaire avec le onsubmit : Code: <FORM name="formember" action="" method="get" onSubmit="return validateFormMembre(this);" > <p>Login*<input name="login" > <p>Nom*<input name="nom" > <p>Prénom*<input name="prenom" > <p>Mot de passe*<input name="mdp" type="password"> <p>Type de compte*<input name="selecttcmpt" > <p><input type="submit" value="Ok" > <input type="reset" value="Effacer"> </FORM> </html>

Posté : 07 mai 2007, 13:55
par eLman
voici la mienne :

Code : Tout sélectionner

// Vérifie si un champ a bien été renseigné function isNotEmpty(elem,msg,msgError) { var str = elem.value; var re = /.+/; var legende = getObj('legende_' + elem.getAttribute("id")); if(!str.match(re)) { legende.innerHTML = msgError; legende.className = "legendeError"; setTimeout("focusElement('" + elem.form.name + "', '" + elem.name + "')", 0); return false; } else { legende.innerHTML = msg; legende.className = "legende"; return true; } } function validateFormMembre(form) { if (isNotEmpty(form.login,'','Le login est obligatoire.')) { if (isNotEmpty(form.nom,'','Le nom est obligatoire.')) { if (isNotEmpty(form.prenom,'','Le pr&eacute;nom est obligatoire.')) { if (isNotEmpty(form.mdp,'','Le mot de passe est obligatoire.')) { if (isNotEmpty(form.selecttcmpt,'','Le type du compte de passe est obligatoire.')) { return true; } } } } } return false; }
Ton code marche impec il en va de soi ;)
En revanche le mien avec ta fonction ne marche pas, comment se fesse ?!
Donc j'ai mis la tienne en espérant que tu m'autorises sont utilisation en vue d'une réussite de stage ;)
Merci à toi
(c'est bien ce qui me semblait qu'une fonction js était appelable dans un contexte php XD)

EDIT : il vous manque entre autre la fonction getObj() pour comprendre mais ce n'est pas grave je vais simplifier le schmilblik pour arriver à mes fins XD

Posté : 07 mai 2007, 14:14
par sadeq
selon cette instruction tirée de ta fonction isNotEmpty:

Code : Tout sélectionner

var legende = getObj('legende_' + elem.getAttribute("id"));
Tu dois avoir donner des id aux champs du formulaire sinon cette fonction ne marchera pas.

pour donner un id à un champ :
<input type="text" id="login" name="login">
Comme on peut se passer de la fonction getObj() et sans devoir donner des id aux champs puisqu'ils ont des noms, en écrivant directement dans l'instruction sus-citée:

Code : Tout sélectionner

var legende = document.getElementById('legende_' + elem.name);
Si tu veux ramener la fonction isNotNull() de mon exemple à la tienne pour utiliser une vérif par regexp tu peux concidérer le parmètre valeur comme étant la règle à vérifier.
Mais à ce moment là la fonction s'ouvre sur tout type de validation non seulement le vide, tu peux la réutiliser par exemple pour valider un email.
Mais il serait judicieux de lui changer de nom.

Exemple:

Code : Tout sélectionner

function verifierElement(elem, regle, msgErreur) { var regle = regle?regle:/.+/; //valeur par défaut if(!elem.value.match(regle)){ alert (msgErreur); //message d'erreur elem.focus(); //pointer la zone à erreur return false; } else { return true; } }
avec des appels comme ça dans la fonction principale:

Code : Tout sélectionner

if (verifierElement(form.login,/.+/,'Le login est obligatoire.'))

Posté : 07 mai 2007, 14:39
par eLman
Pendant que je te tiens voici une autre série de fonction permettant de tester la conformité de certains champs, tel que nom/prénom/mdp/date etc ... mais encore une fois tout comme ma fonction précédente cela ne fonctionne pas.

Code : Tout sélectionner

//Vérifie le prenom function isPrenom(elem,msg) { elem.value = initCap(elem.value); var legende = document.getElementById('legende_' + elem.name); if (elem.value == '') { legende.innerHTML = msg; legende.className = "legende"; return true; } else if (isString(elem,msg,'Le pr&eacute;nom doit &ecirc;tre compos&eacute;e uniquement de caract&egrave;res alphabetiques.')){ //On affiche que le champ est valide legende.innerHTML = 'Champ valide'; legende.className = 'legendeValide'; return true; } return false; }

Code : Tout sélectionner

// Vérifie si un champ est une chaine de caractères function isString(elem,msg,msgError) { var str = elem.value; var re = /\d+/; var legende = document.getElementById('legende_' + elem.name); if (str.match(re)) { legende.innerHTML = msgError; legende.className = "legendeError"; setTimeout("focusElement('" + elem.form.name + "', '" + elem.name + "')", 0); return false; } else { legende.innerHTML = msg; legende.className = "legende"; return true; } }

Code : Tout sélectionner

// Positionne le curseur dans un champ donné function focusElement(formName, elemName) { var elem = document.forms[formName].elements[elemName]; elem.focus(); elem.select(); }
Merci de ton aide vraiment très précieuse.

Posté : 07 mai 2007, 14:49
par zeus
Est-ce que, par hasard, ces fonctions non définie ne se situent pas dans un fichier externe ?

Dans l'affirmative, est-ce que ce fichier est correctement inclu ?

Sinon, si ces fonctions se trouvent bien dans la page, est-ce qu'elles sont bien encadrées par une balise <script> ?

Posté : 07 mai 2007, 14:56
par eLman
En fait elles se trouvent dans un fichier externe.
Je l'inclu comme ceci :

Code : Tout sélectionner

<script type="text/javascript" src="/include/js/veriformulaires.js"></script>

Posté : 07 mai 2007, 15:01
par zeus
Affiche la page dans ton navigateur et remplace le nom de la page par l'adresse de ton fichier JS ('/include/js/veriformulaires.js')

exemple :
si ta page est à l'adresse suivante

Code : Tout sélectionner

http://127.0.0.4/dossier/mapage.php
Essaye d'afficher

Code : Tout sélectionner

http://127.0.0.4/dossier//include/js/veriformulaires.js
Si tu obtiens une erreur 404 (fichier non trouvé), c'est que l'adresse de ton fichier JS externe est fause ;)

Posté : 07 mai 2007, 15:06
par eLman

Code : Tout sélectionner

http://127.0.0.1/include/js/veriformulaires.js
Ca marche. Il me demande de l'ouvrir ou de l'enregistrer.

Code : Tout sélectionner

http://127.0.0.1/edition//include/js/veriformulaires.js
Ne marche pas.

Posté : 07 mai 2007, 15:10
par zeus
2 soucis :
1/ il devrait te l'afficher :-k A moins que tu ai un IE qui ai un comportement bizarre ;)

2/ le chemin de ton inclusion est fausse ... si ta page est dans le dossier

Code : Tout sélectionner

12.0.0.1/edition
et ton fichier JS dans 127.0.0.1/inclusion, alors la balise <script> devrait commencer par

Code : Tout sélectionner

../inclusion