Formulier Class

Door Edwin , 20 jaar geleden, 4.666x bekeken

Ik gebruik smarty en ik probeer html en php zo ver mogelijk van elkaar weg te houden. Dit is echter lastig als je veel met formulieren werkt. Daarom heb ik een class gemaakt die ervoor zorgt dat je html en php toch netjes kunt scheiden. (behalve in de class zelf natuurlijk) En kleine uitleg van de functies:

new form($name = "Verstuur", $target, $method = "POST", $reset = false)

$name: wordt gebruikt als name van de form tag en de value van de submit button.
$target: is de action van de form-tag.
$method: spreekt voor zich
$reset: bepaalt of er een reset button wordt getoond

input($type, $name, $value)

$type: type van de input, kan zijn -> text,password,radio,hidden,file,select,textarea
$name: name en id van de input/select/textarea tag, ook de inhoud van het label. Deze kan spaties bevatten, omdat die voor de id en name worden omgezet in '_'
$value: is string of array afhankelijk van het type. (bij radio en select is het een array)

De html wordt gestopt in $this->html.
Een voorbeeldje:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php

include('pad/naar/de/class');

$form = new form();
$form->input('text', 'Gebruikersnaam');
$form->input('password', 'Wachtwoord');
$form->input('radio', 'Geslacht', Array('Man', 'Vrouw'));
$form->input('textarea', 'Commentaar');
$form->input('checkbox', 'overeenkomst', 'ik kom overeen met de voorwaarde');

echo $form->html;

?>

Voorbeeld: http://www.assassino.nl/formclass.php

Gesponsorde koppelingen

PHP script bestanden

  1. formulier-class

 

Er zijn 14 reacties op 'Formulier class'

PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Kumkwat Trender
Kumkwat Trender
20 jaar geleden
 
0 +1 -0 -1
eej vet handig :P

alleen een vraagje, checkbox moet je toch kiezen uit 2 of meer inputen... hoe geef je dat aan met dit code?
$form->input('checkbox', 'overeenkomst', 'ik kom overeen met de voorwaarde');

peter
Edwin
Edwin
20 jaar geleden
 
0 +1 -0 -1
nee, dat is radio. Bij checkbox kijk je alleen maar of een bepaalde input gecheckt is.
Kumkwat Trender
Kumkwat Trender
20 jaar geleden
 
0 +1 -0 -1
ow ja :s -_-'
sorry

maar het script is wel handig...
Bo az
Bo az
20 jaar geleden
 
0 +1 -0 -1
Ik vind je input method niet erg overzichtelijk, denk je niet dat het beter is die in meerdere methods op te delen? Scheelt je meteen weer een parameter.
dus bv. Form::inputText('name', 'value');
Edwin
Edwin
20 jaar geleden
 
0 +1 -0 -1
@ Ik zie het echte voordeel niet echt. Het is detailwerk.

Ik zag trouwens dat er nog twee van deze formulier classes waren gepost. Maar ik vind die van mij veruit de handigst (en zeker overzichtelijkst). Misschien niet degene met de meeste opties, maar die heb je doorgaans ook niet nodig.
Frank -
Frank -
20 jaar geleden
 
0 +1 -0 -1
Waarom moet $value de ene keer een string zijn en de andere keer een array? Dat gaat natuurlijk fout en het is ook raar.

Tip: Geef met public, protected en private nog even het bereik van je variabelen en methodes aan. var is nog van het PHP 4-tijdperk.
Jelmer -
Jelmer -
20 jaar geleden
 
0 +1 -0 -1
Misschien is het handig om er nog in te bakken dat hij automatisch de opgestuurde waarde pakt (die dus in $_REQUEST[$id] zit) en waneer deze niet bestaat hij terugvalt op $value. Zo heb je meteen een goed formulier voor waneer het niet goed is opgestuurd.

Ander idee is om constanten in plaats van strings te gebruiken. Zo worden ze automatisch aangevuld in je favo editor, en krijg je direct een notice naar je hoofd gegooid waneer je een spelfout in de $type parameter maakt, wat het debuggen weer makkelijker maakt. Hetzelfde voor de $method.
Mark L
Mark L
20 jaar geleden
 
0 +1 -0 -1
Ligt het nou aan mij, of zit die checkbox nou in de textarea bij FireFox?
Afbeelding

Ik kan er ook niet op klikken :S En alleen de tekst die niet in de textarea staat selecteren :S
PHP erik
PHP erik
20 jaar geleden
 
0 +1 -0 -1
Edwin, ik vind het wel een goed script, maar je zegt dat je smarty gebruikt; is dit dan wel nuttig? Want je bent dan bezig je presentation layer in je business logic te zetten (de View in de Controller dus), en dat lijkt me júíst niet de bedoeling.

In Smarty heb je {html_input} en dergelijke. Daarbij kun je de stijl ook nog aanpassen en het voordeel is dat het in je presentation layer zit en niet in je business logic. Het échte voordeel is dat het niet alleen in je View maar zelfs in je templates zit als je gewoon Smarty gebruikt, waardoor een designer of HTML-man niet in je code hoeft te zitten, alleen in de templates.

Smarty heeft niet als doel HTML en PHP te scheiden, maar de business logic van de presentation te scheiden. Jouw class heeft als doel HTML en PHP te scheiden. Eigenlijk gooi je de kracht van Smarty dus zo in de prullenbak hiermee.

Als je geen Smarty gebruikt is dit wel handig, ik heb voorheen een soortgelijke class gebruikt.
Arian Stolwijk
Arian Stolwijk
20 jaar geleden
 
0 +1 -0 -1
Gebruik FormHandler. Die is nog veel meer uitgebreidt dan dit. Daar zit echt alles in wat je met een formulier wilt, dus ook validatie etc.
Jelle Posthuma
Jelle Posthuma
20 jaar geleden
 
0 +1 -0 -1
@Miloan, komt omdat je test in Firefox.
Heb ik ook dat probleem in FF.
In IE werkt het wel.
Ik houdt het toch liever bij HTML + PHP + CSS.
Storeman storeman
storeman storeman
20 jaar geleden
 
0 +1 -0 -1
Ik kwam onlangs nog een mooie class tegen. Ik vind het er beter uitzien dan bijvoorbeeld formhandler, dat toch al een tiijdje dood is.

http://www.skyrocket.be/2006/04/02/fp_form-php-form-builder-class/

Probeer en bekijk het eens, ik stond versteld van de mogelijkheden. De html-code die het produceert is echter wel fors, divs en dergelijke, arrrggghhh!
Kees Schepers
kees Schepers
20 jaar geleden
 
0 +1 -0 -1
Wil je dit echt handig maken dacht ik meer aan zo'n soort opzet: (nog lang niet af of werkend ofzo)

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<?php
$form
= new Form(form::METHOD_POST,'');
$form->addField(new Form_Field_Label('Gebruikersnaam','cssclass'),Form_Field::factory('textarea'));

class Form {
    public function addField(Form_Field_Label $label, Form_Field_Interface $field) {
        
    }
}

interface Form_Field_Interface {
    /**
     * Draw the HTML of the instanced element
     */

    public function getHTML();
}

abstract class Form_Field implements Form_Field_Interface {
    protected $value;
    protected $name;
    public function __construct($name,$value) {
        
    }

  public static function factory($type,$name,$value=null) {
        if(class_exists('Form_Field_'.$type)) {
            $className = 'Form_Field_'.$type;
            return new $className($name,$value);
        }
else {
            throw new Form_Exception('Could not instance type '.$type);
        }
  }
}

final class Form_Field_TextArea extends Form_Field {
    public function getHtml() {
        return '<textarea name="'.$this->name.'">'.$this->value.'</textarea>';
    }
}

?>
PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Kees Schepers
kees Schepers
20 jaar geleden
 
0 +1 -0 -1

Om te reageren heb je een account nodig en je moet ingelogd zijn.

Inhoudsopgave

  1. formulier-class

Labels

  • Geen tags toegevoegd.

Navigatie

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.