0

我有一个应用程序,我可以在其中编辑数据库表的字段。一切都很好并且数据已更新,除非我转到我要更新的字段而不是更改文本,而是将该字段留空。这样我得到了 php 错误,因为(我猜)我的控制器的方法丢失了表中该行的 id:

如果有人可以帮助我,我会很高兴,在此先感谢。

我使用 get 方法传递表格行 (edit_fuga.php) 的 id 的视图文件的一部分。

 <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;

    ?>

而且因为你没有第二次传递 $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 不是实际的 Active Record 实现,但它仍然比裸 sql 更好。

总而言之,将您的逻辑保留在控制器上,将数据库交互保留在模型上,并将 html(以及一些次要的查看逻辑)保留在视图中。

于 2013-02-26T15:13:17.977 回答