Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [skrypt]generowanie formularzy
Forum PHP.pl > Inne > Oceny
AcidBurnt
witam

z recji, że pisze pewien projekcik w ktory bede musial stworzyc kilka duuuzych formularzy napisalem pewna klase do ich generowania:

http://nie.bbgroup.pl/test/

na dole stronki

index.php - czyli wywolanie klasy i przygotowanie formularza:

  1. <?php
  2. require_once('functions/functions.php');
  3.  
  4. function puste($t){
  5. return empty($t);
  6. }
  7.  
  8.  
  9. $smarty = new Smarty;
  10. $smarty -> template_dir = './tpl';
  11. $smarty -> compile_dir = './tpl_c';
  12. $smarty -> cache_dir = './tpl_cache';
  13. $smarty -> config_dir = './tpl_configs';
  14.  
  15. $form = new form('formularz_testowy', 'post', true, $_POST);
  16. /* rozpoczynanie formularza */
  17. $formularz_testowy[begin] = $form -> formBegin();
  18.  
  19. /* generowanie pola typu input */
  20. $formularz_testowy[login] = $form -> genInput('puste','text', 'login', $_POST[formularz_testowy][login], 'test', 'Pole Login nie mo�e by� puste', 'a tutaj na przyklad jakies javascriptowegowienko');
  21. /* za pomoca genInput generujemy tez pole typu checbox ;) */
  22. $formularz_testowy[checked] = $form -> genInput('puste','checkbox', 'sex', $_POST[formularz_testowy][sex], '', 'teeeeeeeeeeeeeeerreeeeeeee', '');
  23. $formularz_testowy[wyslij] = $form -> genInput('', 'submit', 'go', 'wy�lij', '');
  24.  
  25. /* generowanie pola typu texarea 
  26. w warto�� $line[4] podajemy np <p>%</p> wtedy tam gdzie % zostanie wstawione pole <input type="radio" .....
  27. taka o dekoracyjna funkcyjka jakby trzeba bylo dodac jakies <br> albo <p> przy radio biggrin.gif dobry jestem co nie ;p
  28. */
  29.  
  30. $formularz_testowy[tresc] = $form -> genTextarea('puste', 'tresc', $_POST[formularz_testowy][tresc], 'as', 'Tre�� nie mo�e by� pusta', '');
  31. /* generowanie pola typu radio */
  32. /* 0 - value, 1 - class, 2 - add(jakas java), 3 - checked, 4 - decorate */
  33.  
  34. $items = array();
  35. $items[] = array('pierwsza', 'class', '', 'jakis java', '%<br />');
  36. $items[] = array('drua', 'aasd', '', 'checked', '%<hr>');
  37. $items[] = array('pierwsza', 'asd', '');
  38. $formularz_testowy[radio] = $form -> genRadio('', 'radio', $items, 'wiadomosc bledu');
  39.  
  40. /* generowanie pola typu select */
  41. /* 0 - value, 1 - tresc, 2 - class , 3 - add(jakas java), 4 - selected */
  42.  
  43. $items = array();
  44. $items[] = array('', '-= wybierz =-', '', '');
  45. $items[] = array('1', 'tresc', 'asd','', 'selected');
  46. $items[] = array('2', 'tresc 1', '');
  47. $items[] = array('3', 'tresc 2', '');
  48. $formularz_testowy[select] = $form -> genSelect('puste', 'select', 'class', $items, 'wiadomosc bledu');
  49.  
  50. /* przes�anie ewentualnych b��d�w */
  51. $formularz_testowy[errors] = $form -> errorMsg;
  52.  
  53. /* musi byc wywolane jako ostatnie */
  54. $formularz_testowy[end] = $form -> formEnd();
  55.  
  56. if($form -> parse){
  57. echo "formulaz przeszed� test prawid�owo";
  58. }
  59. else{
  60. $smarty -> assign('formularz_testowy', $formularz_testowy);
  61. }
  62.  
  63. $smarty -> display('index.tpl');
  64. ?>


form.class.php - klasa formularza

  1. <?php 
  2. class form{
  3. var $form_id;
  4. var $method;
  5. var $debug;
  6. var $data;
  7. var $errorMsg = array();
  8.  
  9. var $parse = false;
  10.  
  11. function __construct($form_id, $method, $debug, $data = array()){
  12. $this -> form_id = $form_id;
  13. $this -> method = $method;
  14. $this -> debug = $debug;
  15.  
  16. $this -> data = $data;
  17. }
  18.  
  19. function formBegin($class =''){
  20. $form_begin = '<form id="'.$this -> form_id.'" method="'.$this -> method.'" '.($class ? 'class="'.$class.'"' : '').'>';
  21. return $form_begin;
  22. }
  23.  
  24. function genInput($checkFunction = '',$type, $name, $value = '', $class = '', $error_msg= '', $add =''){
  25. if($this -> debug && !empty($this -> data) && !empty($checkFunction)){
  26. if($checkFunction($this -> data[$this -> form_id][$name])){
  27. $this -> errorMsg[] = $error_msg;
  28. $error = 'style="border: 1px solid red"';
  29. }
  30. }
  31. if($type == 'checkbox'){
  32. $input = '<input type="'.$type.'" name="'.$this -> form_id.'['.$name.']" '.($value == 'on' ? 'checked' : '').' '.($class ? 'class="'.$class.'"' : '').' '.$add.' '.$error.'/>';
  33. }
  34. else{
  35. $input = '<input type="'.$type.'" name="'.$this -> form_id.'['.$name.']" '.($value ? 'value="'.$value.'"' : '').''.($class ? 'class="'.$class.'"' : '').' '.$add.' '.$error.'/>';
  36. }
  37. return $input;
  38. }
  39.  
  40. function genTextarea($checkFunction = '', $name, $value ='', $class ='', $error_msg = '', $add = ''){
  41.  
  42. if($this -> debug && !empty($this -> data) && !empty($checkFunction)){
  43. if($checkFunction($this -> data[$this -> form_id][$name])){
  44. $this -> errorMsg[] = $error_msg;
  45. $error = 'style="border: 1px solid red"';
  46. }
  47. }
  48. $textarea = '<textarea name="'.$this -> form_id.'['.$name.']" '.($class ? 'class="'.$class.'"' : '').' '.$add.' '.$error.'>'.($value ? ''.$value.'' : '').'</textarea>';
  49. return $textarea;
  50. }
  51.  
  52. function genRadio($checkFunction = '', $name,$items , $error_msg = ''){
  53. if($this -> debug && !empty($this -> data) && !empty($checkFunction)){
  54. if($checkFunction($this -> data[$this -> form_id][$name])){
  55. $this -> errorMsg[] = $error_msg;
  56. $error = 'style="border: 1px solid red"';
  57. }
  58. }
  59. $radio = '';
  60. foreach ($items as $a => $lines){
  61. if(empty($lines[4])){
  62. $radio .= '<input type="radio" name="'.$this -> form_id.'['.$name.']" value="'.$lines[0].'" '.(!empty($lines[1]) ? 'class="'.$lines[1].'"' : 'as').' '.$lines[3].' '.$error.'/>';
  63. }
  64. else {
  65. $radio .= str_replace('%','<input type="radio" name="'.$this -> form_id.'['.$name.']" value="'.$lines[0].'" '.($lines[1] ? 'class="'.$lines[1].'"' : '').' '.$lines[3].' '.$error.'/>', $lines[4]);
  66. }
  67. }
  68. return $radio;
  69. }
  70.  
  71. function genSelect($checkFunction,$name, $class,$items, $error_msg = ''){
  72. if($this -> debug && !empty($this -> data) && !empty($checkFunction)){
  73. if($checkFunction($this -> data[$this -> form_id][$name])){
  74. $this -> errorMsg[] = $error_msg;
  75. $error = 'style="border: 1px solid red"';
  76. }
  77. }
  78. $select = '<select name="'.$this -> form_id.'['.$name.']" '.$error.'>';
  79. foreach ($items as $a => $lines){
  80. $select .= '<option value="'.$lines[0].'" '.($lines[0] ? 'class="'.$lines[0].'"' : '').' '.$lines[3].' '.$lines[4].'>'.$lines[1].'</option>';
  81. }
  82. $select .= '</select>';
  83. return $select;
  84. }
  85.  
  86. function formEnd(){
  87. $form_end = '</form>';
  88. if(empty($this -> errorMsg) && !empty($this -> data)){
  89. $this -> parse = true;
  90. }
  91. return $form_end;
  92. }
  93. }
  94. ?>


index.tpl - czyli umieszczenie formularza na www

  1. {if $formularz_testowy}
  2. {$formularz_testowy.begin}
  3.      {if $formularz_testowy.errors}
  4.      <tr>
  5.            <td colspan="2">
  6.                  {section name=a loop=$formularz_testowy.errors}
  7.                        <p style="color:red">{$formularz_testowy.errors[a]}</p>
  8.                  {/section}
  9.            </td>
  10.      </tr>
  11.      {/if}
  12.            <tr>
  13.                  <td>Login:</td>
  14.                  <td>{$formularz_testowy.login}</td>
  15.  
  16.            <tr>
  17.                  <td>tresc</td>
  18.                  <td>{$formularz_testowy.tresc}</td>
  19.            </tr>
  20.            <tr>
  21.                  <td></td>
  22.                  <td>{$formularz_testowy.wyslij}</td>
  23.            </tr>
  24.            <tr>
  25.                  <td>wybierz</td>
  26.                  <td>{$formularz_testowy.radio}</td>
  27.            </tr>
  28.            <tr>
  29.                  <td>wybierz</td>
  30.                  <td>{$formularz_testowy.select}</td>
  31.            </tr>
  32.            <tr>
  33.                  <td></td>
  34.                  <td>{$formularz_testowy.checked}</td>
  35.            </tr>
  36.      </table>
  37.      {$formularz_testowy.end}
  38. {/if}


wszelkie opinie mile widziane smile.gif
nospor
same minusy:

1)Ten formularz generuje mase noticów. CZemu? ano temu:
$_POST[formularz_testowy][login]
powinno byc:
$_POST['formularz_testowy']['login']
i reszta podobnie

2) Uzytkownik musi sam zadbac o zapamietanie wartosci po wyslaniu forma. To powinien robic juz formularz, a usera nie powinno to obchodzic

3) Przyjales, ze pole checkbox nie bedzie przyjmowalo zadnych wartosci. A co jesli jednak okaze sie, ze będą jakies wartosci?

4) deklarowanie wszystkich pol jako tablica, ktorej glownym indexem jest nazwa fomularza. to zle/zbedne rozwiazanie. pola powinno sie rozroniac glownie po id. zbieranie ich do kupy w jednej tablicy jest zbedne i nie wygodne

5) uzytkownik musi sam zapamietywac generowane pola i potem je przypisywac do szablonu. to tez powiino byc robione przez formularz.

6) i jeszcze bym cos pewnie znalazl, ale nie chce mi sie juz szukac smile.gif


ocena koncowa:
niska
AcidBurnt
Cytat
1)Ten formularz generuje mase noticów. CZemu? ano temu:
$_POST[formularz_testowy][login]
powinno byc:
$_POST['formularz_testowy']['login']
i reszta podobnie


jak i wiele bardzo duzych projektow ;p no ale masz racje mzna sie tego bez problemu pozbyc

Cytat
2) Uzytkownik musi sam zadbac o zapamietanie wartosci po wyslaniu forma. To powinien robic juz formularz, a usera nie powinno to obchodzic


tzn bo nie rozumem?

Cytat
3) Przyjales, ze pole checkbox nie bedzie przyjmowalo zadnych wartosci. A co jesli jednak okaze sie, ze będą jakies wartosci?


pewnie wyszlo by w praniu winksmiley.jpg masz racje mozna dodac

Cytat
4) deklarowanie wszystkich pol jako tablica, ktorej glownym indexem jest nazwa fomularza. to zle/zbedne rozwiazanie. pola powinno sie rozroniac glownie po id. zbieranie ich do kupy w jednej tablicy jest zbedne i nie wygodne


jak Twoim zdaniem bylo by wygodnie?

Cytat
5) uzytkownik musi sam zapamietywac generowane pola i potem je przypisywac do szablonu. to tez powiino byc robione przez formularz.


zgodze sie, mozna ta czynnosc troche zautomatyzowac

Cytat
6) i jeszcze bym cos pewnie znalazl, ale nie chce mi sie juz szukac smile.gif


poszukaj, wszelkie uwagi mile widziane winksmiley.jpg

cenne uwagi to negatywne uwagi smile.gif zaraz bedziemy coś probowac poprawic biggrin.gif
nospor
ad2)
NO chodzi oto, ze user musi sam wpisywac wartosc z posta, przy generowaniu pola. A to powinien za niego robic juz sam formularz


ad4)
Jak wygodnie? No olac robienie z pol tablicy, ktorej indexem jest nazwa fomularza. Identyfikowac pola juz tylko po ID i nadawac jej normalne nazwy anie:
name="nazwaformularza[nazwapola]"
powinno byc:
...name="nazwapola" id="idpola" ....

7)
Pole select nie pamieta co zaznaczono
Pozatym brak jest mozliwosci stworzenia multiselecta, co w zasadzie wynika z braku pamietania co zaznaczono

8)zaznaczenie radia tez nie jest pamietane
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2024 Invision Power Services, Inc.