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

Marishka さん、このプロセスを続行する前に、私が提供したチュートリアルを実際に見る必要があります。アプリケーションがひどくめちゃくちゃになって、修正するのがほぼ不可能になるところまで到達しようとしています。

そこで行っていることのほとんどすべてが悪い習慣を示しており、特に CI インスタンスの読み込みを停止し、ビュー内のモデルからデータを取得することはできません。

現状のコードの問題は次のとおりです。

  1. 何も投稿していないため、取得していない投稿値を使用して $newRow の配列を作成しています。ビューで変数を作成しても、変数が自動的にポストバックされるわけではありません。コントローラーにデータをポストするには、データがフォーム内にある必要があり、そのフォームにはコントローラー関数を呼び出すアクションが必要です。

  2. random_string は私が知っている php 関数ではないため、$a は何にも等しくなりません。作成方法を読まずにチュートリアルの途中から抜け出したように見えるので、$a は次のようになります。コントローラーに戻されたとしても、データベースに挿入する値はありません。

  3. $newRow を渡すモデルでは、実際に $newRow を関数に取得することはありません。

  4. これは機能しないこととは関係ありませんが、セキュリティの回答に基づいて更新するレコードを基にしていますか? 多くのユーザーが同じ答えを持っている可能性があるため、これは恐ろしい考えです。

  5. 前に述べたように、アクティブ レコード更新関数の 2 番目のパラメーターは配列でなければなりません。その関数が何をしているのかを理解するには、次のように分解します。

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

値の配列はキー ペアであるため、パスワードの場合は次のような配列になります。

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

さまざまな例やチュートリアルから CI を学ぼうとしているように感じます。実際に停止して、前にリンクした nettuts チュートリアルをステップ 1 から確認する必要があります。あなたの実践はひどいものであり、実際に何をしているのかについてのあなたの理解は十分に低いため、コピーして貼り付けるだけで、実際に起こっているはずのことを理解していません. Nettuts のチュートリアルでは、これらのことを適切に行うために必要な基本的な理解が得られます。

于 2012-11-12T12:58:32.113 に答える
0

エラーはここにあります

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

このメソッドは、2 番目のパラメーターとして配列を取得します

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

こちらの方法もご利用ください

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

最近実行されたクエリを確認します。また、更新命令で where 命令を使用することを忘れないでください。ユーザーガイドをもう一度読んでください。とても役に立ちます。

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

于 2012-11-12T07:04:02.300 に答える