0

データベーステーブルのフィールドを編集できるアプリケーションがあります。更新したいフィールドに移動し、テキストを変更する代わりにフィールドを空白にする場合を除いて、すべてが正常でデータが更新されます。このようにして、コントローラーのメソッドがテーブルのその行のIDを失うため、phpエラーが発生します。

誰かが私を助けてくれたら嬉しいです、よろしくお願いします。

メソッドgetを使用するビューファイルの一部は、テーブル行のID(edit_fuga.php)を渡します。

 <div id='tab2'>    
            <?php
            $query = $this->db->query("SELECT * FROM fugas WHERE tipo_fuga='2';");

            foreach ($query->result_array() as $row)
            {
                echo "<input type='hidden' name='id_fuga' value='". $row['id_fuga']."'>";
                echo $row['desc_fuga']."&nbsp;&nbsp;<a class='button' href='http://localhost/code/index.php/fugas/editar_fuga?var1=".$row['id_fuga']."'>Editar</a>";
                echo "<br/>";
            }

            ?>


        </div>

リダイレクト先のビュー(editar_fuga.php):

<?php echo validation_errors(); ?>

<?php echo form_open('fugas/editar_fuga') ?>

<?php 

$query = $this->db->query("SELECT desc_fuga_table FROM tipos_fuga where tipo_fuga_table='".$fuga_selected['tipo_fuga']."';");

foreach ($query->result() as $row)
{
   echo $row->desc_fuga_table;
}

$tipo_fuga_selected=$row->desc_fuga_table;

    ?>

    <label for="tipo_fuga"><?php echo $tipo_fuga_selected; ?></label><br/>
    <p/>


    <label for="desc_fuga">Desc da fuga:</label><p/> 
    <textarea rows="4" cols="50" name="desc_fuga"><?php echo $fuga_selected['desc_fuga']; ?></textarea><p/>

    <input type="hidden" name="id_fuga" value="<?php echo $fuga_selected['id_fuga']; ?>">
    <input type="submit" name="submit" value="Alterar Fuga" /><p/>

    <INPUT Type="button" VALUE="Voltar" onClick="history.go(-1);return true;">

</form>

ビューeditar_fuga.phpのコントローラーのメソッド

public function editar_fuga(){

        $fuga_id = $this->input->get('var1');
        var_dump($fuga_id);

        $this->load->helper('form');
        $this->load->library('form_validation');
        //$this->load->view('templates/header');

        $this->form_validation->set_rules('desc_fuga', 'Descrição da fuga acidental', 'required');

    if ($this->form_validation->run() === FALSE)
    {
        $data['fuga_selected'] = $this->fugas_model->get_fuga($fuga_id);        
        $this->load->view('fugas/editar_fuga', $data);
    }
    else
    {
        $this->fugas_model->update_fuga();
        echo "Fuga alterada com sucesso.<br/><br/>";
        $this->load->view('fichas/index');
        }

    }

フーガモデル:

    public function update_fuga(){



    $data = array(
        'desc_fuga' => $this->input->post('desc_fuga')
    );

    $id=$this->input->post('id_fuga');

    $this->db->where('id_fuga', $id);
    $this->db->update('fugas', $data);

}

public function get_fuga($fuga_id){

    var_dump($fuga_id);

    $query = $this->db->query("SELECT * FROM fugas where id_fuga='".$fuga_id."';");

    foreach ($query->result_array() as $row)
    {
        $data_fuga = array(
    'id_fuga' => $row['id_fuga'],
    'tipo_fuga' => $row['tipo_fuga'],
    'desc_fuga' => $row['desc_fuga']
    );
    }

    return $data_fuga;

}
4

2 に答える 2

0

エラーはここにあります、これは悪い習慣です。ビューとデータベースアクセスを混在させないでください

このメソッドはモデルに含まれている必要があります

$query = $this->db->query("SELECT desc_fuga_table FROM tipos_fuga where tipo_fuga_table='".$fuga_selected['tipo_fuga']."';");

foreach ($query->result() as $row)
{
   echo $row->desc_fuga_table;
}

$tipo_fuga_selected=$row->desc_fuga_table;

    ?>

また、2回目に$ fuga_selected ['tipo_fuga']を渡さないため、結果は得られません。つまり、クエリは空になり、$rowがインスタンス化されることはありません。

したがって、エラーを発生させる行はこれです

$tipo_fuga_selected=$row->desc_fuga_table;

そして@tix3が言ったように、あなたは少し混乱しているので、MVCについてもっと読むべきです

于 2013-02-26T15:16:43.367 に答える
0

まず、あなたは完全に間違ったことをしているのです。

MVCとは何かに関するチュートリアルのいくつかを読む必要があります。

理由がない限り、ビューファイルでデータベースアクションを実行しないでください。まず、優れたcodeigniterユーザーガイドと、MVCの実際の内容に関する一般的な記事を読む必要があります。ウィキペディアの例はこちらです。

また、codeigniterのアクティブレコードを確認して、代わりに使用できるようにする必要があります。->query()これは強く推奨されておらず、ARでは実行できない非常に複雑なクエリがあるまれな状況でのみ使用する必要があります。

*いくつかのコメントの後に編集

Active Recordは個人的な好みですが、入力が自動的にエスケープされるため、初心者にとってははるかに簡単で安全だと思います。そうです、codeigniters ARは実際のActiveRecordの実装ではありませんが、ベアSQLよりも優れています。

全体として、コントローラー上のロジック、モデル上のデータベースの相互作用、およびビュー内のhtml(およびいくつかのマイナーな表示ロジック)を保持します。

于 2013-02-26T15:13:17.977 に答える