首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >php $_SERVER['PHP_SELF']以包含查询字符串

php $_SERVER['PHP_SELF']以包含查询字符串
EN

Stack Overflow用户
提问于 2013-11-21 16:52:56
回答 4查看 12.7K关注 0票数 3

实际上,我正在尝试创建一个登录系统,它将使用户返回到他们所在的页面。我知道有人问过这个问题,我也看过其他答案,但我找不到解决我的问题的办法。

我的站点有一个有参考id号的表(例如: 10001,10003,10004,……53401等等)。这些数字也是链接。所有链接指向一个页面("mypage.php"),而引用id号(10004)成为该url的查询字符串:

代码语言:javascript
复制
<td><?php echo '<a href="mypage.php?query_ecr=', urlencode($num), '">'; ?><?php echo $num; ?></a></td>

在我的"header.php",这是在网站的每一页,有一个按钮在菜单上,将打开下面的表单,供用户登录。

代码语言:javascript
复制
<form action='login/process.php' method='post'>
  <label for='name'>Username:</label>
  <input type='text' id='userid' name='user_name'/>
  <label for='password'>Password:</label>
  <input type='password'  name='password' id='userpassword'/>

  <input type='submit' value='Log In' />

  <input type='hidden' name='login' value='1'>
  <input type='hidden' value='".$_SERVER['PHP_SELF']."' name='redirurl'/>
</form>

请注意名称=‘redirurl’的“隐藏输入”。我想捕捉用户所在的当前页面。我已经有一个登录脚本,它将检查用户名和密码,并将它们重定向到所需的页面。

代码语言:javascript
复制
//login/process.php

...blah blah blah other stuff...

global $database,$session;
       $this->user_status=$database->CheckUserPass($_POST['user_name'],$_POST['password']);
       $url = $_POST['redirurl'];
       if($this->user_status==1)
          {
              $session->StartSession($_POST['user_name'],$_POST['password']);
              header("Location: ".$url);
        } else {
              ...blah blah blah.....
              }

我的问题是,如果客人点击一个链接(例如: 10004),他们会被带到网址:

代码语言:javascript
复制
http://www.XXXXXX.XXXX/mypage.php?query_ecr='10004'

但是,在该页上,“redirurl”的值是:

代码语言:javascript
复制
http://www.XXXXXX.XXXX/mypage.php

它忽略了查询字符串。因此,当用户从该页面登录,并且我的登录脚本将他们重定向回该页面时,页面会出现大量错误,因为它需要查询字符串。

如何在$_SERVER‘’PHP_SELF‘中包含查询字符串?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-11-21 17:05:16

你可以用:

代码语言:javascript
复制
$_SERVER['REQUEST_URI']

要获得域名文件夹、查询字符串等之后的所有内容,可以使用其他$_SERVER变量来添加域,也可以在不更改主机的情况下不使用域名。

票数 9
EN

Stack Overflow用户

发布于 2013-11-21 16:59:15

那麽:

代码语言:javascript
复制
echo $_SERVER['PHP_SELF'] . '?' . $_SERVER['QUERY_STRING'];

请注意,您可能希望像这样对输出进行消毒:

代码语言:javascript
复制
$url = $_SERVER['PHP_SELF'] . '?' . $_SERVER['QUERY_STRING'];
echo htmlspecialchars($url, ENT_QUOTES, 'utf-8');

以防范XSS。

票数 7
EN

Stack Overflow用户

发布于 2013-11-21 16:58:54

查询字符串在$_SERVER['QUERY_STRING']中可用。只要把它们连在一起(别忘了问号),你就会没事的。:)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20127113

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档