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

Anders Monsen andersm at alamark.com
Wed Nov 19 15:16:46 MST 2008


Joel,

After bringing in your text I now have the dropdown appearing in the  
SESSION. I had to make two small changes to your code ( you had an  
extra semi-colon in this line: if ($distName != $distData['District  
name'];) { --- and the $distData['dist_Num'] needed to be  
$distData['dist_Num'][0] ). Otherwise this is extremely useful code.

However, because the values are not unique in the table, the value  
list is showing up with multiple values for the same district. I may  
need to see if I can get the FileMaker database re-structured to  
eliminate the duplicate values in the current table. I think the  
complicated way I created the array previously filtered it for unique  
values only.

Thanks,
Anders


On Nov 19, 2008, at 3:41 PM, Anders Monsen wrote:

> 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
>>
>>
>
> _______________________________________________
> 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