0

ここで私がやりたいことは次のとおりです。

タイトル、説明、著者、画像などの特定の要素を含む本の追加フォームがあります。追加フォームには、ユーザーが本を配置したいカテゴリであるチェックボックスもいくつかあります。これまでのところ、ユーザーがフォームに本のボタンを追加すると、すべての入力が検証され、本の情報がデータベースに挿入され、画像が正常にアップロードされます。

これがすべて発生したら、モデルで、データベースに追加されたばかりのレコードの book_id を返し、次のように別のテーブルに挿入します。

$book_id = $this->db->insert_id();
$data = array(
        'book_linktable_book_id' => $book_id,
    );
$this->db->insert('book_linktable', $data);

book_id とともに book_category_id をこの別のテーブルに挿入する必要があります。したがって、ユーザーが選択したカテゴリごとに、book_id と book_category_id をこの別のテーブルに挿入します。

コントローラーのコードは次のとおりです。

function create_book(){
    $this->form_validation->set_rules('title', 'Title', 'trim|xss_clean|required|max_length[50]');
    $this->form_validation->set_rules('description', 'Description', 'trim|xss_clean|required|max_length[600]');
    $this->form_validation->set_rules('exam_grade', 'Exam Grade', 'trim|xss_clean|required|max_length[10]');
    $this->form_validation->set_rules('author', 'Author', 'trim|xss_clean|required|max_length[25]');
    $this->form_validation->set_rules('edition', 'Edition', 'trim|xss_clean|required|max_length[15]');
    $this->form_validation->set_rules('publisher', 'Publisher', 'trim|xss_clean|required|max_length[30]');
    $this->form_validation->set_rules('price', 'Price', 'trim|xss_clean|required');
    if ($this->form_validation->run() == FALSE)
    {
        $data = $this->style_model->admin_area();
        $data['category_query'] = $this->admin_books_model->get_book_categories();
        $data['page_title'] = 'Add New Book';
        $this->load->view('admin/books/add_book', $data);
    }
    else
    {           
        //upload the image and create thumbnail
        $config['upload_path'] = APPPATH . 'uploads/';
        $config['allowed_types'] = 'jpeg|jpg|gif|png';
        $config['max_size'] = '1024';
        $this->load->library('upload', $config);

        $field_name = "image";
        if( ! $this->upload->do_upload($field_name))
        {
            //failed to upload
            $data = $this->style_model->admin_area();
            $data['category_query'] = $this->admin_books_model->get_book_categories();
            $data['page_title'] = 'Add New Book';
            $this->form_validation->set_message("image", "Image size too large");
            $this->load->view('admin/books/add_book', $data);
        }
        else
        {
            //image uploaded
            $data = $this->input->post('category');
            $this->load->view('admin/category', $data);
            /*$upload_data = $this->upload->data('file_name');
            $image_name = $upload_data['file_name'];
            $this->admin_books_model->add_book($image_name);
            $this->session->set_flashdata('msg', 'New Book Created');
            redirect('admin_books');*/
        }
    }   
} //function create_book()

モデルコードは次のとおりです。

function add_book($image_name){
    $data = array(
          'book_name' => $this->input->post('title'),
          'book_description' => $this->input->post('description'),
          'book_grade' => $this->input->post('exam_grade'),
          'book_author' => $this->input->post('author'),
          'book_edition' => $this->input->post('edition'),
          'book_publisher' => $this->input->post('publisher'),
          'book_price' => $this->input->post('price'),
          'book_image' => $image_name,
        );
    $this->db->insert('books', $data);

    $book_id = $this->db->insert_id();
    //for each category selected, getthe id and insert into link table


    $data = array(
        'book_linktable_book_id' => $book_id,
    );
    $this->db->insert('book_linktable', $data);
} //function add_book()

ビューのフォーム コードは次のとおりです。

<div id="left_form_content">
            <?php echo form_open_multipart('admin_books/create_book'); ?>
            <?php echo form_label('Title') . "<br />"; ?>
            <?php echo form_input('title', set_value('title')); ?>
            <?php echo form_error('title') . "<br />"; ?>
            <?php echo form_label('Exam Grade') . "<br />"; ?>
            <?php echo form_input('exam_grade', set_value('exam_grade')); ?>
            <?php echo form_error('exam_grade') . "<br />"; ?>
            <?php echo form_label('Edition') . "<br />"; ?>
            <?php echo form_input('edition', set_value('edition')); ?>
            <?php echo form_error('edition') . "<br />"; ?>
            <?php echo form_label('Author') . "<br />"; ?>
            <?php echo form_input('author', set_value('author')); ?>
            <?php echo form_error('author') . "<br />"; ?>
            <?php echo form_label('Publisher') . "<br />"; ?>
            <?php echo form_input('publisher', set_value('publisher')); ?>
            <?php echo form_error('publisher') . "<br />"; ?>
        </div>
        <div id="right_form_content">
            <?php echo form_label('Description') . "<br />"; ?>
            <?php echo form_textarea('description', set_value('description')); ?>
            <?php echo form_error('description') . "<br />"; ?>
            <?php echo form_label('Categories') . "<br />"; ?>
            <?php
                foreach($category_query as $data) {
                    echo "<input type='checkbox' name='category[]' value='" . $data->book_category_id . "'>" . $data->book_category_name . "</input>" . "<br />";
                }
            ?>          
            <?php echo form_error('categories') . "<br />"; ?>
            <?php echo form_label('Image') . "<br />"; ?>
            <?php echo form_upload('image', set_value('image')); ?>
            <?php echo form_error('image') . "<br />"; ?>
            <?php echo form_label('Price') . "<br />"; ?>
            <?php echo form_input('price', set_value('price')); ?>
            <?php echo form_error('price') . "<br />"; ?>
            <?php echo form_submit('submit', 'Add Book'); ?>
            <?php echo form_close(); ?>
        </div>
        <div class="clear"></div>

助けてくれてありがとう、

トム

編集:

DB テーブルは次のとおりです。

Books
book_id
book_title
book_description
book_author
book_grade
book_edition
book_publisher
book_image
book_price

book_categories
book_category_id
book_category_name


book_linktable
    book_linktable_book_id
    book_linktable_book_category_id
4

1 に答える 1

0

あなたは、達成しようとしていることにかなり近づいているようです。カテゴリ ID の配列を繰り返し処理し、次のように行を挿入するだけです。

$categories = $this->input->post('category');
foreach ($categories as $category_id)
{
    $this->db->insert('book_linktable', array(
        'book_linktable_book_id' => $book_id,
        'book_linktable_book_category_id' => $category_id
    ));
}

または、メソッドを使用することもできますinsert_batch()

$data = array();
foreach ($categories as $category_id)
{
    $data[] = array('book_linktable_book_id' => $book_id,
                    'book_linktable_book_category_id' => $category_id
    );
}
$this->db->insert_batch('book_linktable', $data);
于 2012-09-24T16:14:55.073 に答える