[FX.php List] Conditional value lists with PHP and FileMaker

Anders Monsen andersm at alamark.com
Wed Nov 19 14:41:32 MST 2008


Hi Joel,

Thanks for your comments. I should have posted my dilemma before  
spending all that time on the code...

And, after reading through  a couple of times what you wrote below, I  
realize that I way over-complicated things. I approached it form the  
wrong direction, thinking I needed to build the array to contain the  
values from scratch, instead of using the $distResult['data'] array  
that I already have. Truly a Doh! moment on my part.

I like the Ajax option, and I've created a proof of concept from  
Jonathan Stark's article that works great. I also like the session  
array idea that you and GGT suggest. If I can combine these pieces I  
should end up with a more streamlined process.

Anders

On Nov 19, 2008, at 3:13 PM, Joel Shapiro wrote:

> Hi Anders
>
> I might not be understanding something here, because it doesn't seem  
> like it should be so complicated.  I'm assuming that there is a one- 
> to-one correspondence between District Name & Number.  This is what  
> I'd do:
>
> Sort the Districts by name (so that the drop-down displays in  
> alphabetical order), then something like:
>
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>
> if ( !isset($_SESSION['distDropdown'] ) ) {
> 	
> 	// If distDropdown is not yet created, find and process the 300  
> records
> 	// This way you only need to do this the first time the page is  
> loaded
>
> 	// Perform Find Here
> 	// same query as you currently have,
> 	// but I'd sort by Dist name so dropdown is in alpha order
> 	
> 	$distName = '';
>
> 	$_SESSION['distDropdown'] = '<select name="dist"  
> onchange="this.form.submit()">'. "\n";
>
> 	foreach ($distResult['data'] as $key => $distData) {
>
> 		if ($distName != $distData['District name'];) {
> 			$_SESSION['distDropdown'] .= '<option value="'.  
> $distData['dist_Num'] .'">' . $distData['District name'] . '</ 
> option>'."\n";
> 		}
>
> 		$distName = $distData['District name'];
>
> 	}
>
> 	$_SESSION['distDropdown'] .= '</select>';
> 	
> }
>
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>
> To display the dropdown in the form, it's just a simple:
> echo $_SESSION['distDropdown'];
>
> Then the submission of this form (via a selection from the dropdown)  
> would perform a new query of Campuses based on the dist_Num  
> selected.  This form submission would be great for AJAX, but a  
> regular form submission and a full-page reload shouldn't be so bad  
> since you don't need to find and compile the distDropdown again.
>
> etc.
>
> Or am I missing something?
>
> HTH,
> -Joel
>
>
> On Nov 19, 2008, at 8:46 AM, Anders Monsen wrote:
>
>> Has anyone on the list worked on this issue? I spent most of  
>> yesterday putting together a process that works, but may not be the  
>> most efficient process. I was wondering if anyone would be open to  
>> looking at my code (the snippet is 130 lines long at minimum, so I  
>> didn't just want to throw it out there) to see if there are ways I  
>> can improve the process. It certainly made me appreciate how easy  
>> FileMaker makes this process...
>>
>> (I just discovered and read Jonathan Stark's article in July  
>> FileMakerAdvisor after writing this email. It uses Ajax, so I may  
>> try to incorporate his techniques, although I'm using FX.php and no  
>> existing value lists from FileMaker, just existing data.)
>>
>> Here's the scenario. I have a table with four fields: district  
>> number, district name, campus number, and campus name. I want the  
>> district and campus to be drop down menus, where the user sees the  
>> name but submits the number into another FileMaker database/table.  
>> Also, when the user selects a district, I need the value list of  
>> campuses to correspond just to their appropriate district.
>>
>> My first issue was to find a way to create an associative array  
>> with district numbers=>district names. Apparently I took the hard  
>> route in dynamically building associative arrays... After several  
>> failed attempts, I used a function that I found on php.net in the  
>> section on "array_push" to create this array. The first problem I  
>> ran into was that the list currently contains 270 records. For now  
>> I had to manually change the groupsize in the query to above 300,  
>> but I plan to first query all records to get a count, then make  
>> this the groupsize. The reason for this is that the district array  
>> becomes unique only after all records have been loaded into the  
>> array, so the default groupsize of 50 has to be modified.
>>
>> Is there a way to 1) build a better array and 2) make the district  
>> array unique in the initial query? The database is structured as  
>> one file, with all four fields, and so the district numbers and  
>> names are repeated. I didn't create the database, and I can't  
>> change it.
>> Distnum	|	Distname	| CampusNum	|	Campus Name
>> 10			The ISD		2			School
>> 10			The ISD		2.1			OtherSchool
>> etc.
>>
>> Additionally, after several failed attempts to get the Javascript  
>> onchange function to work when the form changed, I resorted to  
>> DreamWeaver's JumpMenu, which seems to work fine. Has anyone been  
>> able to get a working onchange form and what is the correct syntax?  
>> When the user selects a district from the dropdown, the page  
>> reloads with the district number in the URL.
>>
>> Given all of the above, my process *does* work, and the page does  
>> not appear to load with delays. I have not used conditional values  
>> lists with PHP/Javascript in about three years, so I am a little  
>> unsure of best practices.
>>
>> Thanks,
>> Anders
>> _______________________________________________
>> FX.php_List mailing list
>> FX.php_List at mail.iviking.org
>> http://www.iviking.org/mailman/listinfo/fx.php_list
>
> _______________________________________________
> FX.php_List mailing list
> FX.php_List at mail.iviking.org
> http://www.iviking.org/mailman/listinfo/fx.php_list
>
>



More information about the FX.php_List mailing list