【问题标题】:If Codeigniter controller ID is invalid, how to redirect如果 Codeigniter 控制器 ID 无效,如何重定向
【发布时间】:2014-04-29 08:46:53
【问题描述】:

我希望标题准确地描述了我要问的内容...

我的控制器使用 url 的第三段 (intId) 来搜索我的数据库以获取要加载到其视图页面中的数据库信息等。它工作正常,提供 intId 对应于我的数据库中的一行......但是,如果某些流氓决定输入随机 intId,则页面加载时会出现错误,因为如果 intId 不存在,自然不会设置视图文件中所需的变量。

在我的控制器中,我如何设置和 if 语句来确定 intId 是否有效,如果不是 - 设置重定向到错误页面等。

<?php
class Brands extends CI_Controller
{
    public function __construct()
    {
        parent::__construct();
        $this->load->model('Products_model');
    }
    public function products_lookup_by_id($intId)
    {
        $config = array(
            'base_url' => base_url() . '/brands/' . $intId . '/',
            'total_rows' => $this->Products_model->total_rows_brands($intId),
            'per_page' => 25,
            'uri_segment' => 3
        );
        $this->pagination->initialize($config);
        $data         = array(
            'offset_no' => $this->uri->segment(3),
            'total_rows' => $config['total_rows'],
            'per_page' => $config['per_page'],
            'nav1' => $this->Products_model->nav1(),
            'nav2' => $this->Products_model->nav2(),
            'nav3' => $this->Products_model->nav3(),
            'nav4' => $this->Products_model->nav4(),
            'nav5' => $this->Products_model->nav5(),
            'nav6' => $this->Products_model->nav6(),
            'nav7' => $this->Products_model->nav7()
        );
        if ($data['total_rows'] > 0)
        {
            $data['from'] = $data['offset_no'] + 1;
        }
        else
        {
            $data['from'] = 0;
        }
        if (($data['total_rows'] - $data['offset_no']) < $data['per_page'])
        {
            $data['to'] = ($data['offset_no'] + ($data['total_rows'] - $data['offset_no']));
        }
        else
        {
            $data['to'] = $data['offset_no'] + $data['per_page'];
        }
        $query = $this->Products_model->query_brands($intId);
        foreach ($query as $row)
        {
            $data['title']     = $row['my_brand'];
            $data['description']   = $row['description'];
            $data['breadcrumb'] = $row['my_brand'];
            $data['images']     = 'brands/' . $row['intId'];
        }
        $data['section_page']      = 'Brands';
        $data['section_page_link'] = 'brands';
        $data['items1']            = $this->Products_model->items1_brands($data['per_page'], $data['offset_no']);
        $this->template->load_header('products/header_view', $data);
        $this->template->load_mainview('products/mainview_view', $data);
        $this->template->load_grid('products/grid_view', $data);
        $this->template->load_footer('footer_view', $data);
    }
}

【问题讨论】:

    标签: php codeigniter variables redirect controller


    【解决方案1】:
    public function products_lookup_by_id($intId)
        {
            $config = array(
                'base_url' => base_url() . '/brands/' . $intId . '/',
                'total_rows' => $this->Products_model->total_rows_brands($intId),
                'per_page' => 25,
                'uri_segment' => 3
            );
    
            if (empty($config['total_rows'])) {
    
                redirect('/errors');
            }
    
        }
    

    【讨论】:

      【解决方案2】:

      验证total_rows的值,在$config初始化后添加下面的代码

      if (empty($config['total_rows'])) {
          // redirect
      }
      

      【讨论】:

        【解决方案3】:

        你可以修改你的 $this->Products_model->total_rows_brands($intId) 函数:

        function total_rows_brands($intId)
        {
             if (! is_numeric($intId)) {
                  return FALSE;
             }
        
             $query = $this->db->get_where('your_table', array('id' => $intId));
        
             if (! $query) {
                  return FALSE;
             }
        
             .... 
        }
        

        然后在你的控制器中:

        public function products_lookup_by_id($intId)
        {
             $data = $this->Products_model->total_rows_brands($intId);
        
             if (! $data) {
                 redirect('your_500_error_controller');
             }
        

        【讨论】:

          【解决方案4】:

          load->model('Products_model'); } 公共功能 products_lookup_by_id($intId) { $config = 数组( 'base_url' => base_url() 。 '/品牌/' 。 $intId 。 '/', 'total_rows' => $this->Products_model->total_rows_brands($intId), 'per_page' => 25, 'uri_segment' => 3 );

               ############# This code for $intId record check ####
             $productRecord = $this->Products_model->total_rows_brands($intId);
          

          if(!count($productRecord)>0) { $heading = "404 页面未找到"; $message = "您请求的页面没有找到。"; // show_error($heading, $message);
          show_error($message, 500, $heading); }

          ############# 产品记录结束校验码###

              $this->pagination->initialize($config);
              $data         = array(
                  'offset_no' => $this->uri->segment(3),
                  'total_rows' => $config['total_rows'],
                  'per_page' => $config['per_page'],
                  'nav1' => $this->Products_model->nav1(),
                  'nav2' => $this->Products_model->nav2(),
                  'nav3' => $this->Products_model->nav3(),
                  'nav4' => $this->Products_model->nav4(),
                  'nav5' => $this->Products_model->nav5(),
                  'nav6' => $this->Products_model->nav6(),
                  'nav7' => $this->Products_model->nav7()
              );
              if ($data['total_rows'] > 0)
              {
                  $data['from'] = $data['offset_no'] + 1;
              }
              else
              {
                  $data['from'] = 0;
              }
              if (($data['total_rows'] - $data['offset_no']) < $data['per_page'])
              {
                  $data['to'] = ($data['offset_no'] + ($data['total_rows'] - $data['offset_no']));
              }
              else
              {
                  $data['to'] = $data['offset_no'] + $data['per_page'];
              }
              $query = $this->Products_model->query_brands($intId);
              foreach ($query as $row)
              {
                  $data['title']     = $row['my_brand'];
                  $data['description']   = $row['description'];
                  $data['breadcrumb'] = $row['my_brand'];
                  $data['images']     = 'brands/' . $row['intId'];
              }
              $data['section_page']      = 'Brands';
              $data['section_page_link'] = 'brands';
              $data['items1']            = $this->Products_model->items1_brands($data['per_page'], $data['offset_no']);
              $this->template->load_header('products/header_view', $data);
              $this->template->load_mainview('products/mainview_view', $data);
              $this->template->load_grid('products/grid_view', $data);
              $this->template->load_footer('footer_view', $data);
          }
          

          }

          【讨论】:

            猜你喜欢
            • 2012-07-16
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-09-25
            • 1970-01-01
            • 1970-01-01
            • 2021-01-24
            • 1970-01-01
            相关资源
            最近更新 更多