Zend - The PHP Company




Forms

Add Code


Field Forwarder  

Type: class
Added by: sfullman
Entered: 27/11/2002
Last modified: 01/11/2001
Rating: **** (5 votes)
Views: 17168
This function is great for when you have a multi-page form such as an application. This function forwards fields on one page to hidden fields on the next page, and so on. Very simple to call. The beauty of it is, it also will handle arrays with multiple dimensions. If you have a field with the same name on the next form, it's a good rule to call field_forwarder() at the BEGINNING of your form so that when that form is passed, the field (with the same name) will overwrite the previous form. It's also good to put field_forwarder() at the top so the final page will have all the fields in the order of the application. This is a recursive function, i.e. it re-calls itself when it encounters form elements that are arrays such as: Finally, if you wish to print out PHP code of the array instead of hidden fields, add this line right before you call field_forwarder(): $FFoutputType = 'print'; and it will print out, in text form, the values of the fields as php variables -- this is great for storing php code in a database.


<?php
function field_forwarder(){
    global 
$_POST$rEM979$FFoutputType;
    
//get the arguments passed
    
$argList func_get_args();

    
//globalize any other set of instructions
    
if(count($argList)){
        eval(
'global $' $argList[count($argList)-1] . ';');
    }
    
//set the default set of values to convert
        
if(count($argList)==0){
            
//if the function is initially passed without parameter we're looking in $_POST
            
$argList[0] = '_POST';
            
$startValue $_POST
            if(
sizeof($startValue)==0){return false;}
        }elseif(
count($argList)==1){
            eval( 
'$rEM979["' $argList[0] . '"] = $' $argList[0] . ';');
            
$argList[0] = 'rEM979';
            
$startValue $rEM979;
        }elseif(
count($argList)==2){
            eval( 
'$startValue = $' $argList[1] . '["' $argList[0] . '"];');
        }else{
            for(
$e=count($argList)-2;$e>=0;$e--){
                
$intersperse .= '["' $argList[$e] . '"]';
            }
            eval( 
'$startValue = $' $argList[count($argList)-1]  . $intersperse ';');
        }

        foreach(
$startValue as $n => $v){
            if(
is_array($v)){
                
//call the function again
                
$shiftArguments '';
                for(
$w=0;$w<=count($argList)-1;$w++){
                    
$shiftArguments .= '"' $argList[$w] . '", ';
                }
                
$shiftArguments substr($shiftArguments0strlen($shiftArguments)-2);
                
                eval(
'$fieldForwarder .= field_forwarder("' $n '"' substr(',',0,strlen($shiftArguments)) . ' ' $shiftArguments ');');
                            
            }else{
                
//we have an root value finally
                
if(count($argList)==1){
                    
//actual output
                    
flush();
                    if(
$FFoutputType == 'print'){
                        
$fieldForwarder .= "$$n = '$v';n";
                    }else{
                        
$fieldForwarder .= "<input type="hidden" name="$n" value="" . htmlentities(stripslashes($v)) . "">n";
                    }
                }elseif(
count($argList)>1){
                    
$indexString '';
                    for(
$g=count($argList)-3;$g>=0;$g--){
                        
$indexString .= '[' . ((!is_numeric($argList[$g]) and $FFoutputType=='print')?"'":'') . 
                        
$argList[$g] . ((!is_numeric($argList[$g]) and $FFoutputType=='print')?"'":'') . ']';
                    }
                    
$indexString .= '[' . ((!is_numeric($n) and $FFoutputType=='print')?"'":'') . 
                    
$n . ((!is_numeric($n) and $FFoutputType=='print')?"'":'') . ']';
                    
//actual output
                    
flush();
                    if(
$FFoutputType == 'print'){
                        
$fieldForwarder .= "${$argList[count($argList)-2]}$indexString = '$v';n";
                    }else{
                        
$fieldForwarder .= "<input type="hidden" name="{$argList[count($argList)-2]}$indexString" value="" . htmlentities(stripslashes($v)) . "">n";
                    }
                }
            }       
        }
return 
$fieldForwarder;
}
//end field_forwarder()
?>


Usage Example


See the example


Rate This Script





Search



This Category All Categories