0

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

这是我的控制器:

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>

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

4

2 回答 2

0

错误就在这里

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

此方法获取数组作为第二个参数

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

也用这个方法

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

查看最近运行了哪些查询。并且不要忘记将 where 指令与 update 指令一起使用。再次阅读用户指南,非常有帮助

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

于 2012-11-12T07:04:02.300 回答
0

Marishka 在继续这个过程之前,你真的真的需要看我给你的那些教程。您将达到应用程序严重混乱以至于几乎不可能修复的地步。

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

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

  1. 您正在创建一个 $newRow 数组,使用您没有获得的 post 值,因为您没有发布任何内容。在视图中创建变量并不会自动将其回传,要将数据发布到控制器,它需要在表单中,并且该表单需要有一个动作来调用控制器函数。

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

  3. 在您将 $newRow 传递给您的模型中,您实际上从未真正将 $newRow 放入函数中。

  4. 这与它不起作用无关,但您是根据安全答案更新哪个记录?许多用户有相同答案的可能性使这是一个可怕的想法。

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

    $this->db->update ($tableToUpdate, $arrayOfValuesToUpdate);

值数组是键对,因此对于密码,您将拥有一个如下所示的数组:

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

我真的感觉到您正在尝试从各种示例和教程中学习 CI,您确实需要停下来看看我之前从第一步开始链接的 nettuts 教程。您的做法很糟糕,而且您对自己实际所做的事情的理解程度很低,以至于您只是在复制和粘贴,而没有得到应该实际发生的事情。Nettuts 教程将为您提供正确执行这些操作所需的基本理解。

于 2012-11-12T12:58:32.113 回答