【问题标题】:Why isn't my form data being processed from one page to another in CodeIgniter?为什么我的表单数据没有在 CodeIgniter 中从一个页面处理到另一个页面?
【发布时间】:2014-12-22 03:37:01
【问题描述】:

我正在为我的 Web 应用程序开发管理面板。会员管理部分的索引是最新会员帐户的列表。每个成员都有一个复选框,管理员可以选中该复选框以一次删除多个用户。我使用 jQuery 提交带有链接的表单。由于表单在成员管理部分(成员/主页)的索引上,我希望表单的过程在成员/删除上。当访问成员/删除控制器时,可以选择在 URL 段中提供单个成员 ID,或者管理员可以使用成员索引页面上的表单。

我的问题是复选框中的所有数据都没有传递给成员/删除控制器。我试过 $this->input->post('delete_members') 和 $_POST['delete_members']。我还尝试将表单的方法更改为 GET,然后更改为 $_GET['delete_members']。我得到“未定义的索引:delete_members 我尝试的一切。有什么想法吗?

PS:我有一条将 members/delete 更改为 members/home/delete 的路由

成员控制器:(成员/家庭)

<?php

class Home extends MY_Controller {

    function __construct(){

        parent::__construct();

    }

    function index($page = 1){

        $this->template->overall_header("Manage Members", array(), array(libs_url('jquery-datatables/extensions/TableTools/css/dataTables.tableTools.css'), libs_url('jquery-datatables/css/dataTables.bootstrap.css')));

        $this->load->library('pagination');

        $data['member_results'] = $this->member->result_array($this->admin['results_per_page'], $page);

        $config = array(
            'base_url' => site_url('members/'),
            'total_rows' => $this->member->total_rows,
            'per_page' => $this->admin['results_per_page'],
            'use_page_numbers' => TRUE,
            'full_tag_open' => '',
            'full_tag_close' => '',
            'first_link' => '<i class="fa fa-angle-double-left"></i>',
            'first_tag_open' => '<li>',
            'first_tag_close' => '</li>'.PHP_EOL,
            'last_link' => '<i class="fa fa-angle-double-right"></i>',
            'last_tag_open' => '<li>',
            'last_tag_close' => '</li>\n',
            'next_link' => '<i class="fa fa-angle-right"></i>',
            'next_tag_open' => '<li>',
            'next_tag_close' => '</li>'.PHP_EOL,
            'prev_link' => '<i class="fa fa-angle-left"></i>',
            'prev_tag_open' => '<li>',
            'prev_tag_close' => '</li>'.PHP_EOL,
            'cur_tag_open' => '<li class="active"><a href="">',
            'cur_tag_close' => '</a></li>'.PHP_EOL,
            'num_tag_open' => '<li>',
            'num_tag_close' => '</li>'.PHP_EOL,
            'cur_page' => $page,
            'uri_segment' => 2
        );

        $this->pagination->initialize($config);

        $data['pagination'] = $this->pagination->create_links();

        $this->load->view('members/index_body', $data);

    }

    function delete($member_id = ''){

        /* If a member id wasn't provided in the URL, look for the array of checkboxes */
        if($member_id == ''){

            if(count($_POST['delete_members']) > 0){

                foreach($_POST['delete_members'] as $id){

                    $this->member->delete($id);

                }

                if($this->member->error == NULL){

                    $this->template->overall_header("Request Processed");

                    $data = array(
                        'error_title' => 'Request Processed',
                        'error_message' => 'The members you have requested have been deleted from the database.',
                        'redirect' => 'members'
                    );

                    $this->load->view('error_body', $data);

                } else {

                    $this->template->overall_header("System Error");

                    $data = array(
                        'error_title' => "System Error",
                        'error_message' => $this->member->error,
                        'redirect' => 'members'
                    );

                    $this->load->view('error_body', $data);

                }

            } else {

                $this->error->title('No Members Selected')->message('You did not select any members to delete!')->redirect('members')->display();

            }

        } else {

            $this->member->delete($member_id);

            if($this->member->error == NULL){

                $this->template->overall_header("Request Processed");

                $data = array(
                    'error_title' => "Request Processed",
                    'error_message' => 'The member you requested has been deleted from the database.',
                    'redirect' => 'members'
                );

                $this->load->view('error_body', $data);

            } else {

                $this->template->overall_header("System Error");

                $data = array(
                    'error_title' => "System Error",
                    'error_message' => $this->member->error,
                    'redirect' => 'members'
                );

                $this->load->view('error_body', $data);

            }

        }

    }

形式:

if(count($member_results) > 0){

    $i = 0;

    $str .= '
                            <div class="table-responsive">
                                '.form_open('members/delete', 'id="delete" role="form"').'
                                    <table class="table table-striped" data-sortable">
                                        <thead>
                                            <tr>
                                                <th></th>
                                                <th>Display Name</th>
                                                <th>Email</th>
                                                <th>Join Date</th>
                                                <th>Actions</th>
                                            </tr>
                                        </thead>
                                        <tbody>
            ';

    foreach($member_results as $member){

        $str .= '
                                            <tr>
                                                <td><input type="checkbox" name="delete_members[]" value="'.$member['id'].'"></td>
                                                <td>'.anchor('members/modify/'.$member['id'], $member['display_name']).'</td>
                                                <td>'.$member['email_address'].'</td>
                                                <td>'.$member['date_joined'].'</td>
                                                <td>
                                                    <div class="btn-group btn-group-xs">
                                                        '.anchor('members/modify/'.$member['id'], '<i class="fa fa-pencil-square"></i>', 'data-toggle="tooltip" title="Modify '.$member['display_name'].'" class="btn btn-danger"').'
                                                        '.anchor('members/delete/'.$member['id'], '<i class="fa fa-eraser"></i>', ' data-toggle="tooltip" title="Delete '.$member['display_name'].'" class="btn btn-danger"').' 
                                                    </div>                          
                                                </td>
                                            </tr>
            ';

    }

    $str .= '
                                        </tbody>
                                    </table>
                                '.form_close().'
                            </div>
                            <div class="data-table-toolbar">
                                    <ul class="pagination">
                                      '.$pagination.'
                                    </ul>
                                </div>
        ';
}

$str .= '<script>
           $(\'#submit-delete\').on(\'click\', function(e){
if($(\'input[type="checkbox"][name="delete_members[]"]:checked\').length > 0){
    $(\'#delete\').submit();
} else {
    alert(\'You did not select any members to delete!\');
    e.preventDefault();
}

}); ';

echo $str;

【问题讨论】:

  • jQuery 提交代码和重定向在哪里?无法使用 javascript 重定向到需要发布数据的页面
  • 在表单底部的JS标签$('#delete').submit()

标签: php jquery forms codeigniter


【解决方案1】:

试试这个:

替换这一行:

form_open('members/delete', 'id="delete" role="form"')

与:

form_open('home/delete', 'id="delete" role="form"')

【讨论】:

  • 对不起,我应该提到我正在使用路由将成员/删除更改为成员/主页/删除。这就是为什么我收到 PHP 错误而不是 404 未找到 :)
【解决方案2】:

改变方法

function delete($member_id = '') { 
  // your code here
}

function delete() { 
 echo '<pre>'; print_r($_POST); die;
 // your code here
}

检查您的表单帖子是否有效。它在删除方法中发布数据,您可以根据逻辑执行其余代码。

【讨论】:

    【解决方案3】:

    我意识到,由于我购买的主题附带了 jQuery iCheck 插件,因此没有发布任何复选框值。当我对主题持怀疑态度时,我禁用了 JS,你不知道吗,复选框值开始发布。

    【讨论】:

      猜你喜欢
      • 2011-01-26
      • 1970-01-01
      • 1970-01-01
      • 2011-04-26
      • 1970-01-01
      • 1970-01-01
      • 2016-07-28
      • 1970-01-01
      • 2020-04-02
      相关资源
      最近更新 更多