刀客孩哥 发表于 2011-4-26 14:06:22

go_back()函数怎么用

是扩展helper里的一个函数,从函数名上看,是返回上一页网上搜了下,说是防止站外提交的一个东西


求它的用途和用法

saturn 发表于 2011-4-26 18:14:08

访问上一个站内链接,也就是返回上一个referrer。你可以分析下具体代码,有不懂的请提交上来一起交流。

刀客孩哥 发表于 2011-4-27 10:20:00

谢谢stblog老大的回复

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

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

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


    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;

    }

jeongee 发表于 2011-4-27 10:51:51

本帖最后由 jeongee 于 2011-4-27 10:53 编辑

回复 3# 刀客孩哥


   
   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是个什么东西,就是这个网页从哪个地方来的,如果你是直接访问的这个网页,这个值就是空的,也就是没有,所以这个函数一开始进行

$referer = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '';

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

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

PS:我觉得这个$default默认值为空字符比较好,另外
else if (!empty($default))
      {
          redirect($default);
      }
这里完全没有必要,直接 redirect($default);就可以了,也就是默认返回主页,或者指定,个人观点。

刀客孩哥 发表于 2011-4-27 13:01:46

谢版主的详解,我又去试了一下,取到了$_SERVER['HTTP_REFERER']这值,但它不跳转,不知我的用法有何差错

    function index()
    {
      echo anchor('test/tianbiao', '点击此处填表');
    }

    function agai()
    {
      var_dump($_SERVER);//$_SERVER['HTTP_REFERER']里有值!
      echo '处理完成!';
      go_back();
    }

    function tianbiao()
    {
      $this->load->view('test_v');
    }
页: [1]
查看完整版本: go_back()函数怎么用