foreach op lege velden geeft onverwacht resultaat

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Thomas de vries

thomas de vries

19/05/2016 18:56:15
Quote Anchor link
Goedenavond,

ik heb een register script.
4x een input veld

deze wil ik door middel van foreach laten controleren of ze leeg zijn.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php
if(isset($_POST['register']))
    {

        $fields = array('regist_username','regist_password','repeat_regist_password','email');
        if(!$Func->is_empty($fields) == FALSE) {
            echo 'OK';
        }
    }

?>


Function
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
<?php
public function is_empty($val) {
        //$fields = array('regist_username','regist_password','repeat_regist_password','email');
        foreach($val AS $fieldname ) {
            if(empty($_POST[$fieldname])) {
                return $this->Message('Niet alle velden zijn ingevuld!<br />',0);
            }
else {
                return TRUE;
            }
        }
    }

?>


Echter als ik veld 1 niet leeg houd dan geeft die een OK dus met andere woorden hij controleert de overige velden niet.

Mis ik iets?

Met vriendelijke groet,
 
PHP hulp

PHP hulp

04/12/2024 11:09:20
 
Frank Nietbelangrijk

Frank Nietbelangrijk

19/05/2016 19:52:29
Quote Anchor link
zodra je een return gebruikt wordt de functie verlaten/afgebroken, ook als je in een (foreach) lus zit. Die else moet dus gewoon weg en die return TRUE; moet na de foreach lus komen.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<?php
public function is_empty($val) {
    //$fields = array('regist_username','regist_password','repeat_regist_password','email');
    foreach($val AS $fieldname ) {
        if(empty($_POST[$fieldname])) {
            return $this->Message('Niet alle velden zijn ingevuld!<br />',0);
        }
    }

    return TRUE;
}

?>
Gewijzigd op 19/05/2016 19:55:27 door Frank Nietbelangrijk
 
Jan de Laet

Jan de Laet

19/05/2016 19:58:03
Quote Anchor link
Moet regel 5 niet zijn: $Func->is_empty($fields) != FALSE

Verder doe je binnen is_empty ook al een return op regel 6 en 8. Moet je dat niet doen nadat alle velden zijn gecheckt? Dus na de foreach. En geeft de return op regel 6 een FALSE of TRUE als waarde?

Verder vind ik het verwarrend dat de functie is_empty TRUE als resultaat heeft als de variabele niet empty is.
 
Frank Nietbelangrijk

Frank Nietbelangrijk

19/05/2016 20:00:27
Quote Anchor link
Wees voorzichtig met empty(). Als een gebruiker een '0' ingeeft in een veld dan zegt empty() nog steeds dat het veld leeg is!

Ik vermijd empty() om deze reden liever en gebruik dan strlen().

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
if(!strlen($_POST[$fieldname])) {
    // niets ingevuld!
}
?>


Toevoeging op 19/05/2016 20:02:54:

Jan de Laet op 19/05/2016 19:58:03:
Verder vind ik het verwarrend dat de functie is_empty TRUE als resultaat heeft als de variabele niet empty is.


Ben het met je eens Jan maar ik zou al helemaal geen functienaam is_emtpy gebruiken. Ik zou een functienaam gebruiken als validate of validateForm of iets dergelijks.
Gewijzigd op 19/05/2016 20:12:16 door Frank Nietbelangrijk
 
Thomas de vries

thomas de vries

20/05/2016 07:28:04
Quote Anchor link
Heel erg bedankt voor jullie reacties.
Ik ga ermee bezig ook met de functienaam.

Zal idd iets moeten zijn als validateForm zodat er meerder forms op die manier gecontroleerd kunnen worden.
Nu heb ik is_empty en andere validaties dat kan wel in 1.
 



Overzicht Reageren

 
 

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.