【发布时间】: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/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