我的网址结构包含查询字符串和名为position
的参数。
示例:
http://computerhelpwanted.com/jobs/?occupation=administrator&position=network+administrator
我还有一个表单选择选项下拉列表,其表单选择名称为position
。
示例:
<form action="/jobs/" method="GET" id="menuform">
<select name="occupation" onChange="populate(this.id,\'position\')">
<option selected="" disabled="">Select Occupation</option>
<option value="administrator">Administrator</option>
</select>
<select name="position" onChange="this.form.submit()">
<option selected="" disabled="">Select Position</option>
<option value="network administrator">Network Administrator</option>
</select>
</form>
当用户进行选择时,它会将选项值发送到action属性,其中select name =&#34; position&#34;作为查询字符串中使用的参数。
我的问题是,如何从查询字符串值中单独访问表单选择值?
我使用_GET方法从查询字符串参数中调用值。
示例:
$position = isset($_GET['position']) ? ($_GET['position']) : '';
显然,它从URL结构中获取值,而不是表单元素。或者它可能同时做到,不确定。但是测试它,我似乎得出结论,它是从URL而不是形式获得它。
如何在PHP中进行比较时确保访问表单选择值?
更新
我遇到的问题是在标题中设置了我的规范网址。
<link rel="canonical" href="http://computerhelpwanted.com/jobs/?occupation=administrator&position=network-administrator" />
该链接是Google上的索引链接。我知道我可以将htaccess重定向到新链接,但我只想弄清楚如何显示此页面的规范网址。
应该是
<link rel="canonical" href="http://computerhelpwanted.com/jobs/?occupation=administrator&position=network+administrator" />
唯一的区别是查询字符串中的-
和+
。
并非所有查询字符串都包含+。有些人有 - 。但我在两个网址上显示内容是否有 - 或+。无论哪种方式,两个网址都会获得相同的网页内容。
但由于规范是从URI动态创建的,而不是表单元素的值,因此两个内容页面都有2个不同的规范。
使用_Get(&#39; value&#39;)从查询字符串而不是表单元素中提取值。我知道这一点,因为表单元素值在network administrator
之间有一个空格,当表单提交为network+administrator
时,它会被urlencoded。因此,如果我可以与表单元素值进行比较,我可以设置正确的规范。
答案 0 :(得分:1)
HTTP是一种无状态协议,您在调用所需页面时生成HTML内容,然后它就在那里。与form
元素交互时,可以从预定义(使用DOM构建)选项中选择值,然后将其传递给另一个文件进行处理。当您将值传递给该处理器文件时,您可以通过各种方法执行此操作(为简单起见,我们只需看一下GET和POST文件)。
GET:会将您的表单参数转换为您在问题中发布的网址查询。 当您的数据以GET数组的形式到达您的处理器文件时,文件本身不知道它是从哪种形式获得的,它只能看到查询。
POST:会将您的参数编码到传输层中,使其显然不可见,但它仍然存在。
使用GET,您可以手动形成具有预期无效或恶意参数的查询,并使用它们调用您的处理器文件。 POST也可以以编程方式设置为恶意,但提供了一个方便的隐藏级别,并考虑到您的问题,可能会提供您正在寻找的效果(“不直接从网址中获取”)。
修改强>:
根据OP问题和评论中看到的可见模式简化表单参数处理的代码:
$validKeys = array(
'position',
'occupation'
);
foreach ($validKeys AS $key){
${$key} = isset($_GET[$key]) ? $_GET[$key] : '';
}
/* other processing code */
使用上面的内容,如果你有15个输入参数,你就不必逐个完成所有这些参数,因为${$key}
允许你创建动态命名的变量,而你只是更新您的$validKeys
容器(也可以填充数据库中保存的值,而不是手动控制)。根据您更新的评论,我设计您可能正在寻找类似的内容。
答案 1 :(得分:0)
那是因为你正在使用GET,可以通过URL轻松操作。
我建议将方法更改为POST。可以使用调试器进行编辑。