如何在 php 中创建干净的 url 从 mysql 获取数据?
Posted
技术标签:
【中文标题】如何在 php 中创建干净的 url 从 mysql 获取数据?【英文标题】:How to create clean url fetching data from mysql in php? 【发布时间】:2019-04-18 04:31:31 【问题描述】:我想知道如何在php中直接动态从mysql中获取数据创建url?
假设我有一个名为“Products”的数据库表:
1) id
2) seller_id
3) Product Code
4) Product Image
5) Product Description
假设其中添加了 5000 个或更多产品。
假设我的域名是:www.xyz.com
现在我想要的是从产品表的卖家 ID 创建网址,例如 www.xyz.com/sellerid1
如果添加了新的卖家 ID,那么我将自动动态获取 url,并在该页面上从“产品”表中获取与卖家 ID 相关的所有相关产品
我想要这样的网址
www.xyz.com/sellerid1
www.xyz.com/sellerid2
www.xyz.com/sellerid3
我的文件名是我想从“产品”表中获取数据的地方:seller.php
我不想要这样的网址:
www.xyz.com/seller.php?id=sellerid1
www.xyz.com/seller.php?id=sellerid2
www.xyz.com/seller.php?id=sellerid3
我想如果有人直接在地址栏上点击网址,例如:www.xyz.com/sellerid1,那么与sellerid相关的所有产品都会显示。它可以通过 www.xyz.com/seller.php?id=sellerid1 实现这一点,但没有用户会记住那种类型的 url。我要 www.xyz.com/sellerid1
抱歉,两个问题合二为一,但我不知道如何动态实现。
欢迎任何想法或建议。
【问题讨论】:
你可以使用 .htaccess 吗?检查此链接:***.com/questions/16388959/url-rewriting-with-php @Van Tho,感谢您的回复。是的,我可以使用 . htaccess 但它会从所有网址中删除 .php 吗?实际上这是我的第一个项目,所以我从不使用 .htaccess。以及如何从数据库创建 url 并显示所有相关产品这是我必须完成的第一个任务。 How can I create a dynamic URL in php?的可能重复 @Thomas Jeriko,就像您提出的问题一样,我也很困惑-问题是,我不明白如何将 $sellerid 从 url 动态传递给 php 本身。喜欢 www.xyz.com/sellerid1 @Sarah 为什么不用像 laravel 或 codeignitor 这样的框架? 【参考方案1】:你们有卖家表吗? 如果是,那么您可以从表中获取卖家并动态制作链接。
查询:
SELECT id, name FROM tbl_sellers WHERE enabled=1 LIMIT 10;
html (index.php):
$result = []; // execute $query
// loop on result
foreach($result as $item)
echo "<a href=\"www.xyz.com/seller.php?id=sellerid$id\">$name</a>";
seller.php:
// Getting request id from url parameters and cast to integer
$sellerId = (int)str_replace('sellerid', '', isset($_REQUEST['id']) ? $_REQUEST['id'] : '');
if(!$sellerId || $sellerId < 1)
exit('Seller not found.');
$query = "SELECT * FROM tbl_products WHERE seller_id='$sellerId'";
$result = []; // execute $query
// fetch query
exit(var_dump($result));
【讨论】:
@Ata amini,感谢您的宝贵回复。我知道并在上面的问题中提到过这个概念,我不想创建像 www.xyz.com/seller.php?id=sellerid1 这样的网址。我想如果有人点击这样的网址:www.xyz.com/sellerid1 那么所有与sellerid相关的产品都会显示。问题是,我不明白如何将 $sellerid 从 url 动态传递到 php 本身。 使用这一行:$sellerId = (int)str_replace('sellerid', '', isset($_REQUEST['id']) ? $_REQUEST['id'] : '');
从 url 获取参数可以使用:$_GET、$_REQUEST 和 $_POST,如果你的请求方法是 post。【参考方案2】:
在这里使用核心 php。在您的 .htaccess 文件中添加以下行。假设您的默认文件是 index.php 这里。
RewriteEngine on
RewriteCond %(REQUEST_FILENAME) !-f
RewriteCond %(REQUEST_FILENAME) !-d
RewriteRule ^(.*)$ index.php/$1 [L,QSA]
RewriteRule ^seller/([^/]+)$ seller.php?sellerid=$1
现在您将尝试打开 URL http://www.yoururl.com/seller/your_dynamic_seller_id_comes_here。假设您正在打开 URL http://www.yoururl.com/seller/1,那么您将从以下代码 (seller.php) 中获取动态卖家 ID。
<?php
$sellerid = $_GET['sellerid'];
//get the result from database query
$dbquery = "SELECT * FROM Products WHERE seller_id='$sellerid' ";
//execute the above query and use the result and do your stuff.
?>
希望对你有所帮助。
【讨论】:
【参考方案3】:也许你可以使用 Laravel、Codeigniter 等 MVC 框架,或者其他使用 MVC 的框架。 MVC 框架,可以做你想要的,就像
www.xyz.com/sellerid1
或 你可以这样做,但链接不像
www.xyz.com/sellerid1
但喜欢
www.xyz.com/sellerid/1
index.php:
<?php
//get request url
$request_uri = explode('/', $_SERVER['REQUEST_URI']);
// print_r($request_uri);
if($request_uri[2]=='sellerid')
include 'test.php';
?>
test.php:
<?php
echo $request_uri[2].'/'.$request_uri[3];
?>
.htaccess:
RewriteEngine on
RewriteCond $1 !^(index\.php|resources|robots\.txt)
RewriteCond %REQUEST_FILENAME !-f
RewriteCond %REQUEST_FILENAME !-d
RewriteRule ^(.*)$ index.php/$1 [L,QSA]
以及如何创建链接是这样的:
<?php
$url="http://www.example.com/";
$theproduct=array(...);//Fill with your sellerid
foreach ($theproduct as $key)
?>
<a href="<?=$url.'sellerid/'.$key['seller_id']?>"></a>
<?php
?>
【讨论】:
@Thomas Jeriko,感谢您的回复。不幸的是我没有使用它。没有框架。没有框架,这是不可能的吗? 啊,我明白了。是的,您可以在没有框架的情况下做到这一点,请参阅此答案***.com/questions/27570522/… 我在 localhost 上测试过 @Thomas Jeriko,感谢 Thomas 的大力帮助。我想知道如果sellerid 是:best-book-seller-in-newyork 那么网址将是 www.xyz.com/best-book-seller-in-newyork @Sarah 你可以做,比如 $request_uri =explode('/',str_replace('-', ' ', $_SERVER['REQUEST_URI']));以上是关于如何在 php 中创建干净的 url 从 mysql 获取数据?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 OpenCart 中创建自定义的 SEO 友好 URL?
如果数组不存在,则从现有 URL 将数组插入到页面链接 url 中创建数组,将默认值插入到页面上的 href 链接中