如何使用PHP替换HTML元素内容(纯文本)的属性

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" );
    }
?>