2017-04-27 154 views
1

我是Codeigniter和PHP的新手,我试图制作一个选择表单,我可以使用提交按钮删除数据库中的考试。Codeigniter从选择下拉列表中删除数据库数据

这些代码行我有:

视图(examselect_view.php)

<form name='selectexam' action="<?php echo base_url() . "index.php/exam/removeExam/" . $exams->exam_id; ?>" method='post'> 
    <select class="form-control"> 
     <?php 
     foreach($exams as $row) 
     { 
      echo '<option value="'.$row->exam_id.'">'.$row->examname.'</option>'; 
     } 
     ?> 
    </select> 
    <input type="submit" name="delete" value="Verwijderen" class="btn btn-info" /> 
</form> 

控制器(Exam.php)

function removeExam($id) { 
// uri segment 3 = index.php/exam/examName/NUMBER OF ID 
$id = $this->uri->segment(3); 
$this->exam_model->removeExam($exam_id); 
} 

模型(Exam_model.php)

function removeExam($id){ 
$this->db->where('exam_id', $id); 
$this->db->delete('exam'); 
} 

这是th错误我从我的观点来看。

Message: Trying to get property of non-object 

我知道问题出在表单动作的某个地方。但我不知道如何改变它。

+0

'$ exam_id'在控制器中未定义。它''ID' – Saty

+1

我猜它是抱怨'$考试 - > exam_id;'在你的表单动作。 $考试是一系列考试对象? –

+0

你应该通过帖子传递id并将其捕获到那里。并且在做任何事之前还要检查是否发布了某些内容。如果您希望像您一样进行操作,只需转到正确的网址即可删除任何人。例如, –

回答

0

我现在无法测试此功能。但是,应该沿用这个方法。

在您看来,有以下形式:

<form name='selectexam' action="<?php echo base_url() . "index.php/exam/remove/";?>" method='post'> 
    <select class="form-control" name="exam_id"> 
     <?php 
     foreach($exams as $row) 
     { 
      echo '<option value="' . $row->exam_id . '">' . $row->examname . '</option>'; 
     } 
     ?> 
    </select> 
    <input type="submit" name="delete" value="Verwijderen" class="btn btn-info" /> 
</form> 

在你的控制器:

function remove() { 

    if($_SERVER['REQUEST_METHOD'] == 'POST'){ 
     $exam_id = $_POST['exam_id']; 
     $this->exam_model->removeExam($exam_id); 

     redirect('/exam/'); 
    } 
} 

作为一般规则,从来没有只根据URL的破坏性变化。如果您不小心,网站索引机器人(例如google)可能会意外删除所有考试。

+0

不要忘记将'name =“exam_id”'添加到'select'-element,否则它不会被发布。目前,表单实际上并未发布任何数据。 –

+0

@MagnusEriksson感谢您的检查。可能有点匆忙的答案。 –

+1

Ingen orsak。 :-) –

0

你有问题<?php echo base_url() . "index.php/exam/removeExam/" . $exams->exam_id; ?>可能是你的$exams是数组不是对象。

相关问题