Moderator |
|
De constructie ziet er niet helemaal fantastisch uit.
Wat voor speciale betekenis heeft het eerste element van $aError?
Ik zou de variabele trouwens op zijn minst $aErrors noemen.
En dan controleren of $aErrors niet leeg is:
<?php
if (count($aErrors) > 0) {
// ... do stuff ...
}
?>
<?php if (count($aErrors) > 0) { // ... do stuff ... } ?>
Vervolgens: waarom wil je telkens aan deze index refereren, je kunt ook gewoon alle elementen van een array aflopen zonder de index in beschouwing te nemen middels een foreach:
<?php
foreach ($aErrors as $error) {
// ... do stuff ...
}
?>
<?php foreach ($aErrors as $error) { // ... do stuff ... } ?>
Is dit voor terugkoppeling van de validatie van formuliergegevens? Als je dan toch de index mee wilt nemen, voeg hier dan betekenis aan toe, bijvoorbeeld door wat meer structuur aan te brengen in het array, waarbij je de fouten per formulierveld opsomt, zoiets dus:
Array
(
[naam] => Array
(
[0] => het veld mag niet leeg zijn
[1] => een naam mag enkel bestaan uit alfanumerieke karakters
[2] => een naam bestaat minimaal uit X karakters
)
)
( ( [0] => het veld mag niet leeg zijn [1] => een naam mag enkel bestaan uit alfanumerieke karakters [2] => een naam bestaat minimaal uit X karakters ) )
Hier kun je dan als volgt doorheen:
<?php
foreach ($aArray as $fieldName => $errors) {
// doe iets met $fieldName als je dat leuk vindt
foreach ($errors as $error) {
// druk $error af
}
}
?>
<?php foreach ($aArray as $fieldName => $errors) { // doe iets met $fieldName als je dat leuk vindt foreach ($errors as $error) { // druk $error af } } ?>
Dan staat de "de volgende fouten hebben zich voorgedaan" binnen de for-loop, dus die mededeling wordt vaker afgedrukt. Deze zou binnen het count-if-statement moeten staan, en buiten de lus. Ook is het een goede gewoonte om zo weinig mogelijk dubbel te doen. Een wellicht betere variant is dan dus ook:
<?php
if (count($aErrors) > 0) {
?>De volgende fout<?php echo (count($aErrors) == 1 ? ' heeft' : 'en hebben') ?> zich voorgedaan:<br /><br /><?php
// doe iets met $aErrors
}
?>
<?php if (count($aErrors) > 0) { ?>De volgende fout <?php echo (count($aErrors) == 1 ? ' heeft' : 'en hebben') ?> zich voorgedaan:<br /><br /> <?php // doe iets met $aErrors } ?>
Uiteraard, als je de fouten verder opdeelt in subarrays zul je iets anders moeten verzinnen. Je kunt er natuurlijk ook altijd voor kiezen om altijd meervoud te gebruiken, en bovenstaande spagaat tussen enkelvoud en meervoud daarmee uit de weg gaat.
Als je een teller wilt afdrukken die 1 hoger is dan zijn index, gebruik dan gewoon:
Maar NIET
Want dit doet twee dingen verkeerd:
- de waarde wordt eerst afgedrukt en dan pas opgehoogd
- de waarde wordt opgehoogd, dit is ook niet goed omdat dat je for-loop door de waar stuurt
Indien je een foreach loop gebruikt laat je gewoon een tellertje meelopen die bij 1 begint. Maar waarom zou je dit doen? Een nummer toekennen aan een fout is nogal loos omdat dit nummer toch altijd anders is of kan zijn. Daarnaast lijkt het mij relevanter om aan te geven bij welk invoerveld er iets fout gaat, niet dat dit fout nummer 43 is.
Je zou ook kunnen overwegen om van een bulleted list gebruik te maken, dan hoef je ook niet overal linebreaks tussen te kwakken. |