1

私はphp/codeignitorを初めて使用し、フォームのチェックボックスの変更をデータベースに投稿しようとしています。変更する行は、以下のgl_idによって割り当てられます。モデルでupdate_checked関数を使用して、gl_id = xであるこれらの各フィールドにTRUEを投稿し、配列にない残りのフィールドにFALSEを使用する方法がわかりません。コントローラで$_POST['checked']を使用してチェックされた値の配列を作成および表示し、それをモデルに渡すことができます。次に、この配列を使用してdbに投稿する必要があります。ここで、gl_id=ビューのフォームの値です。

ビューで

    <h1>Update GL id <?php echo $gl_field['gl_id'];?></h1>
        <label>Stat</label>
            <input type="checkbox" <?php if ($gl_field['stat'] == "TRUE") {echo "checked = checked";} ?>   
            name = "checked[]" id="stat" value= "stat"  /><BR CLEAR="all">
        <label>Exclude</label>
            <input type="checkbox" <?php if ($gl_field['exclude'] == "TRUE") {echo "checked = checked";} ?>  
            name="checked[]" id="exclude" value= "exclude"><BR CLEAR="all">
        <label>Override</label>
            <input type="checkbox" <?php if ($gl_field['override'] == "TRUE") {echo "checked = checked";} ?>          
            name= "checked[]" id= "override" value = "override"/><BR CLEAR="all">

コントローラ内

            public function update_table(){
               $this->load->helper('form');
               $this->page_nav_model->update_table();
               $checked_array = $_POST['checked'];
               $this->page_nav_model->update_checked($checked_array);
               $this->load->view('pages/success');
            }

モデル内

    foreach($checked_array as $true){
            echo $true;                             
        }

上記の例のフォームに情報を取り込むときに明確にするために、すべてのチェックボックスがデータベースで「TRUE」に設定されているため、チェックされています。statのチェックを外して[送信]をクリックすると、値(除外、オーバーライド)を含む配列が表示されます。

私を正しい方向に導く助けに感謝します。

4

3 に答える 3

0

それで、プロジェクト全体の最終調整を行うための支援がまだ必要だったので、dbからのチェックボックスとチェックボックスからのdbを制御しようとしているのと同じくらい環境に優しい人のために、ここに最終結果を投稿したいと思いました。

コントローラ:

    [function from Tayler and]
    $all_checkbox_fields = array('stat','exclude','override');  
        $checked_array = $_POST['checkbox'];
        $data['checkbox'] = $this->add_values($all_checkbox_fields, $checked_array); 
        $data['gl_id'] = $this->input->post('gl_id');
        $this->page_nav_model->update_checked($data); 
        $this->load->view('pages/success');

モデル:

    public function update_checked($data){
        $this->default_db->where('gl_id', $data['gl_id']); 
        $this->default_db->update('oracle_table', $data['checkbox']); 
    }

意見:

    <label>Stat</label>
        <input type="checkbox" <?php if ($gl_field['stat'] == "1") {echo "checked = checked";} ?>   
        name = "checkbox[]" id="stat" value= "stat"/><BR>
    <label>Exclude</label>
        <input type="checkbox" <?php if ($gl_field['exclude'] == "1") {echo "checked = checked";} ?>  
        name="checkbox[]" id="exclude" value= "exclude"/><BR>
    <label>Override</label>
        <input type="checkbox" <?php if ($gl_field['override'] == "1") {echo "checked = checked";} ?>          
        name= "checkbox[]" id= "override" value = "override" ><BR>
于 2012-10-12T20:05:28.420 に答える
0

HTMLでチェックボックスがオフになっている場合、値は$_POSTを介して送信されません。これはCodeIgniterでは考慮されていません。これが私がこの問題に対処する方法です。コントローラ内:

/**
 * Set post values for unchecked boxes.
 *
 * @access private
 * @return void
 */
private function _section_checkboxes()
{
    if (!$this->input->post('is_active')) {$_POST['is_active'] = 0;}
    // other checkboxes here...
}

/**
 * if form validation passes, run this to edit a section
 *
 * @access public
 * @return void
 */
public function do_edit_section()
{
    $this->_section_checkboxes();
    if ($this->section_model->edit_section($this->input->post()))
    {
        redirect('success_page');
    }
}

そしてモデルでは:

/**
 * updates a section with active record, returns success.
 * 
 * @access public
 * @param array $data
 * @return bool
 */
public function edit_section(array $data)
{
    $this->db->where('id', $data['id']);
    return $this->db->update('sections', $data);
}

そして、ビューでは、フォームヘルパーを使用します。

<?=form_checkbox(array('name' => 'is_active', 'id' => 'is_active_field', 'value' => '1', 'checked' => (bool)$item->is_active))?>

これで、チェックされていないチェックボックスは、チェックされていない場合は0、チェックされている場合は1に設定されます。これがあなたの質問に答えることを願っています。

于 2012-10-11T18:36:56.257 に答える
0

テーブルをCIで一度に更新するには、次のような配列が必要です。

    $data = array(
        'column_1_name' => 'value_to_insert'
        'column_2_name' => 'value_to_insert'
        'column_2_name' => 'value_to_insert'
    );

現在、次のような配列があります$ checked_array =('stat'、'exclude'、'override')-メンバーが多かれ少なかれあります。

updateステートメントで使用できる配列(上記の$ dataなど)を作成するには、各列の名前と、$checked_arrayにある場合は1または0に等しい値を持つ別の配列を作成する必要があります。 $checked配列にありませんでした。

以下の関数add_values()はあなたのためにそれを行うことができます。2つの引数を指定する必要があります。

  1. $ all_possibilitiesは、1または0に更新する各列名の配列です。この場合、$ all_possibilities = array('stat'、'exclude'、'override');のようになります。
  2. $ selected:これは、実際に選択されたボックスの名前を含む配列です。これは、$ all_possibilitiesのサブセットです(または、すべてのボックスがチェックされている場合は同じです)。

この機能はコントローラーに組み込まれています。

    function add_values($all_possibilities, $selected) {

        $array_for_query = array();
        // this goes through each possible box that can be checked to see if that possibility was actually selected
        foreach($all_possibilities as $array_member) {
            // this checks to see if the current member of $all_possibilities is found in the $selected array
            if (in_array($array_member, $selected)) {
                    // if it is, it adds that as a member of a new query $array_for_query and gives it a value of 1 (true)
                    $array_for_query[$array_member] = 1;
                } else {
                    // if it is not, same as above, but gives it a value of 0
                    $array_for_query[$array_member] = 0;        
                }
        }

        // once all the possibilities have been checked and added to the query array, that array is returned
        return $array_for_query;
    }

これで、関数を呼び出して2つの引数を渡すことができます。返された配列は$checked_and_uncheckedに割り当てられます。

    $data['checked_and_unchecked'] = add_values($possibilities, $checked_array);

フォームからgl_idも取得するようにしてください。ビューの非表示フィールドを使用してこれを行うことができます。

    <input type="hidden" name="gl_id" value="<?php echo $gl_field['gl_id'];?>" />

コントローラで、その値を次のように取得します

    $data['gl_id'] = $this->input->post('gl_id');

次に、情報をモデルに渡し、テーブルの名前と作成した配列を渡してテーブルを更新できます。

    $this->model_name->model_method($data);

これはモデルに組み込まれます:

    $this->db->update('table_name', $checked_and_unchecked);
    $this->db->where('gl_id', $gl_id);
于 2012-10-11T22:39:26.987 に答える