Login Retreive lost passwordRegister
Search

Forum Index / NL Forum / checkFieldCombination

[ This topic is solved ]

  Arian Stolwijk 06 April 08 / 19:35  
Changed at 06 April 08 / 19:46
Ik was bezig met een formulier, en nu had ik twee selectievelden, één met een aantal gebruikers niveau's en de ander met een aantal keuzes (bijvoorbeeld 1,2,3 of 4 en geen keuze).

Nu was het zo dat bij slechts één gebruikes niveau het tweede veld gebruikt moest worden, en anders 'geen keuze'. Zover ik weet zat dat nog niet in FormHandler, vandaar dat ik dat zelf maar gemaakt heb.

Hieronder is de functie, die kan je bijvoorbeeld na 'checkPassword' zetten in de FormHandler class.


<?php
/**
 * Formhandler::checkFieldCombination()
 *
 * Kijkt of de ingevulde waarde bij veld ÃƒÂ©ÃƒÂ©n overeen komt met een ingestelde waarde(s) bij veld 2
 * Als je field1Value op 3 zet, en bij field2Value een array maakt met 1,2,3,4 dan mag de waarde van
 * field2 alleen 1,2,3 of 4 zijn als de waarde van field1 3 is. 
 * 
 * @param string $field1: The first field we should check
 * @param string $field2: The second field we should check
 * @param string/array $field1Value: als veld 1 (één van) deze waarde(s) heeft
 * @param string/array $field2Value: dan moet veld 2 ÃƒÂ©ÃƒÂ©n van deze waardes hebben
 * @param boolean $useArrayKeyAsValue: if the keys of the array should be used as values
 * 
 * @return boolean
 * @access public
 * @author Arian Stolwijk
*/
function checkFieldCombination($field1$field2$field1Value 0$field2Value='',$errorMsg='',$useArrayKeyAsValue=true)
{
    
// check if the fields exists and that they are both passfields
    
if( !$this->fieldExists$field1 ) || !$this->fieldExists$field2))
    {
        
trigger_error('Error: unknown field used in checkFieldCombination!');
        return 
false;
    }
    
    
    if(
is_array($field1Value))
    {
        if(
$useArrayKeyAsValue and !empty($this->_fields[$field1][1]->_bUseArrayKeyAsValue) and $this->_fields[$field1][1]->_bUseArrayKeyAsValue)
        {
            
$field1Value array_keys($field1Value);
        }
    }
    
// Het was geen array, dus maken we er een array van voor de foreach loop
    
else
    {
        
$field1Value = array($field1Value);
    }

    if(
$useArrayKeyAsValue and is_array($field2Value) and !empty($this->_fields[$field2][1]->_bUseArrayKeyAsValue) and $this->_fields[$field2][1]->_bUseArrayKeyAsValue)
    {
        
$field2Value array_keys($field2Value);
    }        
    
    
    foreach(
$field1Value as $value)
    {
        if(
$this->getValue($field1) == $value)
        {
            
$value2 $this->getValue($field2);
            if(
is_array($field2Value))
            {
                if(
in_array($value2,$field2Value))
                {
                    return 
true;
                }
                else
                {
                    
$error true;
                    break;
                }
            }else
            {
                if(
$value2 == $field2Value)
                {
                    return 
true;
                }
                else
                {
                    
$error true;
                    break;
                }
            }
        }
    }
        
    
// is the form posted
    
if( $this->isPosted() and isset($error) and $error)
    {
        if(empty(
$errorMsg)){
            
$errorMsg 'De de waarde van &#39;'.$this->_fields[$field2][0].'&#39; is fout als &#39;'.$this->_fields[$field1][0].'&#39; deze waarde heeft';
        }
        
$this->_fields[$field1][1]->_sError $errorMsg;
    }
    else
    {
        return 
true;
    }
    
}
?>

  Johan Wiegel (Admin) 07 April 08 / 08:30  
Hoi Arjan,

ziet er goed uit. Een kleine opmerking die het voor jezelf makkelijker maakt om de uitbreiding steeds te kunnen gebruiken.

Het is beter eigen aanpassingen te doen in een aparte class die de class formhandler extend.

Daarmee kun je een volgende versie van formhandler er gewoon overheen kopieren zonder je eigen functie er opnieuw in te zetten.

Je initieert dan ipv FormHandler je eigen class.

Scheelt weer wat werk, zo doen wij dat ook met enkele aanpassingen die specifiek voor ons.

  Arian Stolwijk 07 April 08 / 18:25  
Persoonlijk doe ik dat ook, het was eigenlijk meer om aan te geven waar hij geplaatst zou kunnen worden ;)

  Top


powered by PHP-GLOBE   © 2004 - 2008 FormHandler. All rights reserved.   -   Open source license