php表单选择应该触发url更改和值更改

时间:2011-11-28 11:52:22

标签: php html

当我更改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;          
        }
    }
?>

3 个答案:

答案 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的值为recentviews,无需使用?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;          
        }
    }
?>