Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [skrypt]generowanie formularzy
AcidBurnt
post
Post #1





Grupa: Zarejestrowani
Postów: 215
Pomógł: 1
Dołączył: 13.04.2003
Skąd: z ławki przed blokiem

Ostrzeżenie: (0%)
-----


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 (IMG:http://forum.php.pl/style_emoticons/default/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 (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Ten post edytował AcidBurnt 19.05.2006, 16:48:40
Go to the top of the page
+Quote Post
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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 (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)


ocena koncowa:
niska
Go to the top of the page
+Quote Post
AcidBurnt
post
Post #3





Grupa: Zarejestrowani
Postów: 215
Pomógł: 1
Dołączył: 13.04.2003
Skąd: z ławki przed blokiem

Ostrzeżenie: (0%)
-----


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 (IMG:http://forum.php.pl/style_emoticons/default/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 (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

cenne uwagi to negatywne uwagi (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) zaraz bedziemy coś probowac poprawic (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif)
Go to the top of the page
+Quote Post
nospor
post
Post #4





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 16:25