Validatie klasse

Door Thijs Damen, 18 jaar geleden, 4.613x bekeken

Deze klasse heb ik geschreven om af te komen van alle is_string's in mijn code en die hele if's/else over te slaan. door zowel de mogelijkheid hebben alle variable type te beheren en de waarden van deze variable te controleren.

Gesponsorde koppelingen

PHP script bestanden

  1. validatie-klasse

 

Er zijn 20 reacties op 'Validatie klasse'

PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen


18 jaar geleden
 
0 +1 -0 -1
Je kunt die die constructor weg doen want je kunt direct zeggen dat ze array's zijn. Voor de rest heb ik nog niet gekeken.
GaMer B
GaMer B
18 jaar geleden
 
0 +1 -0 -1
Voor zover ik de toepassing van de validatie-class bekijk, ziet het er zeer netjes uit. Ik denk dat dit ook nog eens flexibel is. In ieder geval een goede aanvulling.
Thijs Damen
Thijs Damen
18 jaar geleden
 
0 +1 -0 -1
Dat kan. maar dit is mijn voorkeur :)

psje. Het enige waar ik persoonlijk niet tevreden mee ben is de getErrors functie. Die had ik tot 10 minuten geleden nog niet geschreven kwam ik achter >< dus snel even iets toegevoegd. (dr hoort bijvoorbeeld geen HTML in de klasse zelf te staan, maar om het voorbeeld netjes te maken was dat even nodig. Normaal gesproken zou ik denk ik gewoon met de m_aErrors iets in de controller / template doen.
Mark PHP
Mark PHP
18 jaar geleden
 
0 +1 -0 -1
Afgezien van die oerlelijke variabele notatie (oke, dat is persoonlijk) kan dit nog veel beter.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
<?php
    private function isNum($p_mData) {
        /*
        if (!is_numeric($p_mData)) {
            return false;
        }
        return true;

        Wat is er mis met: */

        return is_numeric($p_mData);
    }

?>

Verder check je meermaals of iets niet goed is, terwijl je juist zou moeten checken of iets wel goed is. Er zijn veel meer gevallen waarin iets fout is, dan waarin iets goed is.

Daarnaast, maak gebruik van filter_var() als je de geldigheid van een emailadres wilt controleren.

GaMer13:
Ik denk dat dit ook nog eens flexibel is.
Dat denk ik zeker niet, alles zit nu in één class. Wat als je bijvoorbeeld een creditcardnummer wilt controleren? Een datum? Een custom reguliere expressie? Dat wordt dat een hoop gedoe.

Beter is het om door middel van een interface af te dwingen dat elke validatieklasse een methode getErrors() en isValid($input) heeft. Dat is flexibel. Als je dit van plan bent, kijk dan zeker eens naar het Observer Pattern.

Al met al ben je wel aardig op weg, maar het kan nog een stuk beter.
Thijs Damen
Thijs Damen
18 jaar geleden
 
0 +1 -0 -1
@Aqirre.

Je hebt gelijk.
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
<?php
return is_numeric($p_mData);
[
/code]
doet precies hetzelfde.

Maar hoe bedoel je "Je controleert meermaals of iets niet goed". Waar bedoel je dat precies?

en filter_var(). Nog nooit van gehoord. zal het even doorlezen.

Als laatste dan de flexibiliteit:
Ten eerste horen dit 2 classes te zijn.
Cleaner en Validator.

Daarnaast. of iets flexibel is of niet is ook te discusseren. Ik gebruik hier inderdaad geen interface omdat ik nog niet het nut hiervan heb gezien in mijn applicaties. Mocht in de toekomst dat wel hebben zal dat evt een optie zijn.

Thanks voor je comment.
Mark PHP
Mark PHP
18 jaar geleden
 
0 +1 -0 -1
Thijs:
Maar hoe bedoel je "Je controleert meermaals of iets niet goed". Waar bedoel je dat precies?
Ik dacht al dat ik dat een beetje wazig zei. Ik zal een voorbeeld geven.

1. Stel, onze string mag enkel a's, b's en c's bevatten.
2. De input is 'abcxyz'.
3. We zouden nu op elk teken, behalve 'a', 'b' en 'c' kunnen checken. Als we er één vinden, retourneren we false.
4. Dit is natuurlijk niet de bedoeling. Er zijn veel meer letters die niet mogen, dan letters die wel zijn toegestaan.
5. We sneller uit zijn als we checken of iets goed is, dan checken of iets fout is.

Een voorbeeld in jouw script is de methode isInRange:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
<?php
    private function isInRange($p_mInt, $p_mMin, $p_mMax) {
        if (is_numeric ($p_mInt) && is_numeric($p_mMin) && is_numeric($p_mMax)) {
            if (!($p_mInt >= $p_mMin) OR !($p_mInt <= $p_mMax)) {
                return false;
            }
        }
else {
            return false;
        }

        return true;
    }

?>
Overzichtelijker (en ook nog eens korter) is:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
<?php
    private function isInRange($p_mInt, $p_mMin, $p_mMax) {
        if (is_numeric ($p_mInt) && is_numeric($p_mMin) && is_numeric($p_mMax)) {
            if ($p_mInt >= $p_mMin && $p_mInt <= $p_mMax) {
                return true;
            }
        }

        return false;
    }

?>
Of zelfs zo (dat gaat mij eigenlijk net te ver):
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
    private function isInRange($p_mInt, $p_mMin, $p_mMax) {
        return is_numeric($p_mInt) && is_numeric($p_mMin) && is_numeric($p_mMax) && $p_mInt >= $p_mMin && $p_mInt <= $p_mMax;
    }

?>
Ik hoop dat je snapt wat ik bedoel.
Thijs Damen
Thijs Damen
18 jaar geleden
 
0 +1 -0 -1
O ja. nu heb ik je.

Dat is iets wat ik mezelf stiekem heb aangeleerd. Voornamenlijk om alles een beetje bij elkaar te houden.

Wat ik daarmee bedoel:
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
<?php
private function test($p_sString) {
  if (is_string($p_sString) {
    //code
    //code
    //code
    //code
    //code  
    //code
    //code
    //code
    //code  
    //code
    //code
    //code
    //code    
    //code
    //code
    //code
    //code  
    //code
    //code
    //code
    //code

  } else {
    //nu moet ik hier de foutafhandeling doen dat het geen string is
  }
}
[
/code]

In de functies in deze klasse moet ik je alweer gelijk geven. het is sneller om op positief te controleren ipv. negatief.
Ericbruggema x
ericbruggema x
18 jaar geleden
 
0 +1 -0 -1
@Agirre schreef op 11.05.2009 22:28

Vergeet filter_var voor het controleren van email adressen, dit gaat namelijk vaak fout! er worden tekens geaccepteerd die nooit in een email adres zouden moeten voorkomen.

Ik raad gewoon aan om zelf een goede regex te zoeken voor email validatie!


18 jaar geleden
 
0 +1 -0 -1
Quote:
ericbruggema schreef op 12.05.2009 09:50
Ik raad gewoon aan om zelf een goede regex te zoeken voor email validatie!

Waarom zou je zelf een regex maken als filter_var gewoon netjes kijkt of het een valid email adres is? Nergens voor nodig lijkt mij.


18 jaar geleden
 
0 +1 -0 -1
Vraagje uit interesse maar waarvoor staat de p_ ?
RvW Of toch niet
RvW Of toch niet
18 jaar geleden
 
0 +1 -0 -1
Quote:
Vraagje uit interesse maar waarvoor staat de p_ ?

http://www.phphulp.nl/php/tutorials/8/341/703/


18 jaar geleden
 
0 +1 -0 -1
Proets :') aparte naamgeving voor parameters gaat wel erg ver... nah ja p staat iig bij mij nog steeds voor pointer.
RvW Of toch niet
RvW Of toch niet
18 jaar geleden
 
0 +1 -0 -1
parameter.
Thijs Damen
Thijs Damen
18 jaar geleden
 
0 +1 -0 -1
p_ = parameter variable
m_ = member variable

Voornamenlijk bedoelt zodat ik weet waar de parameter vandaan komt.

_i <- integer
_a <- array
_o <- object
_m <- mixed
_s <- string
_n <- numeric
_b <- boolean


Kheb in de klas gezeten bij Wouter Tengeler. Daar komt die voor mij ook vandaan en het is inderdaad de hongaarse Naamgeving.

Reden voor gebruiker van oa. m_ en p_ of helemaal niks is zodat ik makkelijk kan zien welke scope de variable in bevat. p_sString zou ik bijvoorbeeld nooit buiten de functiezelf kunnen gebruiken. m_sString daarentegen wel weer binnen de klassen, en buiten de klasse als die niet private is.

Variable zonder p_ of m_ notatie zijn variable die tijdelijke gegevens bevatten. Waar ik direct iets mee moet/ga doen.
Midas
Midas
18 jaar geleden
 
0 +1 -0 -1
@Thijs Damen,
Dat stukje met je if/else erin klopt niet. Als je bezig bent met OOP, werk dan ook met exceptions en try/catch.
Thijs Damen
Thijs Damen
18 jaar geleden
 
0 +1 -0 -1
Ik vind het niet nodig om hierin Exceptions te gebruiken?
Dat kan zijn omdat ik nog redelijk nieuw ben met exceptions, but if u can teach me :)

Ik gebruik ze wel. maar ik gebruik ze waar ik wat.. heftigere fouten bevat. Zoals fouten in mijn eigen code. Database connectie die faalt. etc. etc.
Iltar van der berg
iltar van der berg
18 jaar geleden
 
0 +1 -0 -1
Deze lijkt op mijn oude filter klasse. Ik heb daarna een nieuwe versie gemaakt die wel OOP is.

Je hebt nu een validatie object die ook nog eens filtered. Je kan de functionaliteit alleen uitbreiden als je 'em extend.

TIP: Je zou een Interface kunnen maken die zegt hoe een type validatie object eruit zou moeten zien. Type validatie objecten zouden dan bv een email validator of een username validator kunnen zijn. Deze kan je dan per project veranderen zonder de hoofd validatie klasse aan te passen.
Thijs Damen
Thijs Damen
18 jaar geleden
 
0 +1 -0 -1
Zoals gezegt: I know Clean en Validate moeten uit elkaar gehaald worden.
Zoals gezegt: Ik weet hoe een interface werkt en ik heb het nu niet nodig

Vind jij dat wel 100% nodig. Voeg je eigen script toe aan phphulp.
Jurgen assaasas
Jurgen assaasas
18 jaar geleden
 
0 +1 -0 -1
@Agirre

Voor het valideren van bijv een datum of een creditcard kun je toch de class extenden.
PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Iltar van der berg
iltar van der berg
18 jaar geleden
 
0 +1 -0 -1
@Thijs: Ik post eigenlijk geen losse scripts meer. Als ik wat maak is het altijd omgeving specifiek. Als ik een object maak voor in Zend, ga ik dat niet hier posten want dat is Zend specifiek.

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

Inhoudsopgave

  1. validatie-klasse

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.