Script de génération de formulaire - Besoin de vos avis

Script de génération de formulaire - Besoin de vos avis - PHP - Programmation

Marsh Posté le 29-09-2005 à 05:33:09    

Bonjour, j'aurai besoin de vos avis sur un script. :)
 
Le contexte :  
Quelqu'un sur ce forum (qu'il me pardonne, je ne sais plus qui c'est) m'a expliqué dans un topic qu'il séparait le code php du code html généré, pour garder des scripts de programation propres et clairs. Je lui demande donc comment il fait, et il m'explique que par exemple, pour créer un formulaire il utilise une fonction PHP qui le génère, et hop ainsi, pas de html dans sa page PHP.
Bon, j'essaye de me mettre gentillement au PHP, et après tout, y a rien de mieux que de mettre les mains dans le cambouï. Donc je me suis dit que j'allais faire cette fameuse fonction générant des formulaires pour me mettre dans le bain.
 
La question :
J'ai l'impression de ne pas avoir abordé le problème de la bonne manière. En effet, pour générer mon formulaire avec ma fonction, il faut que j'assigne de nombreuses valeurs dans un tableau avec beaucoup de dimensions :p. Finalement, je trouve ça extrêmement peu pratique. Bref j'aimerais que vous me disiez ce que vous en pensez, et comment mieux aborder ce problème (soyez pas trop méchant svp, je me doute bien que c'est pas top et j'aimerai savoir comment faire mieux :) )
 
Trève de bavardages, passons au code !
N.B. : je ne me suis pas encore du tout préoccupé des <div> et autres joyeusetés nécessaires pour la mise en forme par la suite.
 
La fonction :

Code :
  1. <?php
  2. /*
  3. ** Function    : form
  4. ** Input      : STRING $action, STRING $form_id, ARRAY $fields, ARRAY $fieldset, STRING $method, STRING $enctype, STRING $accept_charset, STRING $accept
  5. ************************************************************************************
  6. Pour les fieldset :
  7. $fieldset [$x] : $x=numéro du fieldset
  8. $fieldset[$x]['id'] : id du fieldset ; facultatif
  9. $fieldset[$x]['legend'] : légende du fieldset ; <<<<obligatoire>>>>
  10. $fieldset[$x]['legend_id'] : id de la légende du fieldset ; facultatif
  11. Pour les champs :
  12. $fields[$x][$x2] : $x : numéro du fieldet - $x2 : numéro du champ au sein de ce fieldset
  13. Pour tous les champs :
  14. $fields[$x][$x2]['label'] : label du champ ; facultatif
  15. $fields[$x][$x2]['label_id'] : id du label du champ ; facultatif
  16. $fields[$x][$x2]['field_type'] : type du champ (password, text, radio, textarea, select ...) ; <<<<obligatoire>>>>
  17. $fields[$x][$x2]['field_id'] : id du champ ; <<<<obligatoire>>>>
  18. $fields[$x][$x2]['field_class'] : class du champ ; facultatif (la class 'form' est assignée si rien n'est spécifié)
  19. $fields[$x][$x2]['field_value'] : valeur par défaut du champ ; facultatif (sauf pour les champ de type boutons radio ou checkbox. Pour une selection multiple dans un champ select, placer toutes les valeurs des options qui doivent être sélectionnées)
  20. $fields[$x][$x3]['oth_attributes'] : permet de rajouter au champ des attributs non prévus par ce tableau $fields ; facultatif
  21. Pour les champs select :
  22. $fields[$x][$x2]['option'][$x3] ; $x3=numéro de l'option du select  
  23. $fields[$x][$x2]['multiple'] : si différent de 0, le champ select accepte une selection multiple ; facultatif
  24. $fields[$x][$x2]['size'] : nombre d'options visibles ; facultatif
  25. Pour les boutons radio et les checkbox :
  26. $fields[$x][$x2]['title'] : rajoutera un titre permettant de regrouper l'ensemble des boutons radios ou checkbox qui doivent l'être. Ne mettre ce titre que pour le premier des boutons ; obligatoire pour les boutons radio ou checkbox
  27. $fields[$x][$x2]['title_id'] : id du titre ; facultatif
  28. $fields[$x][$x2]['field_name'] : les boutons radio ou checkbox liés entre eux doivent avoir le même nom. Spécifiez donc le même nom pour tous les champs qui doivent être liés (mais vous devez utilisez des id différents). Ce tableau peut être utilisé pour d'autres types de champ, même si cela n'a pas d'intéret
  29. $fields[$x][$x2]['checked'] : si différent de 0, ce bouton sera sélectionné ; facultatif
  30. Pour les champ de type <button> :
  31. $fields[$x][$x2]['button_content'] : conteneur du bouton (<button> button_content</button> ) ; obligatoire
  32. $fields[$x][$x2]['button_type'] : spécifie le type de bouton ; facultatif
  33. ************************************************************************************
  34. ** Output      : aucun
  35. ** Description    : génération d'un formulaire xhtml
  36. ** Creator    : Fred
  37. ** Date        : 28/09/2005
  38. */ 
  39. function form ($action, $form_id, $fields, $fieldset, $method='post', $enctype=null, $accept_charset=null, $accept=null)
  40. {
  41. //ouverture de la balise form
  42. echo '<form method="', $method, '" action="', $action, '" id="', $form_id, '"';
  43. //gestion des paramètres optionnels du form
  44. if ($enctype) echo ' enctype="', $enctype, '"';
  45. if ($accept_charset) echo ' accept_charset="', $accept_charset, '"';
  46. if ($accept) echo ' accept="', $accept, '"';
  47. //fermeture de la balise form
  48. echo '>', "\n";
  49. $x=0;
  50. //chaque fieldset du formulaire va être traité dans cette boucle
  51. while ($fields[$x])
  52. {
  53.  echo "\t", '<fieldset class="form"'; //ouverture du fieldset  
  54.  if ($fieldset[$x]['id']) echo ' id="', $fieldset[$x]['id'], '"'; //ajout de l'id du fieldset s'il est défini
  55.  echo '>', "\n"; //fermeture du fieldset
  56.  if (!$fieldset[$x]['legend']) die ('<p class="alert">You must specify a legend</p>');
  57.  echo "\t\t", '<legend class="form"'; //ouverture balise legend  
  58.  if ($fieldset[$x]['legend_id']) echo ' id="', $fieldset[$x]['legend_id'], '"';//si un id est défini pour la légende, on l'ajoute
  59.  echo '>', $fieldset[$x]['legend'], '</legend>', "\n\n"; //fin de la balise legend
  60.  $x2=0;
  61.  //on va maintenant traiter les champs contenus dans ce fieldset
  62.  while ($fields[$x][$x2])
  63.  {
  64.   if (!$fields[$x][$x2]['field_type']) die ('<p class="alert">You must specify the field type</p>');
  65.   if (!$fields[$x][$x2]['field_id']) die ('<p class="alert">You must specify an ID for this field</p>');
  66.   //s'il s'agit d'un bouton radio ou ckeckbox, il faut un titre à cet ensemble de bouton en plus du label de chaque bouton
  67.   //il ne faut renseigner $fields[$x][$x2]['title'] que pour le premier bouton de la série, pour ne mettre qu'un seul titre à cet ensemble de bouton
  68.   if ($fields[$x][$x2]['title'] and ($fields[$x][$x2]['field_type']=='radio' or $fields[$x][$x2]['field_type']=='checkbox') )
  69.   {
  70.    echo "\t\t", '<p class="radio_checkbox_title"';
  71.    //si un id est définit pour le titre, il faut le placer
  72.    if ($fields[$x][$x2]['title_id']) echo ' id="', $fields[$x][$x2]['title_id'], '"';
  73.    //fin de la balise title
  74.    echo '>', $fields[$x][$x2]['title'], '</p>', "\n";
  75.   }
  76.   //On place le label qui permet de mettre le focus sur le champ en cliquant sur son nom
  77.   //on change la classe du label s'il s'agit d'un bouton radio/checkbox, ou non.
  78.   if ($fields[$x][$x2]['label'])
  79.   {
  80.    echo "\t\t", '<label for="', $fields[$x][$x2]['field_id'], '"';
  81.    if ($fields[$x][$x2]['field_type']=='radio' or $fields[$x][$x2]['field_type']=='checkbox')
  82.     echo ' class="radio_checkbox_label"';
  83.    else
  84.     echo ' class="normal_label"';
  85.    //on place l'id s'il y en a un de défini
  86.    if ($fields[$x][$x2]['label_id']) echo ' id="', $fields[$x][$x2]['label_id'], '"';
  87.    //on finit la balise label
  88.    echo '>', $fields[$x][$x2]['label'], '</label>', "\n";
  89.   }
  90.   echo "\t\t";
  91.     //on va traiter les textarea et les select, ils ont des parties communes faciles à caser
  92.   if ($fields[$x][$x2]['field_type']=='textarea' or $fields[$x][$x2]['field_type']=='select')
  93.   {
  94.    //début de la balise du champ  
  95.    echo '<', $fields[$x][$x2]['field_type'], ' name="', $fields[$x][$x2]['field_id'], '" id="', $fields[$x][$x2]['field_id'], '"';
  96.    //s'il n'y a pas de class de défini, on assigne la class 'form'
  97.    if ($fields[$x][$x2]['field_class']) echo ' class="', $fields[$x][$x2]['field_class'], '"'; else echo ' class="form"';
  98.    //['oth_attributes'] permet de caser tous les attributs de balise non prévus avec le tableau $fields
  99.    if ($fields[$x][$x2]['oth_attributes']) echo ' ', $fields[$x][$x2]['oth_attributes'];
  100.    //on ajuste la fin pour le textarea
  101.    if ($fields[$x][$x2]['field_type']=='textarea')
  102.    {
  103.     echo '>', $fields[$x][$x2]['field_value'], '</textarea>', "\n";
  104.    }
  105.    //on ajuste la fin pour le select
  106.    else
  107.    {
  108.     if ($fields[$x][$x2]['multiple']) echo ' multiple="multiple"';
  109.     if ($fields[$x][$x2]['size']) echo ' size="', $fields[$x][$x2]['size'], '"';
  110.     echo '>', "\n";
  111.     $x3=0;
  112.     //et on ajoute les options du select
  113.     while ($fields[$x][$x2]['option'][$x3])
  114.     {
  115.      //début de la balise option
  116.      echo "\t\t\t", '<option value="', $fields[$x][$x2]['option'][$x3], '"';
  117.      //si la valeur par défaut du champ est égal à une des options, cette option doit être sélectionnée
  118.      if ($fields[$x][$x2]['field_value']==$fields[$x][$x2]['option'][$x3]) echo ' selected="selected"';
  119.      //dans le cas ou une multi-sélection est possible, la valeur par défaut du champ contient toutes les options qui doivent être sélectionnées
  120.      elseif ($fields[$x][$x2]['multiple'] and !(strpos ($fields[$x][$x2]['field_value'], $fields[$x][$x2]['option'][$x3])===false) ) echo ' selected="selected"';
  121.      //fermeture de la balise option
  122.      echo '>', $fields[$x][$x2]['option'][$x3], '</option>', "\n";
  123.      $x3++;
  124.     }
  125.     echo "\t\t", '</select>', "\n";
  126.     if ($x3==0) die ('<p class="alert">You must specify some options for a select tag</p>');
  127.    }
  128.   }
  129.   //gestion de la balise button
  130.   elseif ($fields[$x][$x2]['field_type']=='button')
  131.   {
  132.    //on vérifie qu'il y a un contenu au bouton, sinon c'est inutile, autant prendre un <input type='button'>
  133.    if (!$fields[$x][$x2]['button_content']) die ('If you dont need any content for <button>, you should use an input type button');
  134.    //ouverture de la balise
  135.    echo '<button name="', $fields[$x][$x2]['field_id'], '" id="', $fields[$x][$x2]['field_id'], '"';
  136.    //s'il n'y a pas de class de défini, on assigne la class 'form'
  137.    if ($fields[$x][$x2]['field_class']) echo ' class="', $fields[$x][$x2]['field_class'], '"'; else echo ' class="form"';
  138.    //['oth_attributes'] permet de caser tous les attributs de balise non prévus avec le tableau $fields
  139.    if ($fields[$x][$x2]['oth_attributes']) echo ' ', $fields[$x][$x2]['oth_attributes'];
  140.    //spécification possible du type de bouton (submit, reset, push)
  141.    if ($fields[$x][$x2]['button_type']) echo ' type="', $fields[$x][$x2]['button_type'], '"';
  142.    //fermeture
  143.    echo '>';
  144.    echo $fields[$x][$x2]['button_content'], '</button>'; //classiquement pour le button_content : une image <src=... (ne pas oublier d'ajouter un alt pour l'accessibilité)
  145.   }
  146.   //on passe aux champs de type <input type= ...
  147.   else
  148.   {
  149.    //s'il s'agit d'un bouton radio ou checkbox, le nom du champ doit resté identique pour plusieurs champs, contrairement à l'id.  
  150.    //S'il ne s'agit pas d'un bouton radio ou d'une checkbox, $name prendra la valeur de l'id et le gardera jusqu'à l'écriture de la balise.
  151.    //s'il s'agit d'un bouton radio ou checkbox, $name sera modifié afin de garder le même nom pour les boutons radios ou checkbox reliés entre eux.
  152.    $name=$fields[$x][$x2]['field_id'];
  153.    //on doit faire des vérifs ici dans le cas de bouton radio ou checkbox, car on ne pourra pas afficher le message d'erreur en pleine balise
  154.    if ($fields[$x][$x2]['field_type']=='radio' or $fields[$x][$x2]['field_type']=='checkbox')
  155.    {
  156.     //pour les boutons radios et checkbox, il faut forcément une valeur à chaque champ pour ensuite récupérer la paire nom/valeur du champ
  157.     if (!$fields[$x][$x2]['field_value']) die ('<p class="alert">you must specify a value for a radio or checkbox button</p>');
  158.     //de la même manière, il faut forcément spécifier un nom de champ s'il s'agit d'un bouton radio ou une checkbox
  159.     if (!$fields[$x][$x2]['field_name'])
  160.      die ('<p class="alert">you must specify an id AND an name for a radio or checkbox button</p>');
  161.      else $name=$fields[$x][$x2]['field_name']; //modification de $name comme expliqué plus haut
  162.    }
  163.    //début de la balise.
  164.    //rappel : s'il ne s'agit pas d'un bouton radio ou d'une checkbox, $name=$fields[$x][$x2]['field_id']. Sinon, $name=$fields[$x][$x2]['field_name']
  165.    echo '<input type="', $fields[$x][$x2]['field_type'], '" name="', $name, '" id="', $fields[$x][$x2]['field_id'], '"';
  166.    //s'il n'y a pas de class de défini, on assigne la class 'form'
  167.    if ($fields[$x][$x2]['field_class']) echo ' class="', $fields[$x][$x2]['field_class'], '"'; else echo ' class="form"';
  168.    //['oth_attributes'] permet de caser tous les attributs de balise non prévus avec le tableau $fields
  169.    if ($fields[$x][$x2]['oth_attributes']) echo ' ', $fields[$x][$x2]['oth_attributes'];
  170.    //affichage de la valeur du champ ; par sécurité on évitera d'afficher dans le source un mot de passe
  171.    if ($fields[$x][$x2]['field_value'] and $fields[$x][$x2]['field_type']!='password') echo ' value="', $fields[$x][$x2]['field_value'], '"';
  172.    //si ['checked'] est différent de 0, c'est qu'on veut sélectionner ce bouton par défaut (ne s'applique qu'aux boutons radios ou checkbox)
  173.    if ($fields[$x][$x2]['checked'] and ($fields[$x][$x2]['field_type']=='radio' or $fields[$x][$x2]['field_type']=='checkbox') ) echo ' checked="checked"';
  174.    echo ' />', "\n"; //fermeture de la balise
  175.   }
  176.   echo "\n";
  177.   $x2++;
  178.  }
  179.  echo "\t", '</fieldset>', "\n\n"; //fermeture du fieldset
  180.  $x++;
  181. }
  182. echo '</form>', "\n"; //fermeture du form
  183. }
  184. ?>


 
Un exemple d'utilisation bidon :

Code :
  1. <?php
  2. $fieldset[0]['legend']='le beau form';
  3. $fieldset[1]['legend']='le 2eme !!';
  4. $fields[0][0]['field_type']='textarea';
  5. $fields[0][0]['field_id']='test';
  6. $fields[0][0]['field_value']='blabla';
  7. $fields[0][0]['field_class']='form';
  8. $fields[0][0]['label']='joli';
  9. $fields[0][1]['field_type']='select';
  10. $fields[0][1]['field_id']='test2';
  11. $fields[0][1]['field_value']='choix 2 choix 3';
  12. $fields[0][1]['field_class']='form';
  13. $fields[0][1]['label']='joliiiii';
  14. $fields[0][1]['option'][0]='choix 1';
  15. $fields[0][1]['option'][1]='choix 2';
  16. $fields[0][1]['option'][2]='choix 3';
  17. $fields[0][1]['multiple']=1;
  18. $fields[1][0]['title']='choisissez';
  19. $fields[1][0]['field_type']='checkbox';
  20. $fields[1][0]['field_id']='test3';
  21. $fields[1][0]['field_name']='check';
  22. $fields[1][0]['field_value']=1;
  23. $fields[1][0]['field_class']='form';
  24. $fields[1][0]['label']='radio1';
  25. $fields[1][1]['field_type']='checkbox';
  26. $fields[1][1]['field_id']='test4';
  27. $fields[1][1]['field_name']='check';
  28. $fields[1][1]['field_value']=2;
  29. $fields[1][1]['field_class']='form';
  30. $fields[1][1]['checked']=1;
  31. $fields[1][1]['label']='radio2';
  32. $fields[1][2]['field_type']='submit';
  33. $fields[1][2]['field_id']='test5';
  34. $fields[1][2]['field_value']=submit;
  35. form ('test.php', 1, $fields, $fieldset);
  36. ?>


 
Et enfin, le code html généré :

Code :
  1. <form method="post" action="test.php" id="1">
  2. <fieldset class="form">
  3.  <legend class="form">le beau form</legend>
  4.  <label for="test" class="normal_label">joli</label>
  5.  <textarea name="test" id="test" class="form">blabla</textarea>
  6.  <label for="test2" class="normal_label">joliiiii</label>
  7.  <select name="test2" id="test2" class="form" multiple="multiple">
  8.   <option value="choix 1">choix 1</option>
  9.   <option value="choix 2" selected="selected">choix 2</option>
  10.   <option value="choix 3" selected="selected">choix 3</option>
  11.  </select>
  12. </fieldset>
  13. <fieldset class="form">
  14.  <legend class="form">le 2eme !!</legend>
  15.  <p class="radio_checkbox_title">choisissez</p>
  16.  <label for="test3" class="radio_checkbox_label">radio1</label>
  17.  <input type="checkbox" name="check" id="test3" class="form" value="1" />
  18.  <label for="test4" class="radio_checkbox_label">radio2</label>
  19.  <input type="checkbox" name="check" id="test4" class="form" value="2" checked="checked" />
  20.  <input type="submit" name="test5" id="test5" class="form" value="submit" />
  21. </fieldset>
  22. </form>


 
Voili voilou, j'attends vos conseils  :hello:


Message édité par Djebel1 le 29-09-2005 à 05:35:08
Reply

Marsh Posté le 29-09-2005 à 05:33:09   

Reply

Marsh Posté le 29-09-2005 à 10:46:39    

Alors première chose a faire :: arrete la drogue ( en tous ca pendant les heures de travail) :)
 
Deuxième chose :: allez faire un tour sur http://smarty.php.net/
Ca sert a rien de réinventé la poudre, utilise les templates ca te permettra d'isolé ton code html. En plus le gros avantage c que le graphiste pour faire des modifs (graphique biensur) sur le site sans que tu interviennes.  
 
Ta fonction est inutilisable sans une doc de 4 km !!  
En tous cas bravo pour cette exercice de style, tu t'es vraiment cassé le cul... dommage quelle ne serve a rien. ( en tous ca elle sert pas a isolé le html).
 
Je peux te fournir des exemple d'utilisation des templates si tu as du mal.

Message cité 1 fois
Message édité par DEns91 le 29-09-2005 à 10:49:29
Reply

Marsh Posté le 29-09-2005 à 10:59:41    

DEns91 a écrit :

Alors première chose a faire :: arrete la drogue ( en tous ca pendant les heures de travail) :)


Je pense que c'est toi qui devrait arrêter la drogue ;)
 

DEns91 a écrit :

Deuxième chose :: allez faire un tour sur http://smarty.php.net/


Aucun interêt dans ce cas-là. Le code HTML ne change jamais, y'a pas grand chose qui justifie de l'utilisation d'un langage de templates à part.
 

DEns91 a écrit :

En plus le gros avantage c que le graphiste pour faire des modifs (graphique biensur) sur le site sans que tu interviennes.


Le graphiste n'a pas à toucher au code HTML. Il ne s'occupe que du CSS. Et c'est encore plus le cas pour un formulaire : à part des label et des inputs, bah y'a pas grand chose à faire niveau HTML.  
 

DEns91 a écrit :

Ta fonction est inutilisable sans une doc de 4 km !!


Comme tout système qui génère des formulaires
 
 
Moi je suis en train de développer un système à peu-près similaire, sauf qu'il utilise un fichier XML pour la config, et un XSLT pour transformer ça en formulaires XHTML. Après j'ai aussi dans la config les critères de validation, qui va servir à valider les données :)

Reply

Marsh Posté le 29-09-2005 à 11:18:28    

FlorentG a écrit :

Je pense que c'est toi qui devrait arrêter la drogue ;)
 
 
Aucun interêt dans ce cas-là. Le code HTML ne change jamais, y'a pas grand chose qui justifie de l'utilisation d'un langage de templates à part.
 
 
Le graphiste n'a pas à toucher au code HTML. Il ne s'occupe que du CSS. Et c'est encore plus le cas pour un formulaire : à part des label et des inputs, bah y'a pas grand chose à faire niveau HTML.  
 
 
Comme tout système qui génère des formulaires
 
 
Moi je suis en train de développer un système à peu-près similaire, sauf qu'il utilise un fichier XML pour la config, et un XSLT pour transformer ça en formulaires XHTML. Après j'ai aussi dans la config les critères de validation, qui va servir à valider les données :)


 
Alors il me semblais que ce qu'il voulais c isolé l'HTML  

Citation :

Le contexte :  
Quelqu'un sur ce forum (qu'il me pardonne, je ne sais plus qui c'est) m'a expliqué dans un topic qu'il séparait le code php du code html généré, pour garder des scripts de programation propres et clairs.


 
Maintenant si il veux généré du code html ca c autre chose en effet tu as raison je retire tous ce que j'ai dis... mème si je ne vois pas trop l'utilité de créer un fonction aussi compliqué pour généré des pages HTML. C'est vraiment pas une de mes problematiques, Je serais ravi que tu m'explique un peu l'interet a koi ca te sert de faire ca ??
J'utilise egalement le XML, et les feuilles de style, mais plutot pour générer de fichier ( RTF, HTML, CSV, TXT, XML, XLS ....)


Message édité par DEns91 le 29-09-2005 à 11:19:10
Reply

Marsh Posté le 29-09-2005 à 11:22:23    

Comme ça, tout est centralisé. J'ai la définition de chaque champs, le type de données, et les critères de validation.
 
A partir de ça, je peux :

  • Générer les requêtes de créations de tables
  • Générer des formulaires
  • Automatiser la validation


Et si jamais je veux rajouter un champ ou quoi que ce soit, j'ai un seul truc à modifier :)

Reply

Marsh Posté le 29-09-2005 à 11:32:00    

J'ai du mal a te suivre. je pense qu'on parle parle de la mème chose.
Je parle juste de la gestion du HTML. Pourquoi tu me parle de  "Générer les requêtes de créations de tables" "Automatiser la validation" ??
 
Je crois que je vais allé faire un gros DODO je comprend rien a rien aujourd'hui.
 

Reply

Marsh Posté le 29-09-2005 à 11:54:50    

Bah tu m'as demandé :

Citation :

mème si je ne vois pas trop l'utilité de créer un fonction aussi compliqué pour généré des pages HTML.


Je répond que ce n'est pas le seul but. En effet, générer de l'HTML à partir d'une définition des champs n'est pas très intéressant. Par contre, gérer tout un tas de chose à partir d'une seule définition est beaucoup plus intéressant ;)

Reply

Marsh Posté le 29-09-2005 à 16:28:30    

hmm, j'ai abordé ça de la bonne manière alors ou pas ? :)
C'est donc normal d'avoir une définition de 10 pages ? ^^ (pour le XSLT je sais pas ce que c'est, je cherchera sur google ce soir :) )
 

Citation :

En effet, générer de l'HTML à partir d'une définition des champs n'est pas très intéressant. Par contre, gérer tout un tas de chose à partir d'une seule définition est beaucoup plus intéressant


Tu veux dire quoi ? Qu'il y a un moyen pour faire une telle fonction sans passer par un tableau de 10 pages ? J'ai pas très bien compris ce que tu voulais dire (c'est ptet parce que je sais pas ce qu'est le XSLT :p)


Message édité par Djebel1 le 29-09-2005 à 16:32:30
Reply

Marsh Posté le 29-09-2005 à 19:56:14    

Ca veut dire que t'as une classe qui prend ton tableaux de config en paramètres, pis va regarder tout ce qu'il y a en $_POST, et valider chaque champs selon la config :) Tout de manière automatisée

Reply

Marsh Posté le 29-09-2005 à 21:11:00    

oki donc la différence c'est que toi tu passes par une classe, et tu y inclus aussi les vérifications, si j'ai bien suivi ?
Mais donc grosso modo, mon histoire de tableaux avec 2000 paramètres, ca reste valable si je suis toujours bien ?
 
Au niveau du code en lui-même, tu aurais des remarques ? quelque chose que je fais mal ?
 
(et merci au passage pour les réponses ^^)

Reply

Marsh Posté le 29-09-2005 à 21:11:00   

Reply

Marsh Posté le 29-09-2005 à 21:44:32    

Ca reste valable, ouais. Après t'as les gars comme moi qui font ça avec un fichier de config XML :)

Reply

Marsh Posté le 29-09-2005 à 23:03:24    

J'ai matté un peu les XSLT sur le site du W3C, tu pourrais faire voir un exemple de ce que tu fais, pour que ça soit un peu plus concret pour moi ? :)
 
Et toujours dans cet esprit de séparer la prog du html, et de centraliser la génération de ton html :
 
- Tu fais ça pour tout ton code html ? Par exmple tu fais pareil pour générer un tableau html ?
 
- Si oui, comment fais-tu quand le html que tu veux générer est très simple. Par exemple, si tu veux générer un :

Code :
  1. <p class="test">blabla</p>

N'est-ce pas une grosse galère de vouloir absolument séparer ce html du php ? Ou bien fais-tu tout simplement une fonction

Code :
  1. funtion blabla ($text)
  2. { echo '<p class="test">', $text, '</p>'; }

dans ce style.
 
(bon je sais pas si je suis très clair dans ce que je veux demander :p)


Message édité par Djebel1 le 29-09-2005 à 23:04:44
Reply

Marsh Posté le 29-09-2005 à 23:36:11    

Chez moi tout passe par XSLT... En général, je récupère les infos d'une base de donnée, pis je génère un fichier XML, qui sera transformé en quelque chose (XHTML, PDF, etc.)

Reply

Marsh Posté le 30-09-2005 à 06:22:54    

Ok bah en fait je viens de voir que toutes les questions que je me posais trouvaient réponse dans ta signature  FlorentG [:audi]
Finalement, y avait de l'idée dans ma fonction pourrie :D (enfin un vague début de germe d'idée).
 
Bon bah il me reste un paquet de trucs à apprendre et je pense que ton post va bientôt être up par les questions d'un boulet :whistle:  

Reply

Marsh Posté le 05-10-2005 à 23:23:14    

Ta fonction "pourrie" est un peu ce que j'avais fait y'a un an pour me permettre de générer un formulaire avec du javascript inclus me permettant de tester les éléments de ce formulaire dont les caractéristiques et les tests a éffectuer sur chacun de ses champs etaient ds un fichier de conf.
 
J'avais meme créer une fonction en php qui m'effectuait des tests.
 
C'etait vraiment tres pratike car en 3 min je pouvais générer un formulaire complet avec tt les tests necessaires. Cela dit ce n'est pas tres "propre" de le faire de cette facon et passer par les templates peut etre franchement genial et c'est ce ke j'ai en tete.
 
Grace a plusieurs templates tu peux proposer diverses facons d'afficher ton formulaires etc...
 
Utiliser smarty est le top.
 
Ce ke je pense faire tres prochainement c la création via une interface d'un systeme complet (génération d'un formulaire, tests, mise à jour de données, upload de fichier etc...) en utilisant a fond php5 et smarty, et je suis en train de poser les fondations.

Reply

Marsh Posté le 06-10-2005 à 08:14:13    

Diverses façons d'afficher le formulaire ?

Reply

Sujets relatifs:

Leave a Replay

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