[PROBLEME URGENT] fonction js undefined

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [PROBLEME URGENT] fonction js undefined

par sadeq » 09 mai 2007, 11:58

tu dois ajouter un value dans la zone de texte de la date, pour afficher une date (date du jour en cas d'ajout ou celle dans la base si mode edition)
sans oublier bien sûr de faire jouer les 2 fonctions de mise en forme de la date.

Code:
//Quand tu récupére le postage du formulaire
$dfevent = transformdatemysql($_POST["dfevent"]); //date transmise par le form

//Quand tu récupére la date de la base
$dfevent = transformdate($dfevent); //date déjà enregistrée dans la base

//Quand c'est un ajout
$dfevent = date("d-m-Y"); //date du jour (par défaut)

//et dans le formulaire
<TR> 
      <td>Date</td> 
      <TD><INPUT type=date name="dfevent" value="<?php echo $dfevent; ?>"><label id="label_dfevent"></label></TD> 
</tr>

par eLman » 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.

par Sékiltoyai » 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;

par eLman » 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.

par zeus » 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.

par eLman » 08 mai 2007, 13:30

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

par sadeq » 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>

par eLman » 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.

par sadeq » 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>

par eLman » 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

par sadeq » 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

par eLman » 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.

par sadeq » 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.

par eLman » 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.

par zeus » 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"