用户
 找回密码
 入住 CI 中国社区
搜索
查看: 5043|回复: 4
收起左侧

go_back()函数怎么用

[复制链接]
发表于 2011-4-26 14:06:22 | 显示全部楼层 |阅读模式
是扩展helper里的一个函数,从函数名上看,是返回上一页网上搜了下,说是防止站外提交的一个东西


求它的用途和用法
发表于 2011-4-26 18:14:08 | 显示全部楼层
访问上一个站内链接,也就是返回上一个referrer。你可以分析下具体代码,有不懂的请提交上来一起交流。
 楼主| 发表于 2011-4-27 10:20:00 | 显示全部楼层
谢谢stblog老大的回复

我是个用了半年ci的新手,几乎没看过别人的代码。stblog是我较为深入地看的第一个php程序,问得浅薄的地方请万勿见怪。呵呵

这go_back()是返回什么,返回的东西又存在哪里呢?

我做了个测试,结果未遂,代码在此,请指教

PHP复制代码
 
    function agai()
    {
        $uname = $this->input->get('uname');
        $tel = $this->input->get('tel');
        $aboutme = $this->input->get('aboutme');
 
        echo '姓名:'.$uname.'<br>';
        echo '电话:'.$tel.'<br>';
        echo '简介:'.$aboutme.'<br>';
        $val =  go_back();
 
        echo $val;
 
    }
 
复制代码
发表于 2011-4-27 10:51:51 | 显示全部楼层
本帖最后由 jeongee 于 2011-4-27 10:53 编辑

回复 3# 刀客孩哥


  
PHP复制代码
 
     if ( ! function_exists('go_back'))
{
  function go_back($suffix = NULL, $default = NULL)
  {
      //获取来源
      $referer = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '';
  
      //判断来源
      if (!empty($referer))
      {
          // 来自Typecho
          if (!empty($suffix))
          {
              $parts = parse_url($referer);
              $myParts = parse_url($suffix);
              
              if (isset($myParts['fragment']))
              {
                  $parts['fragment'] = $myParts['fragment'];
              }
              
              if (isset($myParts['query']))
              {
                  $args = array();
                  if (isset($parts['query']))
                  {
                      parse_str($parts['query'], $args);
                  }
              
                  parse_str($myParts['query'], $currentArgs);
                  $args = array_merge($args, $currentArgs);
                  $parts['query'] = http_build_query($args);
              }
              
              $referer = build_url($parts);
          }
          
          redirect($referer);
      }
      else if (!empty($default))
      {
          redirect($default);
      }
  }
}
   
复制代码


首先你要知道HTTP_REFERER是个什么东西,就是这个网页从哪个地方来的,如果你是直接访问的这个网页,这个值就是空的,也就是没有,所以这个函数一开始进行

PHP复制代码
 $referer = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '';
复制代码


仔细读下上面代码呢,会发现,如果有referer的时候就进入第一个if块,没有的时候判断有没有指定default值,如果2个都没有,这个函数什么都不执行!这就是你的代码所创造的不执行的条件。

其次,这个函数不是用来返回值的,是用来跳转页面的,所以的你的运用是错误的。

PS:我觉得这个$default默认值为空字符比较好,另外
PHP复制代码
else if (!empty($default))
      {
          redirect($default);
      }
复制代码

这里完全没有必要,直接
PHP复制代码
redirect($default);
复制代码
就可以了,也就是默认返回主页,或者指定,个人观点。
 楼主| 发表于 2011-4-27 13:01:46 | 显示全部楼层
谢版主的详解,我又去试了一下,取到了$_SERVER['HTTP_REFERER']这值,但它不跳转,不知我的用法有何差错
PHP复制代码
 
    function index()
    {
        echo anchor('test/tianbiao', '点击此处填表');
    }
 
    function agai()
    {
        var_dump($_SERVER);  //$_SERVER['HTTP_REFERER']里有值!
        echo '处理完成!';
        go_back();
    }
 
    function tianbiao()
    {
        $this->load->view('test_v');
    }
 
复制代码

本版积分规则