【问题标题】:Form input array $_GET comma separated in URL表单输入数组 $_GET 逗号分隔在 URL 中
【发布时间】:2013-11-29 22:23:32
【问题描述】:

我有一个表格:

<form action="results.php" method="get">
<select name="genres[]">
<option value="jazz"></option>
<option value="blues"></option>
<option value="rock"></option>
</select>
</form>

提交表单后,在 URL 中输入变为example.com/?genres%5B%5D=jazz&amp;genres%5B%5D=blues&amp;genres%5B%5D=rock

除此之外,它看起来不太好,我的表单中有多个输入(大约 18 种类型),所以如果用户选择很多,URL 会变得很长。我希望它变成/?genres=jazz,blues,rock

现在我已经阅读了this post,但它没有说明如何制作更简洁的 URL。接下来,我必须将输入用作数组,例如$genres = $_GET['genres'] 才能在另一个函数中使用。

【问题讨论】:

  • 假设您使用的是 apache,您应该可以使用 .htaccess 重写规则来实现这一点。见:httpd.apache.org/docs/2.2/howto/htaccess.html
  • 你可以用 POST 代替吗?
  • 我可以使用 POST,但如果人们共享 URL,其他人不会看到相同的结果,这就是我使用 GET 的原因。

标签: php arrays forms get


【解决方案1】:

你可以这样做:

<!doctype html>
<html>
<head>
    <script src="http://code.jquery.com/jquery-1.10.2.min.js"></script>

    <script>
        $(document).ready(function(){
           $("#go").click(function(){
               var g = $("#genres").val();
               var href = 'results.php?genres=';
               if(g != null) {
                   href += g;
               }
               document.location.href=href;
           });
        });
    </script>
</head>
<body>    
<select id="genres" size="3" multiple>
<option value="jazz">jazz</option>
<option value="blues">blues</option>
<option value="rock">rock</option>
</select>
<input type="button" value="go" name="submit" id="go">
</body>
</html>

在 results.php 中你应该:

$g = isset($_GET['genres'])?$_GET['genres']:"";
$genres = explode(",",$g);

我已经完全删除了表格,因为这些类型现在由document.location.href 发送。 jquery 的.val() 函数返回所选值如预期(由, 内爆)

【讨论】:

  • 看起来是一个不错的解决方案,但 URL 仍然像我在问题中描述的那样返回。它也有点复杂(我刚刚意识到),因为我有多个具有相同表单的页面,因此 javascript 中的返回 URL 取决于用户所在的页面。无论如何,谢谢,upvote。
猜你喜欢
  • 1970-01-01
  • 2012-06-05
  • 1970-01-01
  • 2018-12-10
  • 1970-01-01
  • 2012-07-15
  • 2014-04-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多