使用codeigniter更新mysql中的行

时间:2012-11-12 07:00:11

标签: php mysql codeigniter

如此。我一直在尝试更新密码。随机生成。但。如果我刷新数据库,没有任何反应。我的代码出了什么问题?

这是我的控制者:

function create_password()
{
    $this->load->model('members_model');

    $newRow = array(
        'name' => $this->input->post($a);
        'value' => 
    );
    $this->membership_model->passchange($newRow);
}

这是我的模特:

function passchange()
{
$this->db->select();
$this->db->from('membership');
$this->db->where('security_answer',$this->session->userdata('security_answer'));

$q=$this->db->get();

if($q->num_rows() > 0) {
$data = array();
foreach($q->result() as $row) {

    $data['result']=$row;

    $this->db->where('email_address', $this->session->userdata('email_address'));
    $this->db->update('membership', 'password');
}

return $data;
}

}

这是我的观点:

<?php echo form_open('login/create_password')?>
<?php $this->load->view('includes/header');
$CI =& get_instance();
$CI->load->model('membership_model');
$result = $CI->membership_model->passchange();
foreach($result as $row) {

    }
?>

Your Email Address is: &nbsp; <?php echo $row->email_address;?> <br/>
<?php
$a = random_string('alnum', 6);
?> 

Your password is: &nbsp; <?php echo $a; "<br/>"?>

<p align="right"><?php echo anchor('login/signin', 'Back to Login Page'); ?></p>

我的数据库中的密码为空。它没有更新。请帮忙。先感谢您! :)

2 个答案:

答案 0 :(得分:0)

错误在于

$this->db->update('membership', 'password');

此方法将数组作为第二个参数

$data['password'] = $newpassword;
$this->db->update('membership',  $data);

也可以使用此方法

echo $this->db->last_query();

查看最近运行的查询。并且不要忘记使用更新指令的指令。再次阅读用户指南非常有帮助

https://www.codeigniter.com/userguide2/database/active_record.html

答案 1 :(得分:0)

Marishka你真的需要在继续这个过程之前观看我给你的那些教程。你将会发现你的应用程序如此混乱,几乎无法修复。

您在那里做的几乎所有事情都会显示不良做法,其中最重要的是停止加载CI实例并从视图中的模型中获取数据。

以下是您的代码存在的问题。

  1. 您正在使用您未获得的帖子值创建$ newRow数组,因为您没有发布任何内容。在视图中创建变量不会自动将其发回,将数据发布到需要在表单中的控制器,并且该表单需要具有调用控制器功能的操作。

  2. $ a不会等于任何东西,因为random_string不是我所知道的php函数,它看起来就像你刚刚从教程中间拉出来而没有阅读它是如何创建的,所以$ a将为null,即使它被发回给控制器,它仍然没有值插入数据库。

  3. 在你的模型中,你将$ newRow传递给你,实际上并没有将$ newRow传递给函数。

  4. 这与它无法正常工作有关,但你的基础是更新安全答案的记录?许多用户有相同答案的可能性使这成为一个可怕的想法。

  5. 如前所述,活动记录更新功能中的第二个参数应该是一个数组。因此,为了理解该功能正在做什么,它会像这样分解。

    $ this-&gt; db-&gt; update($ tableToUpdate,$ arrayOfValuesToUpdate);

  6. 值数组是密钥对,因此对于密码,您将拥有如下所示的数组:

    $arrayOfValuesToUpdate = array(
        'nameOfPasswordFieldInYourDB' => 'value you want to set the password to'
    );
    

    我真的感觉你正试图从各种示例和教程中学习CI,你真的需要停下来看一下我之前从第一步链接到你的nettuts教程。你的做法很糟糕,你对你实际做的事情的理解是足够低的,你只是复制和粘贴,而不是得到应该实际发生的事情。 Nettuts教程将为您提供正确完成这些工作所需的基本理解。