Skip to main content

This site requires you to update your browser. Your browsing experience maybe affected by not having the most up to date version.

Form Questions /

Moderators: martimiz, Sean, Ed, biapar, Willr, Ingo, swaiba

Form Dropdown only sending ID and not the value

Go to End

4 Posts   2648 Views


Community Member, 191 Posts

1 May 2011 at 3:53pm

The dropdown in my form is only submitting the ID (ie 4) instead of the value (ie Atlanta, Georgia 323 S. 2nd St.). In the $source, I tried switching out "ID" with "LocationDropDown" but that resulted in no data in the dropdown on the site.

Do I need something else to process the form instead of $data['StoreLocale']?


class StoreLocation extends DataObject {
    public static $db = array(
		'Address' => 'Varchar(80)',
		'City' => 'Varchar',
		'State' => 'Enum("-- Select a state --,Alabama,...,Wyoming")',
	// Populate Dropdown on Contact Form
	function LocationDropDown() {
		 return $this->City . ', '. $this->State . ' - '. $this->Address;



class ContactPage_Controller extends Page_Controller {


	function ContactForm() {
		// Create fields
		$fields = new FieldSet(
			new DropdownField(
			    $name = 'StoreLocale',
			    $title = 'If your comments pertain to a specific store, please pick a location',
			    $source = Dataobject::get("StoreLocation")->map("ID", "LocationDropDown", $emptyString = "-- Select Location --", $sortByTitle = false),  
			    $value = 0
		// Create actions
		$actions = new FieldSet(
		   new FormAction('doContactForm', 'Submit Form')

		$validator = new RequiredFields("Email","Comments");
		return new Form($this, 'ContactForm', $fields, $actions, $validator);
	function doContactForm($data, $form) {
		//Set data
		$body = '<h1>Feedback / Comments</h1><p><b>From:</b> '.$data['Email'].'</p>'.'<p><b>Location:</b> '.$data['StoreLocale'].'</p>'.$data['Comments'];
		$email = new Email($from, $to, $subject, $body);



Forum Moderator, 5523 Posts

1 May 2011 at 4:49pm

This is how DropdownFields work. If you want the returned data to be your 'LocationDropDown' field then simply map it to that instead of ID.

Dataobject::get("StoreLocation")->map("LocationDropDown", "LocationDropDown");

Usually an ID is much more useful as you can do a DataObject::get_by_id() in the process function and get the entire object rather than just a string but in your case it would work either way since all you want is the 1 address.


Community Member, 473 Posts

1 May 2011 at 4:59pm

Will's code won't work due to the way the map() function makes it indexes.

$values = Dataobject::get("StoreLocation")->column('LocationDropDown');
new DropdownField(
'If your comments pertain to a specific store, please pick a location'
array_combine($values, $values),
'-- Select Location --'


Community Member, 191 Posts

2 May 2011 at 7:42am

If I was just grabbing the City or State or Address (ie "Address", "Address") that would have worked. But since I had the LocationDropDown() to concatenate the city, state - address, replacing the "ID" broke the form.

That solution worked for me :-)

Thank you both!