【问题标题】:How to change query sting to another string using PHP?如何使用 PHP 将查询字符串更改为另一个字符串?
【发布时间】:2018-06-19 08:41:58
【问题描述】:

成功填写注册表后,我将用户重定向到 ccroipr-id.php?id=63 页面。这里一个新值被保存到数据库中

ccroipr-201801101515569979

每个新注册都会更改此值。

现在,对于每个个人资料页面,我都使用 ccroipr-id.php?id=63 页面显示数据。

但现在我希望网址是

ccroipr-201801101515569979.php

因此,期望的可能结果是:domain.com/ccroipr/201801101515569979

您能告诉我如何实现这一目标吗?

注意:我正在学习 PHP。

【问题讨论】:

  • 你是用ajax请求创建用户还是用php,是用ajax还是php提交的表单?
  • @SanjayKumarSingh 是的,注册页面正在使用 jQuery/Ajax 调用进行验证。成功提交数据后,我只是重定向到 ccroipr-id.php 页面。
  • 您是否尝试过使用 header('location: ccroipr-201801101515569979.php') 或 window.location.href?
  • @Suyog 我知道我可以将他们重定向到ccroipr-201801101515569979.php 页面,但每次注册的号码都不同。
  • 这样您就可以每次都动态生成文件名。例如$num = date('YmdHis'); $page = 'ccroipr-'.$num.'.php'; header('位置:'.$page);

标签: php


【解决方案1】:

要将 URL domain.com/ccroipr/201801101515569979 用于用户配置文件,您需要实现以下两个步骤:

在您的网站上创建一个名为 ccroipr.php 的 php 文件,其中包含分析请求 URL 的代码。

这可以通过在 PHP 中使用 PHP 全局 $_SERVER 变量来实现。它包含一个名为'REQUEST_URI' 的字段,该字段存储用于访问给定文件的路径。因此,对于 URL domain.com/ccroipr/201801101515569979,变量 $_SERVER['REQUEST_URI'] 包含值 ccroipr/201801101515569979。这可以用来提取用户ID:

$requestParts = explode('/', strstr($_SERVER['REQUEST_URI'] . '?', '?', TRUE));
$userId = '';
if (count($requestParts) > 1) {
    $userId = $requestParts[1];
}

if ($userId === '') {
    // Redirect to login page, generate a new ID or show an error.
    die();
}
// Call database and filter for the $userId value to retrieve all userspecific data
// Generate the specific HTML

函数strstr($path, '?', TRUE) 会切断请求路径中的所有 GET 参数。不过,您仍然可以通过 $_GET 变量访问它们。在原始路径中添加了一个问号,以确保在未提交此类参数的情况下函数仍能按预期运行。

函数explode('/', $url)然后将路径中用斜杠分隔的所有部分分开,因此每个部分都可以自己分析。

条件if (count($requestParts) > 1) 检查用户ID 的路径部分 是否在给定的URL 中提交。如果是,则保存在$userId 变量中。但请记住,仍然可能已经为它提交了一个空字符串。例如,如果有人打电话给domain.com/ccroipr/,就会发生这种情况。

条件if ($userId === '') 然后验证是否确实提交了用户 ID。

修改您的 .htaccess 文件以允许省略 .php 结尾的请求。

这个问题最好地描述了实现这一点的方法:How to execute a PHP web page without the .php extension in the URL?

【讨论】:

  • 您可以使用$dbValue = str_replace($'-', '/', $dbValue, 1);ccroipr-201801101515569979 转换为ccroipr/201801101515569979 或改变解决方案以使用'-' 字符而不是斜杠来分解路径。请记住,如果您想这样做,还必须在 .htaccess 文件中考虑。
  • 谢谢你,但是如果我使用domain.com/ccroipr/ 访问该网站而没有号码会发生什么?
  • @ShibbirAhmed $userId 变量将包含一个空字符串,因此条件 if ($userId === '') 将为真,从而导致错误、重定向或您为这种情况编写的任何其他内容。
  • 谢谢你,伙计。我将应用该代码并让您知道如果我遇到任何问题,但感谢您的帮助。
猜你喜欢
  • 2015-08-05
  • 2014-12-03
  • 2023-04-05
  • 2016-04-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-25
  • 1970-01-01
相关资源
最近更新 更多