[PROBLEME URGENT] fonction js undefined

Eléphanteau du PHP | 49 Messages

07 mai 2007, 12:12

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.

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

07 mai 2007, 12:21

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"

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphanteau du PHP | 49 Messages

07 mai 2007, 12:25

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 ...

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

07 mai 2007, 12:35

Elle existe la fonction "isNotEmpty()" ?

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

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

ViPHP
ViPHP | 5924 Messages

07 mai 2007, 12:38

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...

Eléphanteau du PHP | 49 Messages

07 mai 2007, 12:50

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 ;)

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

07 mai 2007, 13:13

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>
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Eléphanteau du PHP | 49 Messages

07 mai 2007, 13:55

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

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

07 mai 2007, 14:14

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.'))
Modifié en dernier par sadeq le 07 mai 2007, 14:43, modifié 2 fois.
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Eléphanteau du PHP | 49 Messages

07 mai 2007, 14:39

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.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

07 mai 2007, 14:49

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> ?
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Eléphanteau du PHP | 49 Messages

07 mai 2007, 14:56

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>

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

07 mai 2007, 15:01

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 ;)
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Eléphanteau du PHP | 49 Messages

07 mai 2007, 15:06

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.
Modifié en dernier par eLman le 07 mai 2007, 15:14, modifié 3 fois.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

07 mai 2007, 15:10

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
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer