I making a form that will take contact info and send it to an email. It works expect the cities which I have more than 2000 options. The cities drop down sends the value, which is just a number. I want the form to send the city, which is HTML element content not the value number in the attribute. I do not want to replace the 2000 different values with the cities. I know a loop would the way to go but I don't know how to create it.
HTML -
<option value="2" >Los Angeles - CA</option>
PHP -
$city = $_REQUEST['city'] ;
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
mail( "$webmaster_email", "Submission", "$city,"From:$email" );
header( "Location: $thankyou_page" );
I believe you want to send the text and not the value from the option
. Right?
I suggest you to create this element on your form: <input type='hidden' id='city_name' name='city_name' />
to hold the select
value with JavaScript when user select his desired option. Then, create and event on the select
like this:
<select onchange="document.getElementById('city_name').value=this.options[this.selectedIndex].text;">
So you'll have the $_POST['city_name']
available on your PHP code.
Presumably you produced that <option>
list with something on the server, e.g. an array:
$locations = array(
...
2 => 'Los Angeles - CA'
...
);
then you'd simply have
$place = $locations[$_REQUEST['city']];
to get the text for the option.
Alternatively, you embed the full city name in the option:
<option value="Los Angeles - CA">Lost Angeles - CA</option>
Use an array! Example:
<?php
$cities = array(
'0' => 'New York - NY',
'1' => '...'
'2' => '...'
);
if (isset($cities[$_REQUEST['city']])) {
$city = $cities[$_REQUEST['city']];
} else {
$city = $_REQUEST['city'];
}
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
mail( "$webmaster_email", "Submission", "$city,"From:$email" );
header( "Location: $thankyou_page" );
}
?>