PHP $ _GET选择标记

问题描述:

当$ _GET从表单中选择标记什么是返回值。根据我在做什么,我认为它会返回一个整数(1 - 选项),但我想咨询一些更加了解这个主题的人。有没有办法让选择的字符串被选中?

+0

如果你确保你的选择有一个属性值,你得到的属性 – scrappedcola

+1

的增值代码将真正帮助我们理解你的问题和问题 –

+0

如果一个表单有一个SELECT标记并且它被选中,并且你发布表单,那么$ _GET会给你包含SELECT ELEMENT NAME AS ARRAY KEY和SELECT ELEMENT VALUE作为数组值的数组,例如array('select'=> 'value') –

the specification

如果字段元素是一个select元素,然后在选项,其selectedness是真实的,没有被禁用的选择元素的列表中的每个选项元素,追加到表格中的条目以name作为名称的数据集,作为值的option元素的值,以及作为类型的type。

这是选择的选项元素的值。索引将永远不会被发送,除非它们碰巧与该值相同。

+0

你在混合'select'部件与'多选',这造成更多的混乱 – MaxZoom

+0

@MaxZoom - 不,我不是。选择元素的工作方式与使用或不使用'multiple'属性相同。唯一的区别是可以选择的选项数量。 – Quentin

它返回所选选项的值。

<select name="someFilter"> 
    <option value="food">Food</option> 
    <option value="drink">Drink</option> 
</select> 

所以,在这种情况下$_GET['someFilter']将返回fooddrink

如果没有选择任何值作为选择值,表单将发送选定的选项值或第一个选项。
您可以选择以下实验,并提交按钮,看看效果:

var form = document.forms['myForm'], 
 
    select = form.querySelector('select'), 
 
    button = form.querySelector('input[type=submit]'); 
 

 
select.addEventListener('change', function() { 
 
    console.log('Selected value is ' + this.value) 
 
}); 
 

 
button.addEventListener('click', function(e) { 
 
    e.preventDefault(); 
 
    var data = new FormData(form); 
 
    var field = 'selection'; 
 
    console.log('Form will send ' + data.getAll(field) + ' for ' + field); 
 
    var label = select.querySelector('option[value="' + data.getAll(field) + '"]').innerHTML; 
 
    data.set(field, label) 
 
    console.log('But we can change it to label: ' + data.getAll(field)); 
 
});
<form name='myForm'> 
 
    <label for='selection'>Select something:</label> 
 
    <select name="selection"> 
 
    <option value='0'>---</option> 
 
    <option value='1'>First</option> 
 
    <option value='2'>Second</option> 
 
    <option value='3'>Third</option> 
 
    </select> 
 
    <br/><br/> 
 
    <input type='submit' value="submit" /> 
 
</form>