我有一个应用程序,我可以编辑数据库表的字段。一切都很好,数据更新,除非我去我想要更新的字段,而不是更改文本,将字段设置为空白。以这种方式我得到PHP错误,因为(我猜)我的控制器的方法失去了该行的那一行的id:
如果有人能帮助我,我会很高兴,谢谢你。
我使用方法获取的视图文件的一部分传递表行的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']." <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');
}
}
Fuga模型:
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;
}
答案 0 :(得分:0)
首先,你做的事情完全错了。
您应该阅读一些有关MVC的教程。
您绝不应该在视图文件中执行数据库操作。 您应该首先阅读优秀的codeigniter用户指南和一些关于MVC真正的通用文章:维基百科的示例是here
您还应该查看codeigniter上的活动记录,以便您可以使用而不是->query()
,这是强烈劝阻的,并且只应在少数情况下使用,这些情况下存在一些无法完成的非常复杂的查询与AR。
*在发表评论后进行修改
活动记录是个人偏好,但我相信新手使用它会更容易,更安全,因为输入会自动转义。是的codeigniters AR不是实际的Active Record实现,但它仍然比裸露更好SQL。
总而言之,您的逻辑在控制器上,您的模型上的数据库交互以及您视图中的html(以及一些次要查看逻辑)。
答案 1 :(得分: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的内容,因为你有点搞乱了