1

MySQLでテーブルを更新しようとしていますCodeigniter

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

function update_customer_records($updatedrow)
{
    $this->db->where('id',$this->input->post('id'));
    $this->db->update('customers',$updatedrow);
}

私の見解は:

    $attributes=array(
        'name'=>'updatecustomer',
        'id'=>'updatecustomer',
        );
    echo form_open('masterdata/manage_customers',$attributes);
?>

<table>
    <tr>
        <td>&nbsp;</td><td>&nbsp;</td><td>Customer Name</td><td>postalcode</td>
    <tr>

<?php if(isset($records)) : foreach ($records as $row) : ?>
    <tr>
        <td>
<?php echo anchor('masterdata/customers_updated/'.$row->id, img(array('src'=>'images/delete_icon.png','border'=>'0','alt'=>'Delete'))); ?>
        </td>
        <td>
            <input type=checkbox name="editcustomer[]" id="editcustomer[]" value="<?php echo $row->id ?>">
        </td>
        <td>
            <input type="text" name="customername_<?php echo $row->id ?>" id="customername_<?php echo $row->id ?>" value="<?php echo $row->customer_name ; ?>" >
        </td>
        <td>
            <input type="text" name="customername_<?php echo $row->id ?>" id="customername_<?php echo $row->id ?>" value="<?php echo $row->postalcode ; ?>" >
        </td>
    </tr>
<?php endforeach ; ?>
    </table>
<input type="submit" value="Update Selected">
<?php else : ?>
<h2> No Records Found</h2>
<?php endif; ?>
<?php echo form_close(); ?>

私のコントローラーは:

function manage_customers()
    {

        $data['title']="Manage Customers";

            //query model to get data results for form
            $data=array();

            if($query=$this->model_master_data->get_records()){
                $data['records']=$query;


            $this->load->view("master_data/view_master_data_header",$data);
            $this->load->view("master_data/view_master_data_nav");
            $this->load->view("master_data/view_content_master_data_manage_customers",$data);
            $this->load->view("master_data/view_master_data_footer");


            $editcustomer = $this->input->post('editcustomer');

            if(isset($editcustomer)){

                //begin outputting id of selected checkbox
                foreach ($editcustomer as $row) :
                    echo $row;

                $updatedrow=array(
                    'id'=>$row,
                    'postalcode'=>'44444'
                    );


                $this->model_master_data->update_customer_records($updatedrow);

                endforeach;
            }

私には2つの問題があります:

  1. チェックボックスがチェックされていない場合、foreachの実行を停止するにはどうすればよいですか。
  2. 更新を実行するために、配列をモデルに正しく渡すにはどうすればよいですか?

いつものように事前に感謝します。

4

2 に答える 2

1

「CodeigniterがCIを使用してフォームからmysqlテーブルを更新する」とトピックが重複していますか?

チェックボックスがチェックされていない場合、foreachの実行を停止するにはどうすればよいですか。

チェックボックスがチェックされていない場合は、foreachの実行を停止する必要はありません。$editcustomer変数にはチェックボックスがオンになっているだけなので。

更新を実行するために、配列をモデルに正しく渡すにはどうすればよいですか?

あなたのモデルは間違っています。そのはず:

public function update_customer_records($updatedrow)
{
    $this->db->update('customers', $updatedrow);
}

すでに渡されているので、書く必要はありません$this->db->where('id',$this->input->post('id'));(そして、モデルで$ this-> input-> post()を使用できないため、間違っています)。id$updaterow

編集:申し訳ありませんが、コードの読み取りが速すぎます。

function update_customer_records($updatedrow)
{
    $this->db->where('id',$this->input->post('id'));
    $this->db->update('customers',$updatedrow);
}

...正しい。または、もっと短い方法で書くこともできます。

function update_customer_records($updatedrow)
{
    $this->db->update('customers', $updatedrow, array('id' => $this->input->post('id')));
}
于 2013-03-02T21:32:45.033 に答える
1

まず最初に、同じ名前とID(以下に示す)のフォームに2つのフィールドがあり、1つのフィールドで値customer_nameを設定し、別のフィールドで設定していますpostalcode

<td>
    <input type="text" name="customername_<?php echo $row->id ?>" id="customername_<?php echo $row->id ?>" value="<?php echo $row->customer_name ; ?>" >
                                --^^--
</td>
<td>
    <input type="text" name="customername_<?php echo $row->id ?>" id="customername_<?php echo $row->id ?>" value="<?php echo $row->postalcode ; ?>" >
                                --^^--
</td>

したがって、(おそらく)2番目のフィールドの名前とIDは、その値に従う必要があると思いpostalcodeます。

foreachまた、ループ内のコードは、フォームにチェックボックスがオンになっている場合にのみ実行されるため、ループについて心配する必要はありません。チェックボックスがオフになっていると送信されないためですが、次のコードを使用してループをチェックして実行できます。

if( $this->input->post('editcustomer') != false )
{
    foreach ($editcustomer as $row)
    {
        // code here
    }
}

が見つからないか、フォームとともに送信されない場合、if条件はfalseを返します。editcustomerまたid、フォームにフィールドがないため、この場合は使用できません。したがって、モデル$this->input->post('id')のチェックボックスIDをオンにする必要がある場合は、次を使用できます。where clause

コントローラ内:

if( $this->input->post('editcustomer') != false )
{
    $this->load->model('model_master_data');
    foreach ($editcustomer as $row_id)
    {
        $data = array( 'postalcode' => '44444' );
        $this->model_master_data->update_customer_records( $row_id, $data );
    }
}

'id'=>$row,このフィールドを更新したくないので、合格する必要はないと思います。また、レコードを更新する前に、フォーム検証を使用してフォーム入力を確認する必要があります(ユーザーが郵便番号を入力できるようにするために必要な郵便番号フィールドを設定できます)。

モデル内:

function update_customer_records( $id, $data )
{
    $this->db->where( 'id', $id );
    $this->db->update( 'customers', $data );
}

だからそれはこのようなことをするでしょう(擬似コード)

update the customers table set `postalcode` = '44444' where `id` = $id

更新:update_batch も使用できると思います。

コントローラ内:

if( $this->input->post('editcustomer') != false )
{
    $data = array();
    foreach ($editcustomer as $row_id)
    {
        $data[] = array( 'id' => $row_id, 'postalcode' => '44444';
    }
    $this->load->model('model_master_data');
    $this->model_master_data->update_customer_records( $data );
}

モデル内:

function update_customer_records( $data )
{
    $this->db->update_batch('customers', $data, 'id');
}
于 2013-03-02T23:16:51.937 に答える