2014-05-19 3 views
0

아래 함수는 PDO를 사용하여 db에 동적으로 양식 데이터를 삽입하기 위해 양식 이름과 값 attr을 가져 와서 PDO 삽입 문에서 cols와 bindValues를 채 웁니다. 지금 내가 가진 문제는 다음과 같습니다.DB에 동적으로 삽입 할 때 시간과 날짜 삽입 방법

삽입하기 전에 암호를 해시하고 동시에 시간과 날짜를 삽입하고 싶습니다.

public function reg_user($data) { 
      if($_SERVER['REQUEST_METHOD'] == 'POST'){ 
       $dataDB = array(); 
       foreach ($_POST as $k => $v) { 
        if (in_array($k,$this->valid_keys)) { 
        $dataDB[$k] = $v; 
        } 
       } 
     $this->cols = '`'.implode('`, `', array_keys($dataDB)).'`' ; 
     $this->values = ':' . implode(", :", array_keys($dataDB)); 
     $db = new db; 
       try{ 
        $stmt = $db->dbh->prepare ("INSERT INTO $this->table ($this->cols) VALUES ($this->values)"); 
        foreach ($dataDB as $k => $v) { 
          $stmt -> bindValue(':'.$k, $v); 
       } 
    $stmt->execute(); 
} catch (PDOException $e) { 
    $error = new Errors(); 
    echo "<b>".$error->displayError($e)."</b>"; 
} 

} 
} 

나는이

foreach ($_POST as $k => $v) { 
        if (in_array($k,$this->valid_keys)) { 
        if($k == 'password'){ 
         $v = password_hash($v , PASSWORD_DEFAULT); 
        } 
        $dataDB[$k] = $v; 
        } 
       } 

에있는 foreach 루프를 수정하지만, 난 여전히 일반 암호는 데이터베이스에 삽입 얻을. 루프 검사에서

답변

2
(후 자동으로 해당 행에 날짜와 시간을 추가합니다) 아래

foreach ($_POST as $k => $v) { 

    if (in_array($k,$this->valid_keys)) { 
    $dataDB[$k] = ($k=="password")?md5($v):$v; 
    } 
} 
//here add the date to the array like below 

$dataDB["datetime"]=date('d-m-y H:i:s'); 

처럼 해시 또는 테이블에 timestamp과 날짜 열을 만드는 경우

이 MySQL인가요? 뭔가하지 않고 그것을 할 수있는 몇 가지 방법이 있습니다 그렇다면 코드 기반 : 루프에서 암호를 해싱의 관점에서

http://www.w3schools.com/sql/func_now.asp

http://www.kbedell.com/writing-projects/

이 암호의 키 생성 특별한 경우를 수신 여기서 삽입 값을 해시 된 값으로 설정합니다. 어쩌면 모든 "값"을 전달하는 일반적인 "깨끗한"방법을 만들 수 있습니다. 최소한이 "깨끗한"기능은 악의적 인 주입 코드에 대한 모든 삽입 데이터를 피할 수 있으며 삽입 방법을 어지럽히 지 않고 특수한 경우 변환을 수행 할 수도 있습니다 당신이 보여 당신 거의 동일 보이는 과거에

맹세
function clean($key, $val){ 
    if($key=="password") 
    { 
    $val = //hash pword here 
    } 
    return addslashes($val); //using addslashes as basic example 
} 

, 내가 작성한 코드 :

> foreach ($_POST as $k => $v) { 
>     if (in_array($k,$this->valid_keys)) { 
>      $dataDB[$k] = clean($k, $v); 
>     } 
>     } 

청소 같은 것을 볼 수 있었다. 꽤 좋은 접근 방법입니다. 당신은 암호 하나와 같은 열쇠 당 특별 케이스 문제를 쳤습니다. 따라서 날짜 같은 것들을 자동화하는 것이 도움이 될 수 있습니다.

또는 각 레코드를 삽입 할 때 Now()를 사용할 수 있습니다. 조금 덜 우아하고 이러한 ORM-ish 삽입물에서는 실제로 작동하지 않습니다.

다른 접근 방식이 비슷한 접근법을 가지고 있지 않다면 postgres의 예제는 w3schools 메소드와 매우 유사합니다.

1

키 암호가 다음