Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Ocena kodu - samopiszący form
Forum PHP.pl > Forum > PHP
Malukaz
Jestem świeży w OOP, dlatego chętnie usłyszałbym kilka porad na temat tego co stworzyłem (licze się z tym, że może to być totalnie błędne).

Ponadto próbuje stworzyć do tej "samopiszącej się formy" validacje, która sama się będzie pisać. Jakieś porady :/ ?

  1. define( 'PHP_SELF', $_SERVER['REQUEST_URI'] );
  2.  
  3. class FormCreator
  4. {
  5. var $result;
  6. public function addfield ($type, $vars) {
  7. $this->$type($vars);
  8. }
  9. public function __construct()
  10. {
  11. $this->result = '';
  12. }
  13. public function __destruct() {
  14. }
  15. private function startForm ($formname){
  16. $this->result .= '<form action="'.PHP_SELF.'" method="post" id="'.$formname.'" class="form" enctype="multipart/form-data">
  17. <input type="hidden" name="'.$formname.'" value="1">';
  18. }
  19. private function endForm ($formname){
  20. $this->result .= '</form>';
  21. }
  22. private function input($vars){
  23. $this->result .= '<input type="'.$vars['type'].'" class="'.$vars['style'].'" name="'.$vars['name'].'" id="'.($vars['id'] ? $vars['id'] : $vars['name']).'" data-req="'.$vars['required'].'">';
  24. }
  25. private function select($vars) {
  26. $loopvar = count ($vars['options']);
  27. array_unshift($vars['options'], $loopvar);
  28. $this->result .= '<select name="'.$vars['name'].'" id="'.$vars['name'].'" data-req="'.$vars['required'].'">';
  29. for ($i=1;$i<=$vars['options'][0];$i++){
  30. $this->result .= '<option>'.$vars['options'][$i].'</option>';
  31. }
  32. '</select>';
  33. }
  34. private function label_start($vars){
  35. $this->result .= '<label for="'.$vars['for'].'">'.$vars['s_text'].'';
  36. }
  37. private function label_end($vars){
  38. $this->result .= $vars['e_text'].'</label>';
  39. }
  40. private function button($vars){
  41. $this->result .= '<input type="submit" value="'.$vars.'">';
  42. }
  43. public function getResult(){
  44. return $this->result;
  45. }
  46.  
  47. }
  48.  
  49.  
  50.  
  51.  
  52. // Create a new object
  53. $obj = new FormCreator("test");
  54. $input1 = array ( type => 'email', style => 'test', required=> 'yes', name => 'c_mail' );
  55. $input2 = array ( type => 'radio', style => 'test', required=> 'yes', name => 'radion1', id=> 'r1' );
  56. $select1 = array ( options => array("test", "test2"), style => 'test', required=> 'no', name => 'c_select' );
  57. $label1['s_text'] = 'Some text';
  58. $label1['for'] = 'r1';
  59.  
  60. $obj -> addfield("startForm", "autoform");
  61. $obj -> addfield("input", $input1);
  62. $obj -> addfield("label_start", $label1);
  63. $obj -> addfield("input", $input2);
  64. $obj -> addfield("label_end", $label1);
  65. $obj -> addfield("select", $select1);
  66. $obj -> addfield("button", "Send Me Now");
  67. $obj -> addfield("label_start", array(s_text => 'checkbutton'));
  68. $obj -> addfield("input", array(type=>"checkbox",required=>"no", name=> "somecheck"));
  69. $obj -> addfield("label_end", array());
  70. $obj -> addfield("endForm", "");
  71. echo $obj->getResult();
Turson
Brakuje zmiany form method post na get, dodania kolejnych atrybutów, zmiany klasy, url w action
Począwszy od linii 54, indeksy w tablicach też się bierze w ciapki
nospor
Nie ma czegoś tak podstawowego, jak odbieranie danych.

var $result - mamy juz XXI wiek i slowka VAR naprawde są przezytkiem minionej epoki wink.gif

Każde pole powinno być oddzielną klasą.
Button nie ma nazwy

itd itd

Z OOP nie ma to wiekszego związku. Ot zebranie paru funkcji w jednej klasie. Przenosze
Sephirus
Jak mówi dobre internetowe przysłowie - "You're doing it wrong" - szczerze i bez ogródek smile.gif

Twój kod do OOP ma się bardzo mało - owszem jest w nim 1 obiekt... ale to nie jest OOP.

Nie będę analizował kodu ale podpowiem Ci jak to powinno wyglądać (idea):

- pierwszy obiekt to obiekt formularza, w którym możesz zmieniać jego parametry (action, method itp.), własności i zarządzać jego elementami (dodawać, usuwać, odnosić się)

- drugi obiekt to ogólny obiekt elementu formularza zawierający podstawowe metody i własności (np: wyświetl, waliduj itp)

- kolejne obiekty to obiekty konkretnych typów pól formularza (text, select, radio, radio-group, label, plaintext itp), powinny one dziedziczyć z ogólnego obiektu elementu formularza i uzupełniać go o specyficzne dla siebie opcje

Tak zbudowany system formularza będzie już bliżej OOP. Daje dużo plusów i możliwości. Uzywanie polegało by na utworzeniu nowego formularza, każdego z pól osobno i dodaniu ich do formularza w odpowiedniej kolejności. Co więcej możesz każde pole wyposażyć w opcje przypisywania wartości a następnie formularz w przypisywanie wartości jego polom - wówczas możesz uzyskać fajną edycję danych wink.gif

Pomyśl o tym
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-2025 Invision Power Services, Inc.