[Javascript/PHP] Problème de retour chariot dans un cookie

Problème de retour chariot dans un cookie [Javascript/PHP] - HTML/CSS - Programmation

Marsh Posté le 17-08-2011 à 16:04:53    

Bonjour à tous,
 
Bon pour commencer je suis pas développeur mais technicien mon niveau de développement est celui d'un autodidacte très curieux  :D .
Pour la réalisation d'un outillage pour mes collègues j'ai entrepris la réalisation d'une page WEB (PHP/JS) afin de rendre le service demandé.
A la base je ne connais que le PHP mais depuis 3/4 semaines je me suis mis au Javascript :
 1 - parce que je me suis servis du code d'un collègue comme base et que ce dernier à utilisé JS.
 2 - parce que j'avais besoin de contrôle dynamique sans recharger la page à chaque fois.
 
Le but :
L'outil que je développe est une page contenant des menus déroulant type <select></select>, 2 menu par choix (liste source -> liste destination). La liste source étant une extraction d'une base de donnée et la liste destination le 'réceptacle' du choix sélectionné.
 
Une fois tous les choix effectué le bouton "Envoyer" du formulaire deviens "Enable" (c'est là que j'utilise JS entre autre). Cela me permet de faire mes contrôles sur mes champs obligatoires et nombres minimum de caractères dans mes champs textarea.
Lorsque le technicien clique sur "Envoyer" cela ouvre une 2ème page qui se charge de structurer et d'entrée en base les données saisies.
Pour se faire j'utilise des cookies, j'ai opté pour cette solution pour "le fun" car je n'avais jamais utilisé les cookies au part avant, et parce que je trouve ça plus propre qu'un $_POST $_GET.
 
Je vous sollicite donc sur le problème suivant :
Pour les champs de type liste pas de soucis chaque valeur sélectionné est concaténé sous forme de chaine avec des séparateurs de mon choix.
Le soucis se situe avec le contenu des champs TEXTAREA. Lorsque je crée mon Cookie avec ce champs les retours chariots ne sont pas interprétés et sont tronqués.
Les cookies sont créés en javascript avant l'envoi du formulaire par le bouton "Envoyer" et sont récupérer en PHP dans la page de contrôle par l'intermédiaire de la variable $_COOKIE
 
QUESTION :
Comment faire pour prendre le contenu de mon TEXTAREA et le placer dans un cookie sans perte de donnée lié aux retours chariot ??
 
Je vais essayé de vous sortir en une seul fois tous les scripts qui permettent de réalisé cette opération.
 
PS : je viens de m'apercevoir que sous IE 7 (WinXP) et IE8 (Seven) cela fonctionne et sous Firefox 5.x mes données sont tronquées.
 
Voici, dans ma page de destination, ce que me donne un print_r($_COOKIE) sous IE8 :

Code :
  1. Array
  2. (
  3.     [list2Applications_Sensibles] => /-/1@ARCOLE/-/2@ETEBAC5/-/3@FLORENCE/-/4@INTERNET/-/
  4.     [list2Applications_Non_Sensibles] => /-/3@Nagios/-/4@Soler/-/5@Base de comp�tence/-/6@Bestiole/-/7@Citemis/-/
  5.     [list2Canal_de_detection] => /-/4@Direct/-/
  6.     [list2Intervenant] => /-/3@LAPRUN/-/
  7.     [Descriptif] => /-/data_text@eraseCookieeraseCookieeraseCookie__popo__poiugr/-/
  8.     [Impact] => /-/data_text@eraseCookieeraseCookieeraseCookie__popo__poiugr/-/
  9.     [Cause] => /-/data_text@eraseCookieeraseCookieeraseCookie__popo__poiugr/-/
  10. )


 
et print_r($_COOKIE) sour Firefox :

Code :
  1. Array
  2. (
  3.     [Descriptif] => /-/data_text@eraseCookieeraseCookieeraseCookiepopo
  4.     [Impact] => /-/data_text@eraseCookieeraseCookieeraseCookie
  5.     [Cause] => /-/data_text@eraseCookieeraseCookieeraseCookie
  6.     [list2Applications_Sensibles] => /-/2@ETEBAC5/-/3@FLORENCE/-/4@INTERNET/-/5@LNA/-/
  7.     [list2Applications_Non_Sensibles] => /-/4@Soler/-/5@Base de comp�tence/-/6@Bestiole/-/7@Citemis/-/
  8.     [list2Canal_de_detection] => /-/4@Direct/-/
  9.     [list2Intervenant] => /-/30@BENACHOUR/-/
  10. )


 
explication :
[list2Canal_de_detection] => /-/4@Direct/-/
[list2Canal_de_detection] = Nom du champs ou de la liste
/-/xxx/-/ = '/-/' séparateur encadrant chacune des valeurs possible pour un champs/liste, il me sert de repère pour le traitement dans la page de destination
4@Direct = le @ sert de séparateur entre le numéros d'ID dans ma base Mysql et sa valeur associé

Reply

Marsh Posté le 17-08-2011 à 16:04:53   

Reply

Marsh Posté le 17-08-2011 à 16:40:54    

Voici la fonction de création des cookies (un standard trouvé sur le net, qui fonctionne très bien mais légèrement modifié) :
 

Code :
  1. function setCookie(name,value,minutes) {
  2. if (minutes) {
  3.  var date = new Date();
  4.  date.setTime(date.getTime()+(minutes*60*1000));
  5.  var expires = "; expires="+date.toGMTString();
  6. }
  7. else var expires = "";
  8. document.cookie = name+"="+value+expires+"; path=/";
  9. }


 
Voici les fonctions qui ajoute les séparateurs avant ajout dans le cookie

Code :
  1. function cookie_test_list(value1,nameCookie){
  2. var list = '/-/';
  3. for(i = 0; i<value1.length; i++){
  4.  list += value1.options[i].value+'@'+value1.options[i].text+'/-/';
  5. }
  6. setCookie(nameCookie,list,'10');
  7. }
  8. function cookie_test_text(value1,nameCookie){
  9. value_cooki = '/-/data_text@';
  10. value_cooki += value1.value;
  11. value_cooki += '/-/';
  12. setCookie(nameCookie,value_cooki,'10');
  13. }


 
La fonction qui crée tous les cookies lorsque les conditions sont remplies
 

Code :
  1. function create_all_cookies(){
  2. cookie_test_list(document.myForm.list2Applications_Sensibles,'list2Applications_Sensibles');
  3. cookie_test_list(document.myForm.list2Applications_Non_Sensibles,'list2Applications_Non_Sensibles');
  4. cookie_test_list(document.myForm.list2Canal_de_detection,'list2Canal_de_detection');
  5. cookie_test_list(document.myForm.list2Intervenant,'list2Intervenant');
  6. cookie_test_text(document.myForm.Descriptif,"Descriptif" );
  7. cookie_test_text(document.myForm.Impact,"Impact" );
  8. cookie_test_text(document.myForm.Cause,"Cause" );


 
 
et voici le code de la page de traitement, pour l'instant je ne fait qu'afficher les données sous forme de tableau afin d'être sûr que tout est OK avant de faire le traitement et l'INSERT en base :
 
 

Code :
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <html>
  3. <head>
  4. <title>Test Cookie</title>
  5. <?php
  6. function traitement_cookies($lst_cookies,$titre){
  7.  $arr_appsensible = split('/-/',$lst_cookies);
  8.  $arr_result = '<table border="1"><th colspan="2">'.$titre.'</th>';
  9.  foreach($arr_appsensible as $elmt){
  10.   $arr_elmt = NULL;
  11.   $arr_elmt = split('@',$elmt);
  12.   if($arr_elmt[0] != ''){
  13.    $arr_result .= '<tr><td>ID = '.$arr_elmt[0].'</td><td> valeur = '.$arr_elmt[1].'</td></tr>';
  14.   }
  15.  }
  16.  $arr_result .= '</table>';
  17.  return $arr_result;
  18. }
  19. $i = 0;
  20. foreach($_COOKIE as $key => $value){
  21.  if(strlen($value) > 3 ){
  22.   $lst[$i] = traitement_cookies($value,$key);
  23.  }
  24.  $i++;
  25. }
  26. ?>
  27. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  28. <meta http-equiv="CONTENT-LANGUAGE" CONTENT="fr">
  29. </head>
  30. <body>
  31. <pre>
  32. <?php print_r($_COOKIE);?>
  33. <h1>Test de cookie</h1>
  34. <?php
  35. if(count($lst) > 0 ){
  36.  foreach($lst as $popo){ echo $popo; }
  37. }
  38. ?>
  39. </pre>
  40. </body>
  41. </html>


Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed