Codeigniter:一次从一个表移动一行到另一个表

时间:2017-11-16 09:22:05

标签: php mysql codeigniter

我有点被困在这里!我必须有两个表free_membersdomstic_members,我需要将选定的行从free_members表移动到domestic_members表。为什么我说选择的行是因为我在free_members表的每一行的末尾都有一个升级选项,它会将该行移动到domestic_members表。我有代码,但它不按我想要的方式工作。现在发生的事情就是当我点击升级选项时,它只复制整个表记录并将其发送到另一个表。这是代码

控制器

function upgradeprofile() {
    //  $this->load->database();
    $this->load->model('freemember_model');

    $this->freemember_model->upgrade();
}

模型

function upgrade() {
    $query = $this->db->get('free_members');
    foreach ($query->result() as $row) {
        $this->db->where('id', $member_id);
        $this->db->insert('domestic_members', $row);
    }
}

查看

<center>  Search Member:
                    <input type="text" name ='search' id='search' placeholder="Search a member"/></center>
                    <input type="hidden" name ='limit_from' id='limit_from'/>
                    </form>
<br><center><button type="button" onclick="CallPrint1('background12')">Print</button>
                <div id="background12" class="box-body">
                  <table id="example1" class="table table-bordered table-striped">
                    <thead>
                      <tr>
                        <th>Sr#</th>
                        <th><center>Full Name</th>


                        <th><center>Mobile Number</th>
                         <th><center>Membership# / CNIC</th>
                        <th><center>Email Address</th>

                        <th><center>Province</th>
                        <th><center>District</th>
                        <th><center>Tehsil</th>
                        <th><center>Union Council</th>
<?php /*?>  <?php if($sessiondata['deletemembers']):?><?php */?>
     <?php if($sessiondata['username'] != 'bilal.sabir'):?>
                        <th><center>Delete</th>
  <?php endif;?>

    <?php /*?><?php if($sessiondata['data_modification'] && $sessiondata['username'] != 'bilal.sabir' ):?><?php */?>
         <?php if($sessiondata['username'] != 'bilal.sabir'):?>
                        <th><center>Print</th>
                        <th><center>Edit</th>
                        <th><center>Change Pwd</th>
                        <th><center>Upgrade</th>
    <?php endif;?>


                      </tr>
                    </thead>
                    <tbody>
                    <?php $sr=0;?>
                      <?php foreach ($freemembers as $member): ?>
<tr><td><center><?php echo $sr+=1; ?></td><td><center><?php echo $member->first_name; ?></td>
<td><center><?php echo $member->mobile; ?></td><td><center><?php echo $member->cnic; ?></td>
<td><center><?php echo $member->email; ?></td>
<td><center><?php echo $member->province; ?></td><td><center><?php echo $member->district; ?></td><td><center><?php echo $member->tehsil; ?></td><td><center><?php echo $member->uc; ?></td>
<?php /*?> <?php if($sessiondata['deletemembers']):?><?php */?>
     <?php if($sessiondata['username'] != 'bilal.sabir'):?>

<td><center><a href="<?php echo base_url() . "index.php/admin/deletefreemember/" . $member->id; ?>">delete</a></td>
<?php endif;?>
  <?php /*?><?php if($sessiondata['data_modification'] && $sessiondata['username'] != 'bilal.sabir' ):?><?php */?>
       <?php if($sessiondata['username'] != 'bilal.sabir'):?>
<td><center><a href="<?php echo base_url() . "index.php/admin/printcardfree/" . $member->id; ?>">print</a></td>

<td><center><a href="<?php echo base_url() . "index.php/admin/editprofilefree/" . $member->id; ?>">edit</a></td>
<td><center><a href="<?php echo base_url() . "index.php/admin/changepasswordfree/" . $member->id; ?>">change pwd</a></td>
<td><center><a href="<?php echo base_url() . "index.php/admin/upgradeprofile/" . $member->id; ?>">Upgrade</a></td>
<?php endif;?>
</tr>
<?php endforeach; ?>
                    </tbody>
                  </table>

这是我的表free_members的视图

enter image description here

2 个答案:

答案 0 :(得分:0)

我不熟悉Codeigniter,但MySQL语法应该是这样的:

INSERT INTO table1 (table1.row1, table1.row2) SELECT table2.row1, table2.row2 FROM table2 WHERE PUT_YOUR_CONDITION_IF_NEEDED

我找到了Codeigniter的 this

答案 1 :(得分:0)

根据你的观点,你有这个......

index.php/admin/upgradeprofile/" . $member->id

因此,如果$ member-&gt; id = 100,则网址将为

index.php/admin/upgradeprofile/100

所以你传递的是模型代码中提到的member_id,但你没有得到它,也没有正确使用where。

所以你需要掌握member_id ......

这是一个解决方案/想法...这取决于您提供正确验证的整数...您需要始终检查/验证您的输入......

<强>控制器

function upgradeprofile($member_id) {
    // Need to check that $member_id is an integer
    // To be added by the OP

    $this->load->model('freemember_model');

    // $member_id is passed in via the URL.
    $this->freemember_model->upgrade($member_id); 
}

<强>模型

function upgrade() {
    // Which member do we want to get from the free_members Table?
    $this->db->where('id', $member_id);
    $query = $this->db->get('free_members');
    // Did we get a result? i.e was a valid member id passed in?
    if($query !== false) {
        $row = $query->row();
        $this->db->insert('domestic_members', $row);
    } else {
       // Do nothing or handle the case where an illegal number was used...
    }
}

注意:此代码未经过测试,仅用作指南。 它可以通过多种方式进行重构,但我现在试着保持简单。

所以,请不要只是复制并粘贴这个,至少&#34;思考&#34;关于你想要做什么以及如何编写代码来实现它。

这里的要点是...... 1.您必须使用某种成员ID,以便可以检索免费成员的记录,以便将其插入到另一个表中。 2.您提供此&#34;会员ID&#34;在网址中,你需要提取它。 3.您可以通过将其设置为被调用方法中的参数来执行此操作...或者您可以使用段(查找它)。

所以一旦你有了会员ID,就可以获取免费会员条目并将其插入到另一个表中但是你想要在免费会员表中输入什么,因为那仍然会在那里,现在你有两份相同的信息......删除吗?

如果您需要进一步解释,请询问。

最后一点。 你应该确保你完全明白你在做什么而不仅仅是因为有人说或你认为这是一个好主意......有一个好理由并想到其含义...