1

MD5暗号化パスワードを更新するフォームがあります。プロセスのこの時点で、パスワードフィールドはランダムなトークンに更新され、リンクの一部として電子メールでユーザーに送信され、そのトークンを使用してアカウントを照合して更新します。

管理者とユーザーを別々のテーブルに分割したため、2つのテーブルをチェックする必要があります。次のSQLエラーが発生します。SQLとCodeIgniterはどちらも私にとってはかなり新しいものです。

SQLエラー:

Error Number: 1064

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'UNION UPDATE staff SET staff_password = '098f6bcd4621d373cade4e832627b4f6' WHERE' at line 1

UPDATE admin SET admin_password = '098f6bcd4621d373cade4e832627b4f6' WHERE admin_password = 'fd323219f98afd367fee9907173012db' UNION UPDATE staff SET staff_password = '098f6bcd4621d373cade4e832627b4f6' WHERE staff_password = 'fd323219f98afd367fee9907173012db'

モデルコード:

public function update_password() {
    $sql = "UPDATE admin SET admin_password = ? WHERE admin_password = ? UNION UPDATE staff SET staff_password = ? WHERE staff_password = ?";
    $password = $this->input->post('password');
    $token = $this->input->post('token');
    $query = $this->db->query($sql, array($password, $token, $password, $token));

    if($query->num_rows() == 1) {
        return true;
    } else {
        return false;
    }
}

トークンは、ビューの非表示フィールドとして設定されます。

<input type="hidden" name="token" value="<?php echo $token;?>" id="token">
4

2 に答える 2

3

テーブルは個別に更新できます。

$this->db->update('admin',array('admin_password'=>'098f6bcd4621d373cade4e832627b4f6'),'id = 123');
$this->db->update('staff',array('staff_password'=>'098f6bcd4621d373cade4e832627b4f6'),'id = 456');

メソッドチェーンを使用することもできます。

$this->db->where('id','123')->update('admin',array('admin_password'=>'newpass'));

tadmanが言ったように、パスワードよりもユーザーIDを確認する方がはるかに優れています。

https://www.codeigniter.com/userguide2/database/active_record.htmlをチェックしてください

そして将来の参考のために:https ://www.codeigniter.com/userguide2/libraries/encryption.html

于 2012-11-16T20:52:52.407 に答える
2

2つのテーブルを更新するときは、それらがどのように結合されるかを指定する必要があります。

UPDATE admin, staff
  SET admin_password=? staff_password=?
  WHERE admin_password=? AND staff_password = ?

通常staff.admin_id=admin.id、2つのテーブルが結合されていることを確認するようなものが表示されます。あなたがここでしていることは恐ろしいように見えます。2人が同じパスワードを持っている場合はどうなりますか?両方を変更します。

WHERE admin.id=?特定のレコードに焦点を合わせて更新する方がはるかに安全です。

于 2012-11-16T20:49:30.533 に答える