• Login
  • Register
  • Zoek
This Thread
  • Everywhere
  • This Thread
  • This Forum
  • Articles
  • Pages
  • Forum
  • Filebase Entry
  • More Options

ICTscripters

Dé plek voor IT

Dé plek voor IT

Login

Geavanceerde opties
  1. Home
  2. Forum
    1. Alle berichten
    2. Recente activiteiten
  3. ICT Nieuws
  4. Blog
  5. Marktplaats
    1. Werk
    2. Advertenties
    3. Domeinnamen
    4. Websites
    5. Design & lay-outs
    6. Scripts
    7. Overige
  6. Design
  7. Leden
    1. Actieve bezoekers
    2. Team
    3. Leden zoeken
  8. Downloads
  9. Goedkope domeinnamen
  1. Home
  2. Forum
    1. Alle berichten
    2. Recente activiteiten
  3. ICT Nieuws
  4. Blog
  5. Marktplaats
    1. Werk
    2. Advertenties
    3. Domeinnamen
    4. Websites
    5. Design & lay-outs
    6. Scripts
    7. Overige
  6. Design
  7. Leden
    1. Actieve bezoekers
    2. Team
    3. Leden zoeken
  8. Downloads
  9. Goedkope domeinnamen
  1. Home
  2. Forum
    1. Alle berichten
    2. Recente activiteiten
  3. ICT Nieuws
  4. Blog
  5. Marktplaats
    1. Werk
    2. Advertenties
    3. Domeinnamen
    4. Websites
    5. Design & lay-outs
    6. Scripts
    7. Overige
  6. Design
  7. Leden
    1. Actieve bezoekers
    2. Team
    3. Leden zoeken
  8. Downloads
  9. Goedkope domeinnamen
  1. Dé plek voor IT - ICTscripters
  2. Forum
  3. Scripting & programmeren
  4. PHP + SQL

Forum

  • Op zoek naar de legends

    Syntax 5 januari 2026 om 13:50
  • Na 15 jaar terug van weggeweest: iCriminals.nl is terug (BETA)!

    Syntax 4 januari 2026 om 10:58
  • Developer Gezocht

    K.Rens 30 december 2025 om 12:32
  • [FREE] WeFact Hosting module

    Jeroen.G 13 oktober 2025 om 14:09
  • Help testers nodig voor android app Urgent

    urgentotservices 26 september 2025 om 10:21
  • Versio vervanger

    Jeroen.G 25 augustus 2025 om 15:56
  • Afspraken systeem met planbeperking

    Lijno 1 augustus 2025 om 23:04
  • Partner Gezocht om meerdere NFT Collecties op Open Sea te Plaatsen

    NFT Art Designer 1 maart 2025 om 14:08

Marktplaats

  • 321 Nieuwe Domeinnamen December 2025

    shiga 1 januari 2026 om 10:26
  • Meerdere mafia game template te koop

    Syntax 28 december 2025 om 21:20
  • Van een pixelige afbeelding naar een strakke, moderne website

    Syntax 21 december 2025 om 17:05

php Validate

  • MBCompany
  • 14 oktober 2015 om 18:47
  • MBCompany
    Staat open voor projecten!
    Berichten
    119
    • 14 oktober 2015 om 18:47
    • #1

    Beste,

    Ik heb een Validate script dat elke input checkt. Alleen zit ik met 1 nadeel en dat is dat de $item de name is dus : <input type="text" name="password_again">

    Bij de foutmelding staat dus dit:
    password_again is een verplichte veld.:

    Het script :

    PHP
    <?php
    class Validate {
        private $_passed = false;
        private $_errors = array();
        private $_db = null;
    
    
        public function __construct() {
            $this->_db = DB::getInstance();
        }
    
    
        public function check($source, $items = array()) {
            foreach($items as $item => $rules) {
                foreach($rules as $rule => $rule_value) {
                    $value = $source[$item];
                    $item = escape($item);
    				$item = 
                    if($rule === 'required' && empty($value)) {
                        $this->addError("{$item} is een verplichte veld.");
                    } else if (!empty($value)) {
                        switch($rule) {
                            case 'min':
                                if(strlen($value) < $rule_value) {
                                    $this->addError("{$item} heeft minimaal {$rule_value} karakters nodig.");
                                }
                                break;
    
    
                            case 'max':
                                if(strlen($value) > $rule_value) {
                                    $this->addError("{$item} must be a maximum of {$rule_value} characters.");
                                }
                                break;
                            case 'matches':
                                if($value != $source[$rule_value]) {
                                    $this->addError("{$rule_value} must match {$item}.");
                                }
                                break;
                            case 'unique':
                                $check = $this->_db->get($rule_value, array($item, '=', $value));
    
    
                                if($check->count()) {
                                    $this->addError("{$item} already exists.");
                                }
                                break;
                        }
                    }
                }
            }
    
    
            if(empty($this->_errors)) {
                $this->_passed = true;
            }
        }
    
    
        private function addError($error) {
            $this->_errors[] = $error;
        }
    
    
        public function errors() {
            return $this->_errors;
        }
    
    
        public function passed() {
            return $this->_passed;
        }
    }
    Toon Meer

    Me uitleg is wel wat slecht maar indien je verstand hebt en het script bekijkt zal je het wel gelijk snappen.

    Wat is het beste oplossing om de $item een ander waarde te geven?
    D8 aan arrays maar dat kost me wel veel moeite. misschien heeft iemand een goede oplossing?

    PS: Is het script veilig

    Ik sta open voor projecten.
    Ik sta ook tehuur als scripter
    PM voor meer informatie

  • Guest, wil je besparen op je domeinnamen? (ad)
  • WHMCSAddons
    Master
    Ontvangen Reacties
    88
    Berichten
    2.411
    • 14 oktober 2015 om 19:02
    • #2

    In je loop controleer je de input name, deze moet je dus vertalen aan de hand van je name input.

  • FangorN
    Professional
    Ontvangen Reacties
    196
    Articles
    2
    Berichten
    737
    • 14 oktober 2015 om 20:14
    • #3

    Het bovenstaande is dus onderdeel van een soort van formuliersysteem ofzo?

    Een formuliersysteem kan een krachtig middel zijn mits deze goed is opgezet, je kunt dan zeer snel (standaard) formulieren (bestaande uit standaard componenten) opzetten.

    Ook zul je moeten definiëren wat een "formulierveld" omvat. Dit kan best verder voeren dan een inputveld of selectbox. Met wat fantasie (en wat JavaScript) kun je met standaard elementen complexere formuliervelden bouwen die je vervolgens aan je formulier (object) kunt ophangen via een vaste methode (addField(naam, type, instellingen)).

    Denk bijvoorbeeld aan een multiselect (hoe vaak ben jij de instellingen van een enkele select met meerdere selecties kwijt geraakt doordat je de Ctrl-toets niet inhield?):

    Of een simpele teller:

    Of een change password veldpaar:

    Of een access control list opgebouwd uit geserialiseerde predicaten in Poolse (prefix) notatie (shameless self-plug):

    (dit gebruik ik echt voor mijn rechtenmanagement :)).

    Ik zou hiervoor wat classes in het leven roepen (denk aan Form, FormField (abstract), de verschillende FormField spinoffs (de concrete formuliervelden)) en de veld-specifieke validaties onderbrengen bij deze velden zelf. Wanneer je de invoer van het formulier wilt valideren loop je door deze velden heen en roep je de validatie-methoden aan die je hebt ingesteld.

    Het kan trouwens best voorkomen dat één veld méérdere validatieregels heeft, bijvoorbeeld een textveld zou je de validatieregels "verplicht" en "email" kunnen geven. Hiermee geef je aan dat dit veld ingevuld moet worden, en tevens een e-mailadres moet zijn. Je hoeft dus niet voor elk type veld een nieuwe FormField child klasse in het leven te roepen - je kunt ook een specifiek veldtype (in dit geval een text-input veld) hergebruiken door hier nieuwe validatieregels voor te schrijven.

    Bewerkt 4 keer, laatst door FangorN (14 oktober 2015 om 20:32).

  • MBCompany
    Staat open voor projecten!
    Berichten
    119
    • 14 oktober 2015 om 22:57
    • #4

    @FangorN

    Klopt wat je zegt maar op de meeste punten is er al aan gewerkt zoals:

    Stukje van je register script:

    Code
    if (Input::exists()) {
        if(Token::check(Input::get('token'))) {
            $validate = new Validate();
            $validation = $validate->check($_POST, array(
                'name' => array(
                    'name' => 'Name',
                    'required' => true,
                    'min' => 2,
                    'max' => 50
                ),
                'username' => array(
                    'name' => 'Username',
                    'required' => true,
                    'min' => 2,
                    'max' => 20,
                    'unique' => 'users'
                ),
                'password' => array(
                    'name' => 'Password',
                    'required' => true,
                    'min' => 6
                ),
                'password_again' => array(
                    'required' => true,
                    'matches' => 'password'
                ),
            ));
    Toon Meer

    In combinatie met de validate class werkt dit prima tot nu toe..


    'required' => true, (Verplicht veld) indien false niet verplicht.

    etc

    Of moet het nog uitgebreider?

    PS: van checkboxes maak ik geen gebruik van. enkel inputs.

    Ik sta open voor projecten.
    Ik sta ook tehuur als scripter
    PM voor meer informatie

  • FangorN
    Professional
    Ontvangen Reacties
    196
    Articles
    2
    Berichten
    737
    • 15 oktober 2015 om 02:52
    • #5

    Uhm, houdt dit in dat je voor elk nieuw formulier een nieuwe validation check moet schrijven? Dat lijkt mij een beetje zonde van het programmeerwerk.

    Hier een schematische aanpak van hoe ik een formulier opzet:

    PHP
    <?php
    // stap 1: maak formulier object
    // properties van deze form zijn bijvoorbeeld:
    // unieke naam van het formulier
    // action, method etc. (dus properties die je normaal in <form> ziet)
    $form = new Form(...);
    
    
    // stap 2: voeg velden toe met
    // unieke naam veld, type, opties, waaronder validatieregels
    $form
        ->addField('naam_veld_1', 'text', array('rules' => array('required', 'email')))
        ->addField('naam_veld_2', 'select', array('options' => $array_met_options, 'rules' => array('required'));
    // et cetera
    ?>
    Toon Meer

    Vervolgens heb ik een print() methode om het formulier (de HTML code) te genereren en af te drukken, een initialize() methode om het formulier te initialiseren met eerder ingevulde waarden. Daarmee verloopt het invoeren van nieuwe entries (ADD) en het wijzigen van bestaande entries (EDIT) op precies dezelfde wijze, hiervoor hoeft geen code bijgeschreven te worden.

    Bij het opslaan roep ik $form->validate() aan die alle velden afloopt, die vervolgens weer alle "rules" inspecteert. Als alles ok is retourneert deze methode een array met de gevalideerde data. Dit gebeurt altijd op dezelfde wijze, dus hier is ook nooit nieuwe/aparte code voor nodig.

    De enige code die ik dus hoef te schrijven voor het maken van een formulier is:
    - de definitie van het formulier zelf
    - de afhandeling van de verwerking

    De rest is al (eenmalig) geschreven. Dit is wat ik bedoelde met "het volgen van een handige opzet" zodat:
    - de code die je moet schrijven voor het opzetten van een formulier minimaal is
    - het weinig tot geen inspanning kost om wijzigingen of toevoegingen aan het formulier te doen; als ik een veld wil bijvoegen prik ik een addField() methode bij en pas ik de verwerking aan, dat is in < 5 minuten gepiept en ik hoef dit niet uitgebreid te controleren (al kan een test geen kwaad natuurlijk) omdat dit systeem modulair is opgezet met klassen. Het enige moment dat je echt uitgebreid moet testen is als je nieuwe formulier-element-typen gaat bouwen.

    EDIT: ik zal morgen eens een voorbeeldje posten, en de code die ik daarvoor moet schrijven.

    Bewerkt één keer, laatst door FangorN (15 oktober 2015 om 02:58).

  • FangorN
    Professional
    Ontvangen Reacties
    196
    Articles
    2
    Berichten
    737
    • 15 oktober 2015 om 22:10
    • #6

    Hier een voorbeeld van een toevoegen / wijzigen formulier.

    En hieronder alle code die hier voor nodig is (ook de opbouw die gebruikt wordt voor paginaopbouw en -routing, dat voert eigenlijk al verder dan het formulier zelf):

    PHP
    <?php
    class FML_PageType_Demo_Form extends FML_PageType
    {
        public function init() {
            if (in_array($this->action, array(
                    'addProcess',
                    'editProcess',
            ))) {
                $this->cfg->showOutput = false; // no output when processing forms
            }
        }
    
    
        protected function actionDefault() {
            $this->setTitle('Form demo');
            ?><div class="main">
                <h1>Form demo</h1>
                <p><a href="<?php echo $this->escape($this->link(false, array('action' => 'add'))) ?>">add</a></p>
                <p>Demonstrates a form for adding data.</p>
                <p><a href="<?php echo $this->escape($this->link(false, array('action' => 'edit'))) ?>">edit</a></p>
                <p>Demonstrates the same form in "edit mode", simulating previously stored data.</p>
            </div><?php
        }
    
    
        // Display "Add" form.
        protected function actionAdd() {
            $this
                ->setTitle('Form demo - adding new data')
                ->addCss('media/css/admin.form.css');
            ?><div class="main"><?php
                // Load form, initialize, display.
                $form = $this->form(array(
                    'name'   => 'formName',
                    'action' => $this->link(false, array('action' => 'addProcess'))
                ));
                $form->initialize()->printHtml();
            ?></div><?php
        }
    
    
        // Process "Add" form.
        protected function actionAddProcess() {
            if ($_SERVER['REQUEST_METHOD'] == 'POST') {
                $form = $this->form(array('name' => 'formName'));
                // Load form, initialize, validate.
                $data = $form->initialize()->validate();
                // If validation failed, $data is false.
                if ($data === false) {
                    // Store data in session and redirect back to the "Add" form page, indicating that there are errors.
                    $form->store();
                    $this->redirect($this->link(false, array(
                        'action' => 'add',
                        'errors' => true,
                    )));
                }
                // Validation passed - process form. Normally this would consist of storing stuff in a database.
                FML_Debug::dump($data);
            }
        }
    
    
        // Simulate "Edit" form. Same as before, but with initialisation with dummy data.
        protected function actionEdit() {
            $this
                ->setTitle('Form demo - editing existing data')
                ->addCss('media/css/admin.form.css');
            ?><div class="main"><?php
                $form = $this->form(array(
                    'name'   => 'formName',
                    'action' => $this->link(false, array('action' => 'editProcess'))
                ));
                // Normally, this data comes from a database.
                $form->initialize(array(
                    'text'          => '<b>hello</b>',
                    'number'        => 41,
                    'email'         => '[email protected]',
                    'select'        => 2,
                    'moveselect'    => array('a', 'c'),
                    'moveselect2'   => array('d'),
                    'checkbox'      => true,
                    'counter'       => 12,
                    'textarea'      => "<h1>Hello</h1>\n<script>alert('hello')</script>",
                    'rights'        => '&,1,|,2,!,3',
                    'rights2'       => '!,!,!,funny',
                ))->printHtml();
            ?></div><?php
        }
    
    
        // Process "Edit" form. Same as before.
        protected function actionEditProcess() {
            if ($_SERVER['REQUEST_METHOD'] == 'POST') {
                $form = $this->form(array('name' => 'formName'));
                $data = $form->initialize()->validate();
                if ($data === false) {
                    $form->store();
                    $this->redirect($this->link(false, array(
                        'action' => 'edit',
                        'errors' => true,
                    )));
                }
                // Validation passed - process form data $data in some way.
                FML_Debug::dump($data);
            }
        }
    
    
        // Form definition. We only have to define this form ONCE.
        protected function form($options, $properties=array()) {
            $form = new FML_Form($this, $options, $properties);
            $form
                ->addField('text', 'text', array(
                    'label' => 'field (required)',
                    'rules' => array('required'),
                    'properties' => array('maxlength' => 12, 'size' => 12),
                ))
                ->addField('text', 'number', array(
                    'label' => 'numeric field (required)',
                    'rules' => array('required', 'number'),
                ))
    
    
                ->addField('text', 'email', array(
                    'label' => 'e-mail address',
                     'rules' => array('email'),
                    'properties'    => array('class' => 'text-long'),
                ))
                ->addField('select', 'select', array(
                    'label' => 'dropdown (required)',
                    'options' => array(1 => 'een', 2 => 'twee', 3 => 'drie'),
                    'rules' => array('required'),
                    'firstOptionLabel'  => '- select -',
                ))
                ->addField('moveselect', 'moveselect', array(
                    'label' => 'moveselect',
                    'options' => array('a' => 'een', 'b' => 'twee', 'c' => 'drie'),
                ))
                ->addField('moveselect', 'moveselect2', array(
                    'label' => 'moveselect 2',
                    'options' => array('d' => 'vijf', 'e' => 'zes', 'f' => 'zeven'),
                ))
                ->addField('checkbox', 'checkbox', array(
                    'label' => 'checkbox',
                ))
                ->addField('counter', 'counter', array(
                    'label' => 'counter', 'properties' => array('size' => 3),
                ))
                ->addField('textarea', 'textarea', array(
                    'label' => 'textarea',
                ))
                ->addField('rights', 'rights', array(
                    'label' => 'rights field',
                ))
                ->addField('rights', 'rights2', array(
                    'label' => 'rights field 2')
                );
            return $form;
        }
    }
    Toon Meer

    Als je formuliersysteem een beetje slim in elkaar zit hoef je dingen niet dubbel te doen.

    EDIT: omg, wat doet dit forum met ingesprongen regels :/. Bleeeehhhh. Beter om dit te copy pasten in een apart bestand, want dit is zo onleesbaar geworden.

    Chrome stript zelfs spaties :/. wtf.

    Nota bene, als je een process pagina ververst dan krijg je een error 500 pagina te zien omdat er dan een exception wordt geproduceerd omdat je CSRF-token niet meer bestaat. Normaal wordt je vanaf de process-pagina altijd ergens naartoe doorgestuurd volgens het POST / redirect / GET principe.

    Bewerkt 2 keer, laatst door FangorN (15 oktober 2015 om 22:31).

Participate now!

Heb je nog geen account? Registreer je nu en word deel van onze community!

Maak een account aan Login

ICT Nieuws

  • Fijne feestdagen

    tcbhome 28 december 2025 om 13:55
  • Kritieke update voor Really Simple Security-plug-in

    K.Rens 16 november 2024 om 16:12
  • ING Nederland streeft naar ondersteuning van Google Pay tegen eind februari

    K.Rens 2 november 2024 om 16:09

Blogs

  • Functioneel ontwerp

    Dees 28 december 2014 om 12:38
  • Access Control List implementatie in PHP/MySQL - deel 1/2

    FangorN 28 december 2018 om 12:35
  • Access Control List implementatie in PHP/MySQL - deel 2/2

    FangorN 29 december 2018 om 12:37
  1. Marktplaats
  2. Design
  3. Voorwaarden
  4. Ons team
  5. Leden
  6. Geschiedenis
  7. Regels
  8. Links
  9. Privacy Policy
ICTscripters ©2005 - 2026 , goedkope hosting door DiMoWeb.com, BE0558.915.582
Sponsors: Beste kattenhotel provincie Antwerpen | Beste Zetes eid kaartlezer webshop
Style: Nexus by cls-design
Stylename
Nexus
Manufacturer
cls-design
Licence
Commercial styles
Help
Supportforum
Visit cls-design