将输入名称(来自数据库)从视图传递到控制器

时间:2014-03-28 08:12:37

标签: php codeigniter

我正在尝试学习codeigniter,我做的第一件事是制作简单的添加编辑删除功能......

我无法调用控制器的输入按钮名称来删除整行表格。

模型

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Delete_model extends CI_Model{
  public function delete($data){
    $this->db->delete('record_tbl', $data);
  }
}

控制器

class Delete_controller extends CI_Controller {
  public function index()
  {
    $this->delete();
  }

  public function delete()
  {
    $data = array();
    $this->load->model('fetch');
    $query = $this->fetch->getData();
    if ($query)
    {
      $data['results'] = $query;
    }

    $this->load->view('delete', $data);
  }

  public function delete_data(){
    $this->load->model('delete_model');
    $where = $this->input->get('id');
    $data['id'] = $where;
    $this->delete_model->delete($data);
    redirect('');
  }
}

视图

<table border="1" width="100%">
  <tr>
    <th>Name</th>
    <th>Address</th>
    <th>Phone Number</th>
    <th>Status</th>
    <th></th>
  </tr>
  <?php foreach($results as $row) { ?>
  <tr>
  <td><?=$row->name?></td>
  <td><?=$row->addr?></td>
  <td><?=$row->pnum?></td>
  <td><?=$row->status?></td>
  <?php echo form_open('delete_controller/delete_data') ?>
  <td style="text-align: center"><input name="<?=$row->id?>" type="submit" value="delete"></input>
  </form>
  </td>
  </tr>
<?php } ?>
</table>

3 个答案:

答案 0 :(得分:1)

您的表单将执行POST而不是GET请求。所以而不是做

$where = $this->input->get('id');

你想做

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

另外,为什么不将$row->id的值传递给控制器​​,以便了解要定位的输入字段。所以在你看来做

<?php echo form_open('delete_controller/delete_data/' . $row->id) ?>

然后在您的控制器中

public function delete_data($id){
    $this->load->model('delete_model');
    $where = $this->input->post($id);
    //...

答案 1 :(得分:0)

这将是$this->input->post ('id'),就像@Pattle所说的那样,你正在使用表单的“name”属性作为ID。我通常做的是使用名为“id”的隐藏字段(请参阅CI文档中的form_hidden()帮助程序)和您想要的值($ row-&gt; id)。

<?php echo form_hidden ('id', $row->id); ?>

答案 2 :(得分:0)

而不是$this->input->get('id');使用$this->input->post('id');

为简化起见:我可能建议使用<button></button>作为删除功能等控制按钮(它也适用于编辑/更新FYI)。

因为您可以将属性添加到按钮value = $idname=delete。只需添加<input type='submit'>

属性即可type='submit'

所以

查看

<table border="1" width="100%">
  <tr>
    <th>Name</th>
    <th>Address</th>
    <th>Phone Number</th>
    <th>Status</th>
    <th></th>
  </tr>
  <?php foreach($results as $row) { ?>
  <tr>
  <td><?=$row->name?></td>
  <td><?=$row->addr?></td>
  <td><?=$row->pnum?></td>
  <td><?=$row->status?></td>
  <?php echo form_open('delete_controller/delete_data') ?>
  <td style="text-align: center">
  <?php
     echo "<button type='submit' name='delete' value='" . $row->id . "'>" ;
     echo "DELETE" ;
     echo "</button>" ;
  ?>
  </form>
  </td>
  </tr>
<?php } ?>
</table>

然后获取要删除的行的id非常简单。只需在您的控制器$id = $_POST['delete'];$id = $this->input->post('delete');

中执行此操作即可