当我更改select
元素的值时,
HTML
<form name="form1" action="" method="post">
<select id="filter1">
<option value="?sort=recent" onselected="this.form.submit();">Most recent</option>
<option value="?sort=views" onselected="this.form.submit();">Most viewed</option>
</select>
</form>
PHP
<?php
if(isset($_GET['filter1']))
{
$term = strtolower($_POST['filter1']);
switch($term)
{
case 'recent':
echo "recent";
break;
case 'views':
echo "by views";
break;
}
}
?>
答案 0 :(得分:3)
您似乎对在表单中发送数据的过程感到有些困惑。以下代码将根据您的PHP文件以及它希望从查询字符串获取的变量为您工作。
<form name="form1" action="" method="get">
<select id="filter1" name="filter1" onchange="this.form.submit();">
<option value="recent">Most recent</option>
<option value="views">Most viewed</option>
</select>
<input type="submit" value="Submit" />
</form>
您可以看到我已将method
属性更改为get
。这意味着数据将通过查询字符串发送,因此一旦表单提交,网址将更改为:http://example.com/?filter1=value
另外,为了实现冗余,您应该为已关闭javascript的用户提供一个提交按钮。
答案 1 :(得分:2)
尝试
<form name="form1" action="newurl.php" method="post">
<select name="sort" onChange="this.form.submit();">
<option value="recent">Most recent</option>
<option value="views">Most viewed</option>
</select>
</form>
请记住您的表单方法是post,因此排序值将存储在$ _POST ['sort']
此外,您只需将表单的方法更改为“get”并将表单的操作值保留为空,因为post上的默认操作行为是调用相同的文件(让我们称之为form.php)并附加get值(类似于“form.php?sort = selectedvalue”),它已经暗示了一个url更改,尽管它是相同的文件。
答案 2 :(得分:2)
您必须在onChange
对象上使用select
事件:
<form name="form1" action="" method="post">
<select name="filter1" onchange="parentNode.submit()">
<option value="recent">Most recent</option>
<option value="views">Most viewed</option>
</select>
</form>
PHP脚本上var filter1
的值为recent
或views
,无需使用?sort=whatever
来发送数据。
然后你必须从你POST
超全局检索vars,而不是你使用GET
。如果您要使用GET
,则必须将表单上的method
类型更改为get
。我认为使用GET
是做你想要的正确方法..所以:
<?php
if(isset($_GET['filter1']))
{
$term = strtolower($_GET['filter1']);
switch($term)
{
case 'recent':
echo "recent";
break;
case 'views':
echo "by views";
break;
}
}
?>