IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Un post qui fonctionne 9 fois sur 10


Sujet :

Langage PHP

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2007
    Messages : 10
    Points : 5
    Points
    5
    Par défaut Un post qui fonctionne 9 fois sur 10
    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" :
    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&eacute;er</button>
    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.

    fichier "verif_lettre.js" :

    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();
    }
    Le formulaire est traité dans creation_lettre.php.

    fichier "verif_lettre.js" :

    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.'\')');
    ?>
    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.

    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 :
    Ce n'arrive pas simplement quand le client n'a pas javascript d'activé sur son poste ?
    Sans JavaScript le bouton d'envoi serait inactif et donc le formulaire ne serait même pas envoyé.

    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 :
    Au hasard : l'utilisation d'apostrophe dans une chaîne ne perturbe pas le bon fonctionnement ?
    L'encodage (accentuation) et les apostrophes sont traités dans le script qui analyse le formulaire.

    Est-il possible que les apostrophes posent problème sur la partie xHtml / JavaScript ?

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    tu ne fais pas de vérification lorsque $_POST est vide ?
    tu ne protèges pas tes valeurs (pas d’échappement) ?

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2007
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    Merci de ta réponse.

    Les valeurs sont protégées par l'encodage. J'encode les apostrophes en appelant la fonction "htmlentities" avec "ENT_QUOTES" en second argument.

    Pour la vérification du nombre d'élément dans "$_POST", Je ne teste leurs existences uniquement lorsqu'ils ne sont pas obligatoire. Pour les champs obligatoires qui seraient absents je laisse mon gestionnaire d'erreur s'en charger. Normalement, dans ce cas de figure le script est interrompu et un message d'erreur est retourné, mais afin de quantifier la fréquence du bug et d'avoir une photographie du contexte au moment où il s'est manifesté, je n'interrompt pas le script volontairement.

  4. #4
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    Citation Envoyé par FoxNounours Voir le message
    Les valeurs sont protégées par l'encodage. J'encode les apostrophes en appelant la fonction "htmlentities" avec "ENT_QUOTES" en second argument.
    .
    je te déconseille fortement de faire ça, dans ta base les données doivent être exactement les mêmes qu'a la saisie

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2007
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    Convertir une seule fois les données à la saisie et pouvoir les afficher directement ensuite économise les ressources de mon serveur.

    Pourquoi dans ma base, les données doivent être exactement les mêmes que celles saisies ?

    Penses-tu que cela pourrait empêcher une super globale comme "$_POST" de s'initialiser ?

  6. #6
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    Citation Envoyé par FoxNounours Voir le message
    Pourquoi dans ma base, les données doivent être exactement les mêmes que celles saisies ?
    pour l'intégrité de tes données et la réutilisation de celle çi

    Citation Envoyé par FoxNounours Voir le message
    Penses-tu que cela pourrait empêcher une super globale comme "$_POST" de s'initialiser ?
    ça c'est autre chose, si le javascript est déactive ou qu'il y'a une erreur au niveau du navigateur, même si t'as pas de bouton de submit, le simple fait de faire la touche Entrée envoie ton formulaire

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2007
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    La touche entrée n'a pas d'effet sur les ordinateur des utilisateurs , je viens d'essayer. Et si cela fonctionnerait ça n'expliquerait en rien le fait que les informations saisies ne soient pas transmise.

    Ce que je ne comprends pas, c'est comment une page qui contient un formulaire avec des balises "<select></select>" quand on l'envoie, appel un script Php avec un $_POST vide.

  8. #8
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    Citation Envoyé par FoxNounours Voir le message
    La touche entrée n'a pas d'effet sur les ordinateur des utilisateurs , je viens d'essayer.
    quand t'es dans un champs si, de ton coté est ce t'arrive a faire qu'a un moment ça ne marche pas ?

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2007
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    J'ai essayé, mais je n'es jamais réussit depuis mon ordinateur de développement qui ne tourne pas sur le même OS et qui a une autre connexion.

  10. #10
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2007
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    Les testes sont finis et impossible de faire planter l'application sur mon PC avec un réseau externe.

    Je pense que ça vient soit du réseau interne soit de la version du navigateur. Hélas, je n'est pas la main dessus !

  11. #11
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    Citation Envoyé par FoxNounours Voir le message
    Les testes sont finis et impossible de faire planter l'application sur mon PC avec un réseau externe.

    Je pense que ça vient soit du réseau interne soit de la version du navigateur. Hélas, je n'est pas la main dessus !
    si ta page sert uniquement au formulaire, fait un syteme de log, quand le _POST est vide, envoie tout le contenu de _SERVER dans un fichier daté, (tu peux meme voir si c'est en AJAX ou pas)

Discussions similaires

  1. Lien vers un fichier qui fonctionne une fois sur deux
    Par jmsch dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 17/10/2011, 21h00
  2. IIS sous Windows 7 qui fonctionne 1 fois sur 2
    Par fhelene30 dans le forum IIS
    Réponses: 2
    Dernier message: 06/12/2010, 16h53
  3. [HTML 4.0] Un formulaire qui fonctionne 1 fois sur 10 sur IE
    Par barbuslex dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 05/10/2010, 11h18
  4. [AC-2003] Requery qui fonctionne 1 fois sur 2
    Par it-worker dans le forum IHM
    Réponses: 4
    Dernier message: 09/12/2009, 17h28
  5. Requête qui fonctionne 1 fois sur 100
    Par nicotine002 dans le forum Langage
    Réponses: 1
    Dernier message: 05/08/2006, 11h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo