2017-12-10 2 views
0

저는 PHP에서 OOP를 처음 사용합니다. 부모 클래스의 루프에 의해 생성 된 배열의 항목 값을 업데이트하려고합니다. 내 코드에서 DatabaseObject 클래스는 모든 테이블 필드 이름과 값 쌍으로 특성 배열을 만듭니다. 배열의 내용은 데이터베이스에 쓸 SQL 쿼리를 만드는 데 사용됩니다. 내가 해결하려고하는 문제는 자식 사용자 클래스의 암호화 된 비밀번호로 속성 [ 'hashed_password'] 항목을 업데이트해야한다는 것입니다. 해시 된 비밀번호가 양식 제출을 통해 제공된 것이 아니라 데이터베이스에 제출되도록 배열 항목을 어떻게 업데이트 할 것인지 잘 모르겠습니다.하위 클래스의 부모 클래스에서 배열 항목 업데이트

class DatabaseObject { 

    public function create(){ 
    global $db; 

    static::$attributes = []; 
    foreach (static::$db_fields as $field) { 
    if(property_exists($this, $field)){ 
     $attributes[$field] = $this->$field; 
     } 
    } 

    $sql = "INSERT INTO " . static::$table_name . " ("; 
    $sql .= join(", ", array_keys($attributes)); 
    $sql .= ") VALUES ('"; 
    $sql .= join("', '", array_values($attributes)); 
    $sql .= "')"; 

    $result = mysqli_query($db, $sql) 
    } 
} 

class User extends DatabaseObject { 

    protected static $table_name="users"; 
    protected static $db_fields = array("user_id", "username", "hashed_password", "email"); 

    public $user_id; 
    public $username; 
    public $hashed_password; 
    public $email; 

    self::attributes['hashed_password'] = password_hash($this->attributes['hashed_password'], PASSWORD_BCRYPT); 
} 

어떤 도움을 주시면 감사하겠습니다.

+0

setPass() 메소드는 어떻습니까? – FatalError

답변

0

나를 위해 일한 해결책은이 해시 된 암호를 사용하여 배열을 사용자 개체에 함수를 만드는 수동으로 업데이트 오버라이드 (override) 단지, 그래서 새로운 사용자 개체가되었다 : 즉,을의 경우

class User extends DatabaseObject { 
    public function create(){ 
    global $db; 

static::$attributes = []; 
foreach (static::$db_fields as $field) { 
    if(property_exists($this, $field)){ 
    $attributes[$field] = $this->$field; 
    } 
} 

$attributes['hashed_password'] = password_hash($attributes['hashed_password'], PASSWORD_BCRYPT); 

$sql = "INSERT INTO " . static::$table_name . " ("; 
$sql .= join(", ", array_keys($attributes)); 
$sql .= ") VALUES ('"; 
$sql .= join("', '", array_values($attributes)); 
$sql .= "')"; 

$result = mysqli_query($db, $sql) 
} 
} 
} 

확실하지 않음 가장 효율적인 방법이지만, 효과가있었습니다.

관련 문제