【问题标题】:How to modify query string to plain url using PHP?如何使用 PHP 将查询字符串修改为纯 url?
【发布时间】:2016-10-20 15:58:45
【问题描述】:

我有以下 html 表单:

<div class="row form">
    <div class="col-md-offset-3 col-md-6 col-md-offset-3">
    <form class="form-inline" role="form" method="get" action="<?php echo htmlspecialchars(SITE_URL.'location'); ?>">
        <div class="form-group col-md-10 no-p-m">                      
            <select class="form-control" id="basic" name="location" required>
            <?php
            $get_location = mysqli_query($conn, "SELECT * FROM product_sub_area");
            if(mysqli_num_rows($get_location) == 0 ) {
                $choose = 'No City found';
            } else {
                $choose = 'Choose City';
            }
            ?>
            <option value=""><?php echo $choose; ?></option>
            <?php                                         
            while($get_location_result = mysqli_fetch_array($get_location) ) {
                $location_id = (int) $get_location_result['psub_area_id'];
                $location_name = htmlspecialchars($get_location_result['psub_name']);
                echo "<option value='$location_id'>$location_name</option>";
            }
            ?>                    
            </select>
        </div>
        <div class="form-group col-md-2 no-p-m" id="basic">  
            <input type="submit" class="btn btn-default filter-search" value="BROWSE">
        </div> 
    </form>                
    </div>
</div>  

当我提交此表单时,网址显示如下:

http://localhost/freelancer/happiechef/location?location=1

但我需要显示这种类型的网址:

http://localhost/freelancer/happiechef/location/carlifonia

这里/location/ 是一个名为location.php 的页面。我正在使用 .htaccess 隐藏页面扩展。

所以从location.php页面我想得到$_GET['location'] value = $location_id

例如。

$_GET['location'] = 1 或 2(选择标签选项值)

现有的 .htaccess 代码

ErrorDocument 404 not-found.php
RewriteEngine On        

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^location/([\w-]+)$ location.php?location=$1 [QSA,NC,L]

RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*)$ $1.php [NC,L]

【问题讨论】:

  • 这就是使用 GET 方法的 HTML 表单的工作原理;他们像这样将值放入 URL 中。为什么不使用 javascript 将用户转发到正确的 URL 而不是表单?
  • 您可以使用 jQuery 来执行此操作。捕获表单提交,创建链接,然后将用户发送到正确的链接。在您的 PHP 脚本中,您需要从 url 而不是从 $_GET 获取“位置”值。我建议使用 php 框架,因为它们可以帮助您捕获 Url 以及许多其他功能。考虑 Laravel :)
  • 哪种方法更简单?使用 js/jQuery 或 .htaccess 吗?我该怎么做?
  • @JaspalSingh 您需要从 url 而不是从 $_GET 获取“位置”值 - 这不是真的。正在重写 URL。 PHP 接收到location.php?location=$1
  • @shibbirahmed 您可能会使用 both JS mod_rewrite 来完成此操作。

标签: php apache .htaccess mod-rewrite


【解决方案1】:

这是一个如何在 jQuery 中实现的示例:

首先,将id 添加到您的&lt;form&gt; 标签,以便您可以轻松访问它:

<form id="formname" class="form-inline" role="form" method="get" action="<?php echo htmlspecialchars(SITE_URL.'location'); ?>">

您还有一个重复的id,名为"basic"。确保仅将其保留在 &lt;select&gt; 标记上,并删除另一个。

然后在你的 JS 中:

$("#formname").submit(function(event) {
    event.preventDefault();
    var loc = $("#basic option:selected").text();
    window.location.href = '/freelancer/happiechef/location/' + loc;
});

这会将用户转发到 URL,例如 http://localhost/freelancer/happiechef/location/carlifonia。然后 .htaccess 会将这个 URL 重写为location.php?location=california

【讨论】:

  • 好主意,但如果有人通过检查编辑此 js 代码会发生什么?
  • @shibbirahmed 他们看 JS 代码有什么问题?
  • 我的意思是有人可以更改这个window.location.href 位置吗?
  • @shibbirahmed 他们可以放任何他们想要的东西。但是您的脚本应该能够处理无效位置。
  • @shibbirahmed 用户无需修改JS,重定向后修改URL即可。
猜你喜欢
  • 2017-07-11
  • 2018-06-19
  • 2012-03-20
  • 2015-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-24
  • 2021-04-30
相关资源
最近更新 更多