【问题标题】:404 page Not Found Error in codeigniter?404页面未找到codeigniter中的错误?
【发布时间】:2014-10-31 05:32:14
【问题描述】:

我刚刚开始使用 codeigniter,现在正在对我的小项目进行管理员控制。我有客户信息列表。

当我点击查看和编辑按钮时,它给了我 404 错误

我已经在 application/config/routes.php 中配置了路径

$route['admin/clients'] = 'admin_clients/index';
   $route['admin/clients/add'] = 'admin_clients/add';
   $route['admin/clients/update'] = 'admin_clients/update';
   $route['admin/clients/update/(:any)'] = 'admin_clients/update/$1';
   $route['admin/clients/delete/(:any)'] = 'admin_clients/delete/$1';
   $route['admin/clients/(:any)'] = 'admin_clients/index/$1'; //$1 = page number

重定向到编辑页面的代码

<td class="crud-actions">
                  <a href="'.site_url("admin").'/clients/update/'.$row['id'].'" class="btn btn-info">view & edit</a>  
                  <a href="'.site_url("admin").'/clients/delete/'.$row['id'].'" class="btn btn-danger">delete</a>
                </td>

即使删除也不起作用,它给了我同样的错误。 这是我的 .htaccess 代码

RewriteEngine on
RewriteBase /testing_palace/
RewriteCond $1 !^(index\.php|resources|robots\.txt)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L,QSA]

这是我的控制器文件

<?php

class Admin_clients extends CI_Controller {

    /**
     * name of the folder responsible for the views 
     * which are manipulated by this controller
     * @constant string
     */
    const VIEW_FOLDER = 'admin/clients';

    /**
     * Responsable for auto load the model
     * @return void
     */
    public function __construct() {
        parent::__construct();
        $this->load->model('admin_client_model');
        if (!$this->session->userdata('is_logged_in')) {
            redirect('admin/login');
        }
    }

    /**
     * Load the main view with all the current model model's data.
     * @return void
     */
    public function index() {

        //all the posts sent by the view
        $search_string = $this->input->post('search_string');
        $order = $this->input->post('order');
        $order_type = $this->input->post('order_type');

        //pagination settings
        $config['per_page'] = 5;

        $config['base_url'] = base_url() . 'admin/clients';
        $config['use_page_numbers'] = TRUE;
        $config['num_links'] = 20;
        $config['full_tag_open'] = '<ul>';
        $config['full_tag_close'] = '</ul>';
        $config['num_tag_open'] = '<li>';
        $config['num_tag_close'] = '</li>';
        $config['cur_tag_open'] = '<li class="active"><a>';
        $config['cur_tag_close'] = '</a></li>';

        //limit end
        $page = $this->uri->segment(3);

        //math to get the initial record to be select in the database
        $limit_end = ($page * $config['per_page']) - $config['per_page'];
        if ($limit_end < 0) {
            $limit_end = 0;
        }

        //if order type was changed
        if ($order_type) {
            $filter_session_data['order_type'] = $order_type;
        } else {
            //we have something stored in the session? 
            if ($this->session->userdata('order_type')) {
                $order_type = $this->session->userdata('order_type');
            } else {
                //if we have nothing inside session, so it's the default "Asc"
                $order_type = 'Asc';
            }
        }
        //make the data type var avaible to our view
        $data['order_type_selected'] = $order_type;


        //we must avoid a page reload with the previous session data
        //if any filter post was sent, then it's the first time we load the content
        //in this case we clean the session filter data
        //if any filter post was sent but we are in some page, we must load the session data
        //filtered && || paginated
        if ($search_string !== false && $order !== false || $this->uri->segment(3) == true) {

            /*
              The comments here are the same for line 79 until 99

              if post is not null, we store it in session data array
              if is null, we use the session data already stored
              we save order into the the var to load the view with the param already selected
             */
            if ($search_string) {
                $filter_session_data['search_string_selected'] = $search_string;
            } else {
                $search_string = $this->session->userdata('search_string_selected');
            }
            $data['search_string_selected'] = $search_string;

            if ($order) {
                $filter_session_data['order'] = $order;
            } else {
                $order = $this->session->userdata('order');
            }
            $data['order'] = $order;

            //save session data into the session
            if (isset($filter_session_data)) {
                $this->session->set_userdata($filter_session_data);
            }

            //fetch sql data into arrays
            $data['count_products'] = $this->admin_client_model->count_clients($search_string, $order);
            $config['total_rows'] = $data['count_products'];

            //fetch sql data into arrays
            if ($search_string) {
                if ($order) {
                    $data['manufacturers'] = $this->admin_client_model->get_clients($search_string, $order, $order_type, $config['per_page'], $limit_end);
                } else {
                    $data['manufacturers'] = $this->admin_client_model->get_clients($search_string, '', $order_type, $config['per_page'], $limit_end);
                }
            } else {
                if ($order) {
                    $data['manufacturers'] = $this->admin_client_model->get_clients('', $order, $order_type, $config['per_page'], $limit_end);
                } else {
                    $data['manufacturers'] = $this->admin_client_model->get_clients('', '', $order_type, $config['per_page'], $limit_end);
                }
            }
        } else {

            //clean filter data inside section
            $filter_session_data['manufacture_selected'] = null;
            $filter_session_data['search_string_selected'] = null;
            $filter_session_data['order'] = null;
            $filter_session_data['order_type'] = null;
            $this->session->set_userdata($filter_session_data);

            //pre selected options
            $data['search_string_selected'] = '';
            $data['order'] = 'id';

            //fetch sql data into arrays
            $data['count_products'] = $this->admin_client_model->count_clients();
            $data['manufacturers'] = $this->admin_client_model->get_clients('', '', $order_type, $config['per_page'], $limit_end);
            $config['total_rows'] = $data['count_products'];
        }//!isset($search_string) && !isset($order)
        //initializate the panination helper 
        $this->pagination->initialize($config);

        //load the view
        $data['main_content'] = 'admin/clients/list';
        $this->load->view('templates/template', $data);
    }

//index

    public function add() {
        //if save button was clicked, get the data sent via post
        if ($this->input->server('REQUEST_METHOD') === 'POST') {


        $config['upload_path'] ='public/images/';
        $config['allowed_types'] = 'gif|jpg|png|jpeg';
        $config['max_size'] = '100';
        $config['max_width']  = '1024';
        $config['max_height']  = '768';

        $this->load->library('upload', $config);
        $this->upload->initialize($config);
        //$this->upload->initialize($config);
        $this->load->library('form_validation');

            //form validation
            $this->form_validation->set_rules('client_name', 'client_name', 'required');
            $clientLogo='image';
            $this->form_validation->set_error_delimiters('<div class="alert alert-error"><a class="close" data-dismiss="alert">×</a><strong>', '</strong></div>');


            //if the form has passed through the validation
            if ($this->form_validation->run()) {

                if (!$this->upload->do_upload($clientLogo)) {
                    $error = array('error' => $this->upload->display_errors('<p>', '</p>'));
                    print_r($error);
                }else {
                    //$data = array('upload_data' => $this->upload->data());
                    //print_r($data);
                    $uploadedImg=$this->upload->data();
                    $data_to_store = array(
                        'client_name' => $this->input->post('client_name'),
                        'client_logo'=>  $uploadedImg['client_name']
                    );
                }
                //if the insert has returned true then we show the flash message
                if ($this->admin_client_model->store_clients($data_to_store)) {
                    $data['flash_message'] = TRUE;
                } else {
                    $data['flash_message'] = FALSE;
                }
            }
        }
        //load the view
        $data['main_content'] = 'admin/clients/add';
        $this->load->view('templates/template', $data);
    }

    /**
     * Update item by his id
     * @return void
     */
    public function update() {
        //product id 
        $id = $this->uri->segment(4);

        //if save button was clicked, get the data sent via post
        if ($this->input->server('REQUEST_METHOD') === 'POST') {
            //form validation
            $this->form_validation->set_rules('client_name', 'client_name', 'required');
            if (empty($_FILES['clientLogo']['name'])){
                $this->form_validation->set_rules('clientLogo', 'Client Logo', 'required');
            }
            $this->form_validation->set_error_delimiters('<div class="alert alert-error"><a class="close" data-dismiss="alert">×</a><strong>', '</strong></div>');
            //if the form has passed through the validation
            if ($this->form_validation->run()) {

                $data_to_store = array(
                    'client_name' => $this->input->post('client_name'),
                    'client_logo'=>self::do_upload($_FILES['clientLogo']['name'])
                );
                //if the insert has returned true then we show the flash message
                if ($this->admin_client_model->update_clients($id, $data_to_store) == TRUE) {
                    $this->session->set_flashdata('flash_message', 'updated');
                } else {
                    $this->session->set_flashdata('flash_message', 'not_updated');
                }
                redirect('admin/clients/update/' . $id . '');
            }//validation run
        }

        //if we are updating, and the data did not pass trough the validation
        //the code below wel reload the current data
        //product data 
        $data['manufacture'] = $this->admin_client_model->get_client_by_id($id);
        //load the view
        $data['main_content'] = 'admin/clients/edit';
        $this->load->view('templates/template', $data);
    }

//update

    /**
     * Delete product by his id
     * @return void
     */
    public function delete() {
        //product id 
        $id = $this->uri->segment(4);
        $this->admin_client_model->delete_clients($id);
        redirect('admin/clients');
    }

//edit


}

请帮我解决这个问题,我们将不胜感激。 谢谢

【问题讨论】:

  • 您是否通过退出来检查控制器...?您是否还加载了视图文件?
  • 另外请粘贴控制器文件
  • 请检查我是否粘贴了控制器文件。
  • 查看文件路径是views/admin/clients/添加、编辑、列出php文件,当用户点击查看&编辑按钮时加载编辑文件
  • 我删除了更新功能中的所有处理内容,简单的加载视图编辑但仍然显示相同的错误,我认为它的路由配置错误,请帮助我。

标签: php .htaccess codeigniter mod-rewrite


【解决方案1】:

使用以下 .htaccess:

RewriteEngine on
RewriteCond $1 !^(index\.php|resources|robots\.txt)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$index.php/$1 [L,QSA]

【讨论】:

  • 当我尝试你的代码并在没有(index.php)的情况下在 url 中加载主页时,它给了我 Not found 错误。
  • 您是否在服务器中启用了 mod_rewrite?
  • 是的,下面的代码对我有用!-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php/$1 [L,QSA]
  • 对不起,我不知道我什么时候试过你的,它给了我 Not found 错误,我不知道背后的原因。
【解决方案2】:

@Noor Fathima

请更改路由条件

$route['admin/clients/update/(:any)'] = 'admin_clients/update/$1'; $route['admin/clients/delete/(:any)'] = 'admin_clients/delete/$1'; $route['admin/clients/update'] = 'admin_clients/update'; $route['admin/clients/add'] = 'admin_clients/add'; $route['admin/clients/(:any)'] = 'admin_clients/index/$1'; //$1 = page number $route['admin/clients'] = 'admin_clients/index';

【讨论】:

  • 对不起,它不工作,但仍然给我同样的错误
  • ok,检查config.php文件,将$config['uri_protocol'] = 'AUTO';的值改为$config['uri_protocol'] = 'REQUEST_URI';
【解决方案3】:

尝试修改你的更新函数来传递一个参数:

公共函数更新($id = null)

这允许您将值或 null 传递给函数,并将与您的路由一起使用。

然后你需要删除这个:

//product id 
$id = $this->uri->segment(4);

【讨论】:

  • 我认为当我尝试使用段 4 时它没有进入该功能。当我尝试不使用段时它工作正常。
  • 如果你有路由: $route['admin/clients/update'] = 'admin_clients/update';和 $route['admin/clients/update/(:any)'] = 'admin_clients/update/$1';连同我发布的代码,它应该进入该函数
  • 然而 $route['admin/clients/update/(:any)'] = 'admin_clients/update/$1';应该在路由文件中排在第一位
  • $route['admin/clients/delete/(:any)'] = 'admin_clients/delete/$1'; $route['admin/clients/update'] = 'admin_clients/update'; $route['admin/clients/add'] = 'admin_clients/add'; $route['admin/clients/(:any)'] = 'admin_clients/index/$1'; //$1 = 页码 $route['admin/clients'] = 'admin_clients/index';即使这也不起作用
  • 与其他更改一起尝试并确保它进入更新功能: $route['admin/clients/delete/(:any)'] = 'admin_clients/delete/$1'; $route['admin/clients/update/(:any)'] = 'admin_clients/update/$1'; $route['admin/clients/update'] = 'admin_clients/update'; $route['admin/clients/add'] = 'admin_clients/add'; $route['admin/clients/(:any)'] = 'admin_clients/index/$1'; $route['admin/clients'] = 'admin_clients/index';
【解决方案4】:

试试这个:

  1. 在您的 config.php 中使用 $config['base_url'] = ''//leave it blank;$config['index_page'] = ''// leave it blank;

  2. 将每个&lt;a href="'.site_url("...") 更改为此&lt;?php echo base_url("..."); ?&gt;

  3. 每个使用site_url() 的链接都将其更改为base_url()

看看它是否有效。也许您也可以提供您的config.php,以便我们进行更多调试。

【讨论】:

    猜你喜欢
    • 2015-03-30
    • 1970-01-01
    • 2017-03-09
    • 2016-12-06
    • 2015-07-28
    • 1970-01-01
    • 1970-01-01
    • 2016-12-11
    • 1970-01-01
    相关资源
    最近更新 更多