![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarząd Postów: 3 503 Pomógł: 28 Dołączył: 17.10.2002 Skąd: Wrocław ![]() |
Dziaiaj podczas dyskusji z PMadejem wynikł temat obiektowej obsługi formularzy. Zaświtał mi w głowie taki schemacik, jaki podaję niżej. Oczywiscie nie gwarantuję, ze zadziała - ale myślę, że wystarczająco obrazuje mój tok myśłenia. Co sądzicie do tagiego podejścia do tematu walidacji dancy hz formularzy?
BTW: w kodzie wielu rzeczy nie ma, ale nie w tym sęk... [php:1:5d9c559937]<?php class Form { var $arrFormElements = NULL; function Form() { $this->FormElements = array(); } function CreateField( $strName ) { $this->arrFormElements[$strFieldName] = new FormField(); } } class FormField { var $strName = ''; var $strType = ''; var $mixData = ''; var $blnRequired = false; var $blnValid = false; var $blnPattern = NULL; var $mixPatternName = ''; var $arrErrors = NULL; function FormField() { $this->arrErrors = array(); } function Create() { $smarty->display( 'form_elements/'.$this->strFieldType.'.tpl' ); /** * Zakładamy, ze mamy teplatesy typu: textarea, input, button itp. */ } function ValidatePattern( ) { if( $this->blnRequired ) { $this->blnValid = !is_empty( $this->mixData ); if( !$this->blnValid ) { $this->arrErrors[] = 'Must be filled'; } } if( !is_null( $this->$blnPattern ) ) { $this->blnValid = preg_match($this->$blnPattern, $this->$blnData); if( !$this->blnValid ) { $this->arrErrors[] = 'Must be corrected '.$this->strPatternName.' value!'; } } } } /** * Example of use */ $Form = new Form(); $Form->CreateField( 'pkwiu', true ); $Form->arrFormElements['pkwiu']->strType = 'input_text'; $Form->arrFormElements['pkwiu']->strData = $_POST['pkwiu']; $Form->arrFormElements['pkwiu']->strPattern = '([0-9]{2}.[0-9]{1,2}.[0-9]{1,2}-[0-9]{1,2}.[0-9]{1,2})'; $Form->arrFormElements['pkwiu']->strPatternName = 'PKWiU'; $Form->arrFormElements['pkwiu']->ValidatePattern(); if( !$Form->arrFormElements['pkwiu']->blnValid ) { $Form->arrFormElements['pkwiu']->Create(); foreach( $Form->arrFormElements['pkwiu']->arrErrors as $strError ) { echo '<br />'.$strError; } } ?> [/php:1:5d9c559937] |
|
|
![]() |
![]()
Post
#2
|
|
Vice-Administrator serwera Grupa: Przyjaciele php.pl Postów: 395 Pomógł: 0 Dołączył: 7.08.2003 Skąd: Kielce Ostrzeżenie: (0%) ![]() ![]() |
no i przyszla kolej na moje swiateczne wypociny i przemyslenia. To co stworzylem odpowiada za wyswietlanie formularzy i jest nadal wersja rozwojowa ... oparte o schemat scannera. Walidator to jak na razie za skomplikowane dla mnie.
Moje klasy korzystaja z klasy glownej MainClass.inc.php:[php:1:b952a1ed0c]<?php require_once(ENV_smarty_dir.'Smarty.class.php'); require_once(ENV_adodb_dir.'adodb.inc.php'); class Main { var $smarty; var $adodb; function Main() { //tworzenie obiektu smarty $this->smarty = new Smarty; $this->smarty->cache_dir=ENV_cache_dir; $this->smarty->template_dir=ENV_templates_dir; $this->smarty->compile_dir=ENV_compile_dir; //tworzenie obiektu adodb $this->adodb = ADONewConnection(ENV_db_type); $this->adodb->SetFetchMode(ADODB_FETCH_NUM); $this->adodb->connect(ENV_db_server,ENV_db_user,ENV_db_password,ENV_db); } } ?>[/php:1:b952a1ed0c] klasa FormClass.inc: [php:1:b952a1ed0c]<? require(ENV_core_dir.'MainClass.inc.php'); class Form extends Main { var $arrFormElements = NULL; var $arrFormHeader = NULL; function Form($action,$method) //tworzy obiekty i generuje naglowek formularza { $this->Main(); $this->arrFormHeader['action']=$action; $this->arrFormHeader['method']=$method; $this->smarty->assign('action',$this->arrFormHeader['action']); $this->smarty->assign('method',$this->arrFormHeader['method']); $this->smarty->display(ENV_templates_dir.'FormHeader.tpl'); } //tworzy konkretne pola formularza function CreateField($type,$name,$value,$required,$fieldpattern) { $this->arrFormElements[$name] = new FormField(); $this->arrFormElements[$name]->strFieldName = $name; $this->arrFormElements[$name]->strFieldType = $type; $this->arrFormElements[$name]->mixFieldData = $value; $this->arrFormElements[$name]->blnFieldRequired = $required; $this->arrFormElements[$name]->blnFieldValid = null; $this->arrFormElements[$name]->strFieldPattern = $fieldpattern;//'([0-9]{2}.[0-9]{1,2}.[0-9]{1,2}-[0-9]{1,2}.[0-9]{1,2})'; $this->arrFormElements[$name]->Validate(); $this->arrFormElements[$name]->Create(); } function ShowElements() { print ('<pre>'); print_r($this->arrFormElements); print ('</pre>'); } } class FormField extends Main { var $strFieldName = ''; var $strFieldType = ''; var $mixFieldData = ''; var $mixFieldPattern = ''; var $blnFieldRequired = false; var $blnFieldValid = false; var $blnFieldPattern = NULL; var $arrFieldErrors = NULL; function FormField() { $this->Main(); $this->arrFieldErrors = array(); } function Create() { $this->smarty->assign('name',$this->strFieldName); $this->smarty->assign('value',$this->mixFieldData); $this->smarty->display(ENV_templates_dir.$this->strFieldType.'.tpl' ); /** * Zakładamy, ze mamy teplatesy typu: textarea, input, button itp. */ } } ?>[/php:1:b952a1ed0c] i zastosowanie: [php:1:b952a1ed0c]<?php require('config.php'); require(ENV_core_dir.'FormClass.inc.php'); $form = new Form($PHP_SELF,'POST'); $form->CreateField('input_text','nazwa','',true,''); $form->CreateField('input_radio','wybór','opcja 1',false,''); $form->CreateField('input_radio','wybór','opcja 2',false,''); $form->CreateField('input_checkbox','check','opcja 1',false,''); $form->CreateField('input_checkbox','check','opcja 2',false,''); $form->CreateField('select','select','',false,''); $form->CreateField('option','','opcja 1',false,''); $form->CreateField('option','','opcja 2',false,''); $form->CreateField('option','','opcja 3',false,''); $form->CreateField('select_end','','',false,''); $form->CreateField('select','select2','',false,''); $opcje=array('opcja 1','opcja 2','opcja 3'); $form->CreateField('option2','',$opcje,false,''); $form->CreateField('select_end','','',false,''); $form->CreateField('submit','submit','PotwierdĽ',true,''); $form->CreateField('reset','','usuń informacje',false,''); //$form->ShowElements(); ?>[/php:1:b952a1ed0c] przykladowy szablon: [xml:1:b952a1ed0c] <INPUT type="radio" name="{$name}" value="{$value}">{$value}<br> [/xml:1:b952a1ed0c] przy wyswietlaniu napotkalem na ponizsze problemy z dodatkowymi opcjami konkretnych pol i z braku czasu tego nie rozwiazalem: - opcja checked w polu radio - rozne value i opis pola dla checkboxa i radio - opcja multiple dla select'a - opcja maxlenght dla input text - rows/cols dla textarea w kwestii wygladu formularza stosujac ww rozwiazanie w metodzie form() mozemy dodac wlasciwosc stylu i po problemie |
|
|
![]() ![]() |
![]() |
Aktualny czas: 3.10.2025 - 01:19 |