【问题标题】:Codeigniter: Move one row from one table to another at one timeCodeigniter:一次将一行从一个表移动到另一个表
【发布时间】:2017-11-16 09:22:05
【问题描述】:

我有点卡在这里!我必须有两个表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 的视图

【问题讨论】:

  • 您的代码中的 $member_id 在哪里?
  • 好的,所以你得到了所有的免费成员......并将它们插入到另一个表中......这就是你的代码告诉它要做的事情。你在错误的地方有你的 WHERE。它应该是为了获得免费会员...但是 $member_id 在哪里 - 它将是 0。
  • @TimBrownlaw 我没有在我的代码中使用这个会员 ID!是的,它把我所有的记录都移到了另一张桌子上!!
  • @AnandPandey 先生,我没有使用这个 member_id!你能帮我解决这个问题吗?我可以在我的代码中哪里使用这个 member_id?
  • @Dawood:如果您想将所有免费会员插入国内会员而不需要此行,则您的代码错误。如果您想要一些选定的用户,则必须选择免费用户并插入国内用户。

标签: php mysql codeigniter


【解决方案1】:

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

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

所以如果 $member->id = 100 则 url 将是

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...
    }
}

注意:此代码未经测试,仅供参考。 它可以通过多种方式重构,但我现在尽量保持简单。

所以,请不要在没有至少“思考”您正在尝试做什么以及如何编写代码来实现它的情况下复制和粘贴此内容。

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

因此,一旦您拥有会员 ID,您就可以获取免费会员条目并将其插入到另一个表中,但是您希望免费会员表中的条目发生什么,因为它仍然存在,现在您有两个相同信息的副本...删除它?

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

最后一点。 您应该确保完全了解自己在做什么,而不仅仅是因为有人说或您认为这是一个好主意而这样做...有一个充分的理由并考虑其中的含义...

【讨论】:

  • 是的,先生!非常感谢您的建议!!我会记住这一点的!
【解决方案2】:

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

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

我为 Codeigniter 找到了 this

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-11-18
    • 2016-03-22
    • 1970-01-01
    • 2015-04-15
    • 1970-01-01
    • 1970-01-01
    • 2012-04-07
    相关资源
    最近更新 更多