Bonjour,
Je travail actuellement sur un outil de gestion des factures non conformes. Il est basé sur les technologies xHtml 1.0 strict, CSS 2, Javascript ( avec JQuery 1.6.1), et Php 5.3.3. L'outil est déjà en production depuis plusieurs mois et j'essaye d'y apporter des améliorations et notamment d'y corriger les bugs. Il y en a un qui me résiste et dont je n'arrive pas à trouver la source.
C'est au moment de la création d'une lettre de non conformité.
L'utilisateur rentre les données dans un formulaire :
fichier "creer_lettre.php" :
Au moment où l'utilisateur clique sur le bouton "Créer" le script Javascript ci-dessous est appeler pour vérifier l’intégrité des données saisies.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 <form method="post" action="creation_lettre.php" id="form-lettre"> <label for="unchamp">Un champ :</label> <input type="text" name="unchamp" id="unchamp" /> <!-- 23 champs dont : - des input de type : - text, - radio, - des button de type button - des select et - un textarea. Le tout est dynamisé par du javascript : - datepicker, - aide à la saisie avec liste de l'historique correspondant à ce qui est déjà tapé dans le champ, - champs qui se cachent en fonction des cases cochées... Mais pas de bouton ni d'input submit --> </form> <button id="envoie-form-lettre">Créer</button>
fichier "verif_lettre.js" :
Le formulaire est traité dans creation_lettre.php.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 var bErr = false; var sErrMsg = ""; if(/*vérification contenu ok*/) { /* On colore en vert */ } else { /* On colore en rouge */ // On indique qu'il y a une erreur bErr = true; // On indique l'erreur dans le message sErrMsg += "Le truc est pas saisie.\n"; } /* Une vingtaine de teste plus bas */ // Si il y a une erreur if(bErr) { alert("Certains champs sont mal saisies ou non renseignés :\n" + sErrMsg); } else { // On envoie le formulaire $('#form-lettre').submit(); }
fichier "verif_lettre.js" :
Ce script marche parfaitement bien environ 9 fois sur 10. Mais environ 1 fois sur 10 il enregistre une ligne blanche dans la base de donnée.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 <?Php // On analyse le formulaire $unchamp = $_POST['unchamp']; $date = BDD::convert_date2bdd($_POST["date"]); /* [...] */ // On envoie dans la base de donnée BDD::get()->query('INSERT INTO lettre VALUES( '.$unchamp.', \''.date.'\')'); ?>
J'ai donc utilisé une classe de gestion d'erreur que j'ai fait pour un autre outil et qui récupère l’environnement au moment du problème et me le transmet par mail. J'ai ensuite fait un trigger_error(); non fatale à la fin de la fonction de traitement du formulaire pour comparer l'environnement quand tout fonctionne bien et quand ça bug.
Le problème vient tous simplement que environ 1 fois sur 10 la super globale $_POST est vide ! Comment est-ce possible que les données ne soient pas transmises de façon aléatoire ?
Quelqu'un aurais une idée ?
Apparemment, le contenu du formulaire ne serait pas en cause car les utilisateurs quand ils rencontrent le problème refont la saisie et tous fonctionne correctement.
Si vous avez besoin d'informations complémentaires, n’hésitez pas à me demander.
pistes déjà explorées :
Réponse de Maraumax :
Sans JavaScript le bouton d'envoi serait inactif et donc le formulaire ne serait même pas envoyé.Ce n'arrive pas simplement quand le client n'a pas javascript d'activé sur son poste ?
De plus, tous les utilisateurs sont sur le même système d'exploration, une version appelé Neptune de Windows XP customisé par un sous-traitant.
Il utilise donc tous principalement Mozilla Firefox 3.5.3 sinon Internet Explorer 6.0.X. Les utilisateurs n'ont pas la main sur le parametrage et ne peuvent désactiver JavaScript.
Les utilisateurs sont tous sur le même réseau interne.
Néanmoins, j'ai l'impression qu'avec mon ordinateur de développement(Ubuntu 11.04 et Mozilla Firefox 7.0.1), l'erreur ne se produit jamais. J'ai une connexion externe.
La prestation n'est pas formidable mais je ne pense pas du moins je n'espère pas que le problème vienne de là.
Réponse de Desolation :
L'encodage (accentuation) et les apostrophes sont traités dans le script qui analyse le formulaire.Au hasard : l'utilisation d'apostrophe dans une chaîne ne perturbe pas le bon fonctionnement ?
Est-il possible que les apostrophes posent problème sur la partie xHtml / JavaScript ?
Partager