[ 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 '' . $this -> _fields [ $field2 ][ 0 ]. '' is fout als '' . $this -> _fields [ $field1 ][ 0 ]. '' 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 ;)