[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: utf-8 : cauchemar... (+ une question)



François Boisson <user.anti-spam@maison.homelinux.net> writes:

> On Fri, 23 Jul 2004 11:05:51 +0200
> Leopold BAILLY <leo.bailly@infonie.fr> wrote:
>
>> François Boisson <user.anti-spam@maison.homelinux.net> writes:
>> 
>> > Par ailleurs c'est vrai que IE pose des pbms curieux, je cherche une
>> > indication à ce pbm: La personne connecté sur le site doit déposer un
>> > message via un script PHP, le message est mis dans une table mysql via
>> >
>> > $resultat=IntroduireMessageBD($sessnum,$_POST['inMessage'],$_POST['ms
>> > gTyp e']);
>> >
>> > Bref, tout va très bien sauf pour certains (en gros 3 sur 600) sous
>> > WindowsXP/IE6 où rien n'est stocké. J'ai fait des tests avec une telle
>> > machine, ça marche dans mon cas, je n'arrive pas à reproduire le bug.
>> > Si quelqu'un a une piste, je suis preneur.
>> 
>> Rien n'est stocké, cad :
>>  - aucune ligne enregistrée en BD, ou bien
>>  - une ligne avec message=vide

Tu ne m'as pas répondu ici.
 
>> Il faudrait également voir la page html où il y a le formulaire.
>> Y a-t-il du javascript dans cette page ?
>> 
>
> Voilà l'extrait du code HTML produit par le php, pas de javascript
> -----------------------
> <form action="/AgregPassages/candid.php" method="post">
> <table width="90%">
> <tr>
> <td>Saisie Message</td></tr>
> <tr>
> <td><select NAME="msgType">
>   <option VALUE="A.R.">Accusé Réception
>   <option VALUE="Médical">Motif médical
>   <option VALUE="Information">Pour Information
>   <option VALUE="Report">Demande Report
>   <option VALUE="Urgent">Urgent
>   <option VALUE="Absence">Absence
>   <option VALUE="Retard">Retard
>   <option VALUE="Abandon">Abandon
> </select>
> &nbsp; Choisir une catégorie. </td></tr>

Ici, aucune option n'est pré-sélectionnée.
J'imagine qu'on obtient msgType="A.R" dans la plupart des cas, mais les
spécifications HTML4.0 disent que c'est à l'initiative du navigateur.
Perso, je préconise :

<select NAME="msgType">
  <option VALUE="" selected>Choisir une catégorie</td></tr>
  <option VALUE="A.R.">Accusé Réception
  <option VALUE="Médical">Motif médical
  <option VALUE="Information">Pour Information
  <option VALUE="Report">Demande Report
  <option VALUE="Urgent">Urgent
  <option VALUE="Absence">Absence
  <option VALUE="Retard">Retard
  <option VALUE="Abandon">Abandon
</select>

plus du code de validation côté serveur (php) et éventuellement côté client
(javascript) qui vérifie qu'on a bien msgtype != "" avant d'enregistrer.

> <tr>
> <td><textarea ROWS="7" COLS="70" name="inMessage"></textarea></td></tr>
> </table>
> <input type="hidden" name="etape" value="Message"><input type="hidden"
> name="inMsgNum" value="0"><center><input type="submit" name="envoiMessage"
> value="Envoi du Message"></center></form><a NAME="histoire">
> <table width="90%">
> <tr>
> <td BGCOLOR="WHITE"> <font COLOR="RED"><b>Historique</b></font></td> </tr>
> </table>
> L'historique des communications entre vous-même et le jury est conservé
> ci-dessous.
>   Attention, le jury ne répond à travers cette page qu'aux questions
> concernant les
>   horaires des épreuves orales. Les refus de modifier les horaires lorsque
> la situation 
>   ne le justifie pas ne seront pas motivés.
> <p>&nbsp;<p><table width="90%">
> <tr>
> <td BGCOLOR="WHITE"> <font COLOR="RED"><b>Emis le</b></font></td> <td
> BGCOLOR="WHITE"> <font COLOR="RED"><b>Sens</b></font></td> <td
> BGCOLOR="WHITE"> <font COLOR="RED"><b>Type</b></font></td> </tr>
>
> <tr>
> ----------------------------------
> Ce qu'il y a de supprenant est qu'il n'y avait aucun message d'enregistré,
> le code php est le suivant:
>
> -------------------------------
> if ( $msgNextNum > $_POST['inMsgNum'] ){
>      $formule_validation=1;

Je ne comprends pas très bien, on dirait tu as effectivement du code qui vérifie
le formulaire.
J'imagine que dans le php qui génère la page du formulaire tu as :
  <input type="hidden" name="inMsgNum" value="<%=$msgNextNum %>">
et que tu vérifies donc que l'utilisateur n'est pas remonté dans l'historique
pour soumettre le formulaire.
Attention, ça suppose qu'il n'a pas récupéré une page d'une session précédente
(voir la fin du message).

>      }else{
> // recuperer le message, le placer dans la base de donnees
>      if($_POST['etape'] =="Message" ){
>     
> $resultat=IntroduireMessageBD($sessnum,$_POST['inMessage'],$_POST['msgTyp
> e']);

Si on veut tracer un minimum, il manque :

if ( ! $resultat ) {
  // on laisse une trace et on renvoie un message d'erreur
}

>      $msgNextNum++;
>  }
> }
> --------------------------------
> Deux soupçons: Une histoire de session et une histoire de test sur
> $_POST['inMsgNum'] mais je sèche car je n'arrive pas à reproduire le
> phénomène.

Il y a deux façons pour le serveur de gérer une session, par un cookie, mais il
faut que le navigateur les supporte et les autorise, et par l'url.
Normalement, le serveur est sensé détecter la méthode à adopter.
Essaie en paramétrant IE pour refuser les cookies.

Il faudrait aussi vérifier l'initialisation de msgNextNum. Que se passe-t-il
si la session de l'utilisateur tombe entre le moment où il charge la page et le
moment où il soumet le formulaire ?


Léo.



Reply to: