从下拉列表中获取选定的文本(PHP)

4

我完全是初学PHP的,事实上我这么做的原因是为了定制一个WordPress插件以满足我的需要。目前我有一个默认表单,现在我要添加一个国家下拉框。这是我如何添加它的:

<div class="control-group">
    <label class="control-label" for="Country">Country :</label>
    <div class="controls">
        <select id="itemType_id" name="cscf[country]" class="input-xlarge">
            <option value="malaysia@email.com">Malaysia</option>
            <option value="indonesia@email.com">Indonesia</option> 
        </select>   
        <span class="help-inline"></span>
    </div>  
</div>

到目前为止,我只能使用以下代码检索所选项目的值:

$cscf['country'];

我该如何获取显示文本,也就是这种情况下的国家名称?

如果您想在其他页面中检索值,则需要表单,因此您可以使用GET / POST方法将表单中的值发送到另一个页面。 - user2663434
你能用if else处理它吗?虽然不是最好的方法。 - zxc
4个回答

12

你可以使用一个隐藏字段,然后使用 JavaScript 和 jQuery 将该字段的值设置为下拉列表选择的值。

<select id="itemType_id" name="cscf[country]" class="input-xlarge">
  <option value="malaysia@email.com">Malaysia</option>
  <option value="indonesia@email.com">Indonesia</option> 
</select>
<input type="hidden" name="country" id="country_hidden">

<script>
  $(document).ready(function() {
    $("#itemType_id").change(function(){
      $("#country_hidden").val(("#itemType_id").find(":selected").text());
    });
  });
</script>

当您提交页面时,您可以使用以下方法获取国家名称:

$_POST["country"]

3
我认为这是目前为止最简单的方法。 - abiieez

3
<select name="text selection" onchange="getText(this)">
  <option value="">Select text</option>
  <option value="1">my text 1</option>
  <option value="2">my text 2</option>
</select>

首先,在 select 的 "onchange" 属性上放置一个 JavaScript 函数。 然后,通过使用 getElementById 创建您的函数来将文本传输到文本框。

<script>
  function getText(element) {
  var textHolder = element.options[element.selectedIndex].text
  document.getElementById("txt_holder").value = textHolder;
  }
</script>

然后创建一个临时容器:

<input type="" name="txt_holder" id="txt_holder"> type should be hidden

然后在PHP变量中分配它:
$variableName=$_POST['txt_holder'];

1

Try it like,

<?php
   if(isset($_POST['save']))
   {
      //Let $_POST['cscf']['country']= malaysia@email.com
      // you can explode by @ and get the 0 index name of country
      $cnt=explode('@',$_POST['cscf']['country']);
      if(isset($cnt[0]))// check if name exists in email
         echo ucfirst($cnt[0]);// will echo Malaysia
   }
?>

<form method="post">
    <div class="controls">
        <select id="itemType_id" name="cscf[country]" class="input-xlarge">
            <option value="malaysia@email.com">Malaysia</option>
            <option value="indonesia@email.com">Indonesia</option> 
        </select>   
        <span class="help-inline"></span>
    </div>
    <div class="controls">
        <input type="submit" name='save' value="Save"/>   
        <span class="help-inline"></span>
    </div>
</form>

1
你仍然无法获取显示的文本,只能获取值。您可以像 malaysia@email.com|Malaysia 那样将文本附加到值,然后使用 list($value, $text) = explode('|', $_POST['cscf']['country']); echo $text; 来提取文本。 - Casey
岂不是需要将帖子写成 $cnt=explode('@',$_POST['cscf']['country']); - Casey
@Casey,谢谢。只有我听从了你的建议,这个答案才能很好地发挥作用。 - abiieez
@Rohan,你目前的答案只适用于电子邮件地址始终以<countryName>@email.com的格式出现。如果电子邮件地址的格式不同,我将无法获取国家信息。 - abiieez

1
尝试这个。
<?php
   if(isset($_POST['save']))
   {
       $arrayemail = $_POST['cscf'];
       $mail =  $arrayemail['country'];
       $explode=explode('@',$mail);
      // print_r($explode);
        if(isset($explode[0]))
         echo ucfirst($explode[0]);     

   }
?>

<form method="post">
    <div class="controls">
        <select id="itemType_id" name="cscf[country]" class="input-xlarge">
            <option value="malaysia@email.com">Malaysia</option>
            <option value="indonesia@email.com">Indonesia</option> 
        </select>   
        <span class="help-inline"></span>
    </div>
    <div class="controls">
        <input type="submit" name='save' value="Save"/>   
        <span class="help-inline"></span>
    </div>
</form> 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接