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.

We're retiring the forums!

The SilverStripe forums have passed their heyday. They'll stick around, but will be read only. We'd encourage you to get involved in the community via the following channels instead:

Form Questions /

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

Form Dropdown only sending ID and not the value

Go to End

4 Posts   2723 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!