Sal
Sal

Reputation: 7

How to get value from checkbox and post array in codeigniter?

How to get value form multiples checkbox and post array in codeigniter? I have problem when I get value post array and echo the value. I see only the value of the last checked checkbox. How to show post value when submit? You find three files: view, Controller and Model. Please check where I wrong...

UPDATE.PHP:

<?php defined('BASEPATH') OR exit('No direct script access allowed'); ?>
<div class="row">
<div class="col-sm-12">
<?php echo form_open('page_controller/update_page_post'); ?>

<div class="form-group">
            <div class="row">
                <div class="col-sm-3 col-xs-12">
                    <label><?php echo trans('subcategory'); ?></label>
                </div>
           </div><div class="col-xm-12">
                         <div class="table-responsive">
                             <table class="table table-bordered table-striped" role="grid">
                            <tbody>
                                <tr>
                                <?php   $valuesub = ($page->subcat_recip_id); ?>
                            <?php   $array_of_values = explode(",", $valuesub); 
                                //if ($item['parent_id'] != "0" && $item['subcat_recip_id'] == "0") :
                    foreach ($array_of_values as $item) { 

                        if(in_array($subcat_recip_id,$item)): {  ?>

                       <td>
                           <input type="checkbox" name="subcat_recip_id[]" class="square-purple" value="<?php echo html_escape($item["title"]); ?>" CHECKED> &nbsp; <?php echo html_escape($item["title"]);
                                    } ?>
                                <?php   else: { ?>
<input type="checkbox" name="subcat_recip_id[]" class="square-purple" value="<?php echo html_escape($item["title"]); ?>"> &nbsp; <?php echo html_escape($item["title"]);
                        } 

                                endif;  }?>
                                </td> 
        <?php echo html_escape($valuesub); ?></tr>
                                 </tbody>
                             </table>
                 </div>   
                </div>
        </div>

PAGE_MODEL.PHP:

<?php class Page_model extends CI_Model
{
public function input_values()
{
    $data = array(
        'lang_id' => $this->input->post('lang_id', true),
        'title' => $this->input->post('title', true),
        'slug' => $this->input->post('slug', true),
        'page_description' => $this->input->post('page_description', true),
        'page_keywords' => $this->input->post('page_keywords', true),
        'page_content' => $this->input->post('page_content', false),
        'parent_id' => $this->input->post('parent_id', true),
        'page_active' => $this->input->post('page_active', true),
        'title_active' => $this->input->post('title_active', true),
        'breadcrumb_active' => $this->input->post('breadcrumb_active', true),
        'need_auth' => $this->input->post('need_auth', true),
        'howmany_people' => $this->input->post('howmany_people', true),
        'difficulty' => $this->input->post('difficulty', true),
        'howmany_time' => $this->input->post('howmany_time', true),
        'location' => $this->input->post('location', true),
        'subcat_recip_id' => $this->input->post('subcat_recip_id')
    for ($i=0; $i<count($menu_links); $i++) 
   {
    echo $subcat_recip_id[$i];
   } 
    );  
    return $data;
}
//add page
public function add()
{
    $data = $this->page_model->input_values();
    if (empty($data["slug"])) 
    {
    //slug for title
    $data["slug"] = str_slug($data["title"]);
    if (empty($data["slug"])) 
      {
            $data["slug"] = "page-" . uniqid();
      }
    }
    return $this->db->insert('pages', $data);
}

//update page
public function update($id)
{
    //set values
    $data = $this->page_model->input_values();
    if (empty($data["slug"])) {
        //slug for title
        $data["slug"] = str_slug($data["title"]);
        if (empty($data["slug"])) {
            $data["slug"] = "page-" . uniqid();
        }
    }
  $page = $this->get_page_by_id($id);
  if (!empty($page))  {
    $this->db->where('id', $id);
    return $this->db->update('pages', $data);
}
     return false;
}

PAGE_CONTROLLER.PHP

 * Add Page Post*/
public function add_page_post()
{
    //validate inputs
    $this->form_validation->set_rules('title', trans("title"), 'required|xss_clean|max_length[500]');

    if ($this->form_validation->run() === false) {
        $this->session->set_flashdata('errors', validation_errors());
        $this->session->set_flashdata('form_data', $this->page_model->input_values());
        redirect($this->agent->referrer());
    } else {

        if (!$this->page_model->check_page_name()) {
            $this->session->set_flashdata('form_data', $this->page_model->input_values());
            $this->session->set_flashdata('error', trans("msg_page_slug_error"));
            redirect($this->agent->referrer());
            exit();
        }

        if ($this->page_model->add()) {
            $this->session->set_flashdata('success', trans("page") . " " . trans("msg_suc_added"));
            redirect($this->agent->referrer());
        } else {
            $this->session->set_flashdata('form_data', $this->page_model->input_values());
            $this->session->set_flashdata('error', trans("msg_error"));
            redirect($this->agent->referrer());
        }
    }
}

Upvotes: 0

Views: 950

Answers (2)

Hip Hura
Hip Hura

Reputation: 143

I have tried this code in your Page_model put this code.

public function input_values(){
$checkbox = implode(',', $this->checkBox());
$data = array(
    'lang_id' => $this->input->post('lang_id', true),
    'title' => $this->input->post('title', true),
    'slug' => $this->input->post('slug', true),
    'page_description' => $this->input->post('page_description', true),
    'page_keywords' => $this->input->post('page_keywords', true),
    'page_content' => $this->input->post('page_content', false),
    'parent_id' => $this->input->post('parent_id', true),
    'page_active' => $this->input->post('page_active', true),
    'title_active' => $this->input->post('title_active', true),
    'breadcrumb_active' => $this->input->post('breadcrumb_active', true),
    'need_auth' => $this->input->post('need_auth', true),
    'howmany_people' => $this->input->post('howmany_people', true),
    'difficulty' => $this->input->post('difficulty', true),
    'howmany_time' => $this->input->post('howmany_time', true),
    'location' => $this->input->post('location', true),
    'subcat_recip_id' => $checkbox
);
}

public function checkBox(){
$count = count($_POST['subcat_recip_id']);
for($n=0; $n<$count; $n++){
$checkbox[$n] = $_POST['subcat_recip_id'][$n];
}
return $checkbox;
}

hopefully it helps

Upvotes: 0

Sal
Sal

Reputation: 7

This is what $menu_links is:

public function get_menu_links_by_lang()
{
    $lang_id = $this->input->post('lang_id', true);
    if (!empty($lang_id)):
        $menu_links = $this->navigation_model->get_menu_links_by_lang($lang_id);
        foreach ($menu_links as $item):
            if ($item["type"] != "category" && $item["location"] == "header" && $item['parent_id'] == "0"):
                echo ' <option value="' . $item["id"] . '">' . $item["title"] . '</option>';
            endif;
        endforeach;
    endif;
}      

I edited a code to insert new form page and I need this page to enter some values into DB. All works Ok and they inserted to DB, only the checkbox doesn't work or better it take only the value of the last checked checkbox and not all the checkbox checked! I have tried it in many ways but I can't do it alone. Sorry.

Upvotes: 0

Related Questions