[PROBLEME URGENT] fonction js undefined

Eléphanteau du PHP | 49 Messages

07 mai 2007, 15:15

Mais je crois que ça n'a rien avoir.
Ma page php est dans /edition et mon js dans /include/js alors bon le /edition//include/js ça me parait logique que ça ne marche pas, en tout les mon ie (ce n'est pas mon choix :x) ne le comprend pas.

En tout cas merci pour votre aide, super forum ;)

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

07 mai 2007, 15:21

quand, dans une page dont l'adresse est

Code : Tout sélectionner

http://127.0.0.1/edition/mapage.php
tu mets une balise

Code : Tout sélectionner

<script src="/inclusion/fonction.js">
ton navigateur va essayer d'inclure le fichier qui se trouve à l'adresse

Code : Tout sélectionner

http://127.0.0.1/edition/inclusion/fonction.js
Comme tu le reconnait, ce n'est pas possible et c'est la raison pour laquelle il n'arrive pas à inclure ton fichier, donc que tes fonctions sont indéfinies ;)

Pour réparer ce soucis, il faut que tu indiques à ton navigateur de ressortir du dossier "edition" avec ".." avant de regarder dans le dossier "inclusion". L'adresse juste est donc "../inclusion/fonction.js"
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:29

Oui le ".." je connais j'ai la formation adéquate ;)
Mais le problème est tout autre en effet dans le même fichier .js avec la même balise (sans le ../, étant donné que j'ai indiqué le chemin absolu) la fonction de sadeq marche impec. Il est donc capable d'atteindre le fichier puisque ça marche avec une fonction mais pas avec une autre, le soucis est donc l'autre fonction.
Modifié en dernier par eLman le 07 mai 2007, 15:29, modifié 1 fois.

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

07 mai 2007, 15:29

Si je puis me permettre de critiquer le fond des fonctions, ma remarque est que tu utilise trop de fonction alors que tu aurais pu simplifier.

Par exemple, pourquoi une fonction par champ : pourquoi isPrenom(), isNom() ... alors qu'il s'agit de la même fonction qui vérifie en fait si c'est un pur texte.

Pourquoi ne pas simplifier en se contentant de isString() par exemple qui peut jouer double rôle attester d'un String et inversement d'un numérique.
Modifié en dernier par sadeq le 07 mai 2007, 15:34, modifié 1 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, 15:31

Il est certains que l'exemple que j'ai exposé n'est pas ce qu'il y a de plus judicieux.

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

07 mai 2007, 15:40

Ce que je veux dire par simplifier s'attache surtout à la séquence d'exécution qui dans ton cas fait divers saut de fonction à l'autre.

Exemple:

de onSubmit à validateFormMembre
de validateFormMembre à isNotEmpty
....
de isPrenom à initCap
de isPrenom à isString ....

c'est ce que j'ai rescencer rien qu'à partir des bouts de codes que tu a donné

Mais ce n'est pas ça le problème, le plus important c'est d'éviter le chauvechement d'actions entre les différentes fonctions intervenant
et ton erreur se trouve perdue dans ce zigzag d'appels
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
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, 15:50

Oui j'ai bien saisie ça, c'est pour cela que je vais déjà m'attacher à faire les choses simples et essentielles avant de m'attaquer à mon enchainement de fonctions de tests.

Merci de ton aide.

PS : Si j'ai un autre soucis, ou si je peux aider quelqu'un je repasserai étant donné la qualité du forum. XD

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

07 mai 2007, 16:48

Exemple de simplification: fonctions par type de vérif et non par champ:

Code : Tout sélectionner

<html> <head> <script language="javascript"> function isNotEmpty(data){ if (!data.value.match(/.+/)) return data.name + " est obligatoire"; return false; } function isEmail(data){ if (!data.value.match(/[^@]+@[^@]+\.[^@]+/)) return data.name + " n'est pas un Email correct"; return false; } function isString(data){ if (data.value.match(/\d+/)) return data.name + " n'est pas alphabétique"; return false; } function isNumeric(data){ if (!isString(data)) return data.name + " n'est pas numérique"; return false; } function isDate(data){ if (!data.value.match(/\d{2}[\/|\-]\d{2}[\/|\-]\d{2}/)) return data.name + " n'est pas une forme de date valide"; return false; } function showError(data, ErrorMsg) { if (ErrorMsg){ document.getElementById('label_'+data.name).innerHTML = ErrorMsg; //message d'erreur data.focus(); //pointer l'objet à erreur return true; } else { document.getElementById('label_'+data.name).innerHTML = ''; //vider l'ex message d'erreur return false; } } function validateFormMembre(form) { if ( !showError(form.login, isNotEmpty(form.login)) && !showError(form.nom, isNotEmpty(form.nom)) && !showError(form.nom, isString(form.nom)) && !showError(form.prenom, isNotEmpty(form.prenom)) && !showError(form.prenom, isString(form.prenom)) && !showError(form.datenaiss, isNotEmpty(form.datenaiss)) && !showError(form.datenaiss, isDate(form.datenaiss)) && !showError(form.mdp, isNotEmpty(form.mdp)) && !showError(form.selecttcmpt, isNotEmpty(form.selecttcmpt)) && !showError(form.email, isNotEmpty(form.email)) && !showError(form.email, isEmail(form.email)) ) { return true; } return false; } </script> </head> <body> Voici mon formulaire avec le onsubmit : <FORM name="formember" action="" method="get" onSubmit="return validateFormMembre(this);" > <p>Login*<input name="login" ><label id="label_login"></label> <p>Nom*<input name="nom" > <label id="label_nom"></label> <p>Prénom*<input name="prenom" > <label id="label_prenom"></label> <p>Date de naissance*<input name="datenaiss" > <label id="label_datenaiss"></label> <p>Mot de passe*<input name="mdp" type="password"> <label id="label_mdp"></label> <p>Type de compte*<input name="selecttcmpt"> <label id="label_selecttcmpt"></label> <p>Email*<input name="email" ID="Text1"> <label id="label_email"></label> <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

08 mai 2007, 12:30

Merci de ton aide c'est vraiment sympatique.
Seulement avec ta méthode il est nécéssaire de mettre des labels.
Or comment fait on pour mettre un label à une liste déroulante ?

Code : Tout sélectionner

<TD><select size=1 name="selecttcmpt" class="txt16-000000"> <option value=""> Choisir un type </option> <option value="Administrateur"> Administrateur </option> <option value="Agent SIDPC"> Agent SIDPC </option> </select></TD>
J'ai essayer avec <optgroup> avec label dans <option> et avec <label> derrière <select>. Rin ne marche donc je ne sais pas comment l'utiliser dans ce cas.

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

08 mai 2007, 13:04

le label n'est pas attaché à d'autres balises, il est indépondant tu peux le mettre après le select

Code : Tout sélectionner

<select size=1 name="selecttcmpt" class="txt16-000000"> <option value=""> Choisir un type </option> <option value="Administrateur"> Administrateur </option> <option value="Agent SIDPC"> Agent SIDPC </option> </select><label id="label_selecttcmpt"></label>
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Eléphanteau du PHP | 49 Messages

08 mai 2007, 13:30

Ah ça marche impec cette fois ci.
Je te remercie encore et encore ;)

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

08 mai 2007, 14:06

Modération :
eLman, si ta question est résolue, pense à ajouter le tag [Résolu]
pour indiquer aux personnes qui voudront consulter ce sujet qu'il contient une solution.
Tu peux réaliser cette opération en cliquant sur le bouton Image en haut à gauche de ce sujet.
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

08 mai 2007, 15:09

J'ai juste une autre petite question si vous me le permettez.
Dans l'un de mes formulaires j'ai une date à rentrer.

Voici le champ correspondant.

Code : Tout sélectionner

<TR> <td>Date</td> <TD><INPUT type=date name="dfevent" ><label id="label_dfevent"></label></TD> </tr>
Pour afficher la date à la manière française (dd-mm-yyyy) et non celle de mysql (yyyy-mm-dd) j'ai cette fonction :

Code : Tout sélectionner

<? function transformdate($date) { ereg("([0-9]{4})-([0-9]{2})-([0-9]{2})", $date, $params); $dt = "$params[3]-$params[2]-$params[1]"; return($dt); } ?>
Pour insérer la date à la manière de mysql (yyyy-mm-dd) à partir d'une date manière française j'ai cette fonction :

Code : Tout sélectionner

<? function transformdatemysql($date) { ereg("([0-9]{2})-([0-9]{2})-([0-9]{4})", $date, $params); $dt = "$params[3]-$params[2]-$params[1]"; return($dt); } ?>
Donc ce que je veux c'est afficher dans mon formulaire la date à la "française" mais l'insérer à la manière de mysql bien entendu.
Tout cela marche.
Mais lorsque je ne la rentre pas pour la modifier par la suite il me la met à 00-00-0000 est ce normal ? elle ne devrait pas être à NULL ?

Merci à vous.

ViPHP
ViPHP | 5924 Messages

08 mai 2007, 19:34

Le serveur la met à la valeur par défaut, donc pour la mettre à NULL, il faut que la valeur NULL soit activée pour ce champ, et que la valeur par défaut ait été fixée à NULL.
Pour le régler, tu peux executer cette requète :

Code : Tout sélectionner

ALTER TABLE `table` ALTER `champ` SET DEFAULT NULL;

Eléphanteau du PHP | 49 Messages

09 mai 2007, 08:50

Mais par défaut il sont déjà mis à NULL :

Code : Tout sélectionner

`datedeb_ev` date default NULL, `datefin_ev` date default NULL,
Est ce normal qu'il interprète en 0000-00-00 ou bien 0000-00-00 signifie qu'en réalité elle n'est pas à NULL ?
Le soucis pourrait il venir de mes fonctions de transformations de la date ?

EDIT : Le problème exact en fait.
Lorsque j'ajoute un événement avec une date valide il me la met de suite à 00-00-0000. Lorsque je l'édite la date est cette fois ci bien prise en compte. Maintenant si je ne remplie pas la date lors de l'ajout ou de l'édition il me la met aussi à 00-00-0000.