질문/조언질답게시판
Extra Form
PHP PHP 8.1
CMS Rhymix 2.x

Member의 Extra_vars의 특정 오브젝트를 쿼리로 직접 수정하고 싶은데..

어떻게 해야하죠?

 

$query = $oDB->_query('UPDATE rx_member SET...

이런 방식으로 실행시키고 싶은데.. extra_vars이 다 묶여있으니..

  • profile

    PHP에서 serialize하여 묶어놓은 것을 SQL에서 풀어서 조작할 수는 없습니다. 어떻게든 문자열을 쪼개고 붙이고 해서 조작하는 데 성공하더라도 코어에서 별도로 유지하고 있는 캐시를 갱신해 주지 않으면 소용없고요.

     

    PHP를 사용할 수 있다면 코어에서 제공하는 확장변수 업데이트 함수를 활용하는 것이 가장 편리하겠습니다. 아래의 코드는 라이믹스 2.0 기준입니다. 구버전은 일부 문법이 다르거나 함수가 제공되지 않을 수도 있습니다.

     

    // 변경할 확장변수가 여러 개인 경우 한꺼번에 지정할 수 있습니다.

    // 변경하지 않을 확장변수는 지정하지 않아도 됩니다. 기존 값이 그대로 유지됩니다.

    $updates = ['변수명1' => '값1', '변수명2' => '값2'];

    $oMemberController = MemberController::getInstance();

    $oMemberController->updateMemberExtraVars($member_srl, $updates);

  • profile profile

    아, 그렇군요 ㅠㅠ.. 함수를 통해서 시도를 했었는데.. 직접 접근을 하는 것이 아닌 이상 이상하게도 값이 변하지 않더라고요.(POST로 값을 전달하는거라) 그래서 쿼리로 직접 접근해서 업데이트 하려고 했던건데

  • profile profile
    $query = $oDB->_query 뭐시기 하는 코드를 실행하고 계시다면 이미 PHP에서 처리를 하고 계신 것이 분명하고, 라이믹스 코어에서 제공하는 클래스와 함수들도 모두 사용할 수 있는 환경인 것 같습니다. 그렇다면 그냥 위에서 알려드린 코드를 사용하시면 되겠네요.
  • profile profile
    설명드렸듯이 직접 접근하는 것이 아닌 간접 접근으로 실행할때 위에 함수로는 sql에 기록이 안되더라고요.
    그래서 다른 방식으로 그냥 접근을 해봤습니다. 암튼 감사합니다..!!
  • profile profile
    1. 간접접근이 뭔가요?

    2. 위의 updateMemberExtraVars 함수를 사용할때 파라미터의 member_srl 과 updates 변수값들이 정상적으로 잘 들어갔나요?

    3.
    $output = $oMemberController->updateMemberExtraVars($member_srl, $updates);

    이런식으로 $output 을받아서 $output에 디버깅 했을때 어떤 값이 나왔는지 아시나요?
  • profile
    외부에서 post를 통해서 값 보내고 조건에 맞으면 쿼리 실행시키는 방식이에요. 그렇게 결과 값을 받는거고요. 그래서 간접접근이라 한거예요. 직접 접근은 페이지 직접 접속해서 실행하는 건데 이렇게하면 모두 문제없이 잘 작동해요.
  • profile profile
    외부에서 POST보내는 경우 CSRF관련 보안취약점이 발생하여 일부 액션값을 막는 경우가 있습니다.

    그냥 단순히 PHP파일을 호출하는 경우라면 모르겟지만 act값을 proc로 시작하는 특정 모듈을 실해하는 상황이라면 해당 부분의 csrf관련 설정을 알아보세요.

    관련 부분은 https://github.com/bjrambo/nurigo/blob/master/modules/inipaystandard/conf/module.xml#L12 이런코드들을 확인해보세요
  • profile profile
    감사합니다.