Codeigniter 表单结果作为另一个表单输入值。第二个表格没有做它应该做的事情

Posted

技术标签:

【中文标题】Codeigniter 表单结果作为另一个表单输入值。第二个表格没有做它应该做的事情【英文标题】:Codeigniter Form result as another form input value. The second Form is not doing what it should do 【发布时间】:2015-12-15 07:54:16 【问题描述】:

我创建了一个页面,用户可以在其中从表(表数据)中搜索数据,然后将搜索结果输入到另一个表(表 XY)中。我想要实现的是当搜索结果出现时,它出现在另一个表单中,当提交第二个表单时,数据被插入到表 XY 中。但是到目前为止我所做的只能达到第一个目标,即从表Data中搜索数据。当验证运行 False 时,错误似乎完成了表单,但是当验证运行 True 时,当我稍后检查时,数据不在表 XY 中。没有错误通知。我不知道我哪里做错了。这是我的代码: 控制器数据.php

public function index()
 $this->load->view('form');

public function search_xy()
 $this->form_validation->set_rules('id', 'ID', 'required|numeric|exact_length[16]');
  if($this->form_validation->run() == false) 
   $this->index();
   else 
   $this->m_data->search_xy();
   $this->index();
  


public function insert_xy()
 $this->form_validation->set_rules('id', 'ID', 'required');
 $this->form_validation->set_rules('xname', 'X Name', 'required|alphanumeric');
 $this->form_validation->set_rules('yname', 'Y Name', 'required|alphanumeric');
 $this->form_validation->set_rules('xage', 'X Age', 'required');
 $this->form_validation->set_rules('yage', 'Y Age', 'required');
 $this->form_validation->set_rules('children', 'Children', 'required|numeric');
  if($this->form_validation->run() == false) 
   $this->index();
   else 
   $this->m_xy->insert_xy();
   $this->session->set_flashdata('message', '<div class="alert alert-success" data-dismiss="alert">Insert Data to XY Table Success!</div>');
   $this->index();
  

模型 m_data.php:

public function search_pus()
 $id = $this->input->post('id');
 $this->db->empty_table('searched', TRUE);
 $this->db->query("INSERT INTO 'searched' SELECT a.id, a.name as xname, a.age as xage, b.name as yname, b.age as yage FROM searched a, searched b WHERE a.gender = 1 AND b.gender = 2 AND a.id = '$id' AND b.id = '$id'");
  return $this->db->query("SELECT * FROM searched")->result_array();

模型 m_xy.php:

public function insert_xy()
 $data = array(
  'id' => $this->input->post('id'),
  'xname' => $this->input->post('xname'),
  'yname' => $this->input->post('yname'),
  'xage' => $this->input->post('xage'),
  'yage' => $this->input->post('yage'),
  'children' => $this->input->post('children'));

  $this->db->insert('XY', $data);

查看form.php:

<?php $attributes = array("class" => "form-inline"); echo form_open('data/search_xy', $attributes);?>
 <fieldset>
  <div class="form-group">
   <label class="control-label" for="id">Enter ID :</label>
     <input type="text" name="id" class="form-control" id="id" value="<?php echo set_value('id'); ?>" />
     <button class="btn btn-info btn-md" type="submit"> Search </button><span class="text-danger"><?php echo form_error('id');?></span>
  </div>
 </fieldset>
<?php echo form_close(); ?>

<?php echo form_open('data/insert_xy'); ?>
 <fieldset>
  <div class="form-group">
   <h4 class="text-left text-primary">Search Result:</h4>
    <table style="font-size:11px;" class="table table-condense table-bordered table-hover display" cellspacing="0" >
     <thead>
      <tr class="primary">
       <th></th>
       <th>X Name</th>
       <th>Y Name</th>
       <th>X age</th>
       <th>Y age</th>
      </tr>
     </thead>
     <tbody>
      <?php foreach($search_result as $row): ?>
       <tr>
        <td><input type="checkbox"  class="form-control" name="no_kk" id="no_kk" value="<?php echo $row['no_kk'];?>" /></td>
        <td><input class="form-control" name="xname" value="<?php echo $row['xname'];?>" /></td>
        <td><input class="form-control" name="yname" value="<?php echo $row['yname'];?>" /></td>
        <td><input class="form-control" name="xage" value="<?php echo $row['xage'];?>" /></td>
        <td><input class="form-control" name="yage" value="<?php echo $row['yage'];?>" /></td>
       </tr>
      <?php endforeach ?>
     </tbody>
    </table>
    <div class="col-md-3">
     <select class="form-control" name="children" value="<?php echo set_value('children');?>">
      <option value="">-- How Many Children? --</option>
      <option value="0">0</option>
      <option value="1">1</option>
      <option value="2">2</option>
      <option value=">3">3 or more</option>
     </select>
     <span class="text-danger"><?php echo form_error('children'); ?></span>
    </div>
    <div class="col-md-3">
     <input class="btn btn-primary btn-md" type="submit" value="Save" />
    </div>
   </div>
  </fieldset>
 <?php echo form_close() ?>

这是视图打印屏幕,以防您不明白我的意思:

当我点击“保存到 XY”时,我希望将我检查的值插入到表 XY 中..

是因为表格在表格中吗?

【问题讨论】:

我不确定,但在您的第二种形式中,您有一个循环,您可以在其中循环具有相同名称的输入字段。你应该使用&lt;input name="xname[]" value="..."&gt;。而当你想将它在 php 中插入到 db 中时,你必须遍历你的输入帖子,以获取它们的值。 @Iamzozo 嗯,我以前没想过。谢谢,我会搜索这个。 【参考方案1】:

试试这个...

控制器:-

公共函数索引()

$data = array();

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

if($id!='')

    $data = $this->m_data->search_xy();



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

公共函数 insert_xy()

$this->form_validation->set_rules('id', 'ID', 'required');

$this->form_validation->set_rules('xname', 'X Name', 'required|alphanumeric');

$this->form_validation->set_rules('yname', 'Y Name', 'required|alphanumeric');

$this->form_validation->set_rules('xage', 'X Age', 'required');

$this->form_validation->set_rules('yage', 'Y Age', 'required');

$this->form_validation->set_rules('children', 'Children', 'required|numeric');

if($this->form_validation->run() == false) 

    redirect('data');

 else 

    $this->m_xy->insert_xy();

    $this->session->set_flashdata('message', '<div class="alert alert-success" data-dismiss="alert">Insert Data to XY Table Success!</div>');

    redirect('data');
 

查看:-

改变 echo form_open('data', $attributes);搜索表单

【讨论】:

抱歉回复晚了。实际上,我对第二种形式(insert_xy)而不是第一种形式(search_xy)的输入值有疑问。但是从你的代码来看,我认为你只是在索引函数中调用了一个搜索函数模型。所以它不会改变任何东西。无论如何谢谢:)。

以上是关于Codeigniter 表单结果作为另一个表单输入值。第二个表格没有做它应该做的事情的主要内容,如果未能解决你的问题,请参考以下文章

使用 codeigniter 将具有相同输入名称的表单输入插入数据库行

如何在codeigniter中包含嵌套表单

来自表单输入的 CodeIgniter 重定向

bootstrap codeigniter 表单输入和提交按钮

Codeigniter:如何构建使用表单验证和重新填充的编辑表单?

codeigniter 表单验证和数组作为字段名称