질문/조언질답게시판

회원정보에 사용자정의 필드를 aaa 라고 만들고, 

 

레이아웃에  클래스가 bbb 라는 버튼을 만들고

 

로그인한 회원이 이 bbb라는 버튼을 클릭하면 이 회원의 회원정보의 aaa 필드의 값을 bbb로 저장 할 수 있을까요?

 

 

어려운부분은..

최종으로 저장하는 부분입니다. ㅠㅠ

 

 

 

  • profile

    멤버 업데이트를 쿼리하여 사용자정의값을 바꾸어 주면 될것 같습니다.
    특정 버튼을 클릭시 현재 로그인한 회원의 정보를 변경하는 식으로요

    회원 개인별 설정 (레아어웃 컬러 나 언어등) 을 저장하기 위함이 아닌가 싶습니다.
    개인화 옵션이 많거나 혹은 추가될 예정이라면 별도의 테이블에서 member_srl값을 참조하여
    설정값들을 저장하는 방식은 어떨까 싶습니다.


    만약 bbb클레스의 버튼을 눌렀을때 bbb의 클레스명이나 value등을 디비에 쿼리한다면 사용자(클라이언트) 측에서 디비에 쿼리하는 내용을 변조 가능하게 됩니다.

    따라서 쿼리되는 값은 반드시 관리자가 미리 지정한 범위내에서 이루어져야 되며 사용자측에서 F12(개발자도구) 혹은 패킷변조 프로그램등을 활용하지 못하도록 처리해야 될것 같습니다.


    질문주신 부분은 모듈화 하여 관리하거나 혹은 직접쿼리 하는 방식등 여러 방법으로 구현은 가능하겠지만 디비에 직접 영향을 미치는 작업인만큼 예상치 못한 중대한 위험요소를 피하기 위해서는 쿼리의 작동구조나 기본 보안지식이 없는 상태라면 작업의뢰 등을 통하여 제작하시는 편을 추천합니다.

     

     

    혹은 특정 기기(사용자)에 대해서 사용자 개인화 옵션을 주고 싶다면 멤버테이블이나 별도의 테이블에 설정값을 기록하는것 보다 쿠키 등의 브라우저단에서 지원하는 방법을 활용하는것도 좋아보입니다.

  • profile ?
    우와 답변 너무 감사드립니다!

    쿠키로는 가능하지만 다른 디바이스에서 로그인하면 다시 설정해야하는 문제가 있어서 멤버 테이블에 저장하고싶었습니다.
    설명해주신데로 좀 더 보안에 신경을 써야할것 같긴합니다.

    그전에 구현이 가능해야 보안을 신경쓸텐데 그부분이 어려워 질문드렸습니다. ㅠ

    "멤버 업데이트를 쿼리하여 사용자정의값을 바꾸어 주면 될것 같습니다.
    특정 버튼을 클릭시 현재 로그인한 회원의 정보를 변경하는 식"
    문장 이해는 가지만.. 어떻게 해야하는지..ㅠ 참고할만한 링크라도 있을까요..
  • profile

    관리자 권한 등 위험한 부분을 조작할 가능성을 최소화하기 위해서는 DB 쿼리를 직접 실행하시지 말고 MemberController의 updateMemberExtraVars 함수를 사용하시는 것을 추천합니다. 라이믹스에서만 지원되는 함수인데, 회원정보를 통째로 업데이트할 필요 없이 개별 확장변수만 쉽게 업데이트할 수 있습니다. 또한 확장변수 외에는 절대 건드리지 않습니다.

     

    $updateVars = new stdClass;

    $updateVars->업데이트할_확장변수명 = 새로운값;

    $oMemberController = getController('member');

    $oMemberController->updateMemberExtraVars($해당회원의member_srl값, $updateVars);

     

    이 코드를 어디서 실행하는지가 관건인데요.

     

    $('.버튼').on('click', function() {

        exec_json('모듈.액션명', { 전달할 데이터 });

    });

     

    모듈이라면 이런 식으로 AJAX 처리하는 것이 정석입니다만, 레이아웃은 모듈이나 액션명이 따로 없지요...

     

    아마 URL에 특정한 변수를 추가하여 백그라운드에서 새로고침하고, 해당 변수가 있으면 레이아웃에서 확장변수를 업데이트하도록 코딩하셔야 할 것 같습니다.

  • profile ?
    와..정말 다 알려주신거 같은데 ㅠ 쉽지않네요

    "새로운값" 은 클릭을 해야 가져올 수 있는 값인데 .. 자바스크립트 변수를 가져오면 되나요?
    만약 회원정보 스킨에서 하려면 모듈이랑 액션명이 어떻게 될까요?
    "전달할 데이터"는 위에 새로운 값과는 다른건가요?

    쉽지 않네요 ㅠ
  • ? profile

    실제로 디비에 저장되는 값은 자바스크립트 혹은 jquery 등의 변수등을 참고하면 안됩니다.

    작동에는 지장이 없겠지만... 사용자가 변조가능한 값을 디비에 넣는다는것은 해킹하는 길을 열어주는 꼴이 됩니다.

    (물론 직접쿼리가 아닌 xe or rx의 모듈을 경유하는 경우에는 이상한 요청은 자동으로 거부할겁니다.)

    사용자가 선택한 값에 따라서 디비에 저장될때는 php(서버) 단에서 분기처리하게 해줘야 됩니다.


    아래 댓글로 예시를 작성해드렸습니다. 아마도 아래같은 형태를 원하시는듯 합니다.

    만약 사용자가 직접 입력하는 값이 디비에 저장되게 하려면 필터를 활용하여 디비에 지장을 줄만한 문자는 모두 제거하도록 처리하셔야 됩니다.

  • profile

    회원설정의 사용자정의에 입력항목ID를 color 로 만들어줍니다.

     

    1.png

     

     

     

     

    레이아웃에서 원하는 위치에 아래 코드를 삽입합니다.

    ※딱 작동만 가능한 예시이니 디자인등은 직접 하시길...

     

    <form cond="$logged_info" method="post" action="">
    // 셀렉트 태그의 이름을 ThemeSelect로 지정
    <select name="ThemeSelect">
        <option value="">테마선택</option>
        <option value="white">화이트</option>
        <option value="dark">다크</option>
        <option value="pink">핑크</option>
    </select>
    <button type="submit">적용</button>
    </form>
    
    
    <block cond="$ThemeSelect">
    {@
    // ThemeSelect의 값이 dark일 경우
    if ( $ThemeSelect == "dark" ) :
    // Theme변수에 dark 라는 값을 지정
      $Theme = "dark";
    // ThemeSelect의 값이 pink일 경우
    elseif ( $ThemeSelect == "pink" ) :
    // Theme변수에 pink 라는 값을 지정
      $Theme = "pink";
    // ThemeSelect의 값이 white일 경우 (혹은 그외 모든 경우)
    else :
    // Theme변수에 white 라는 값을 지정
      $Theme = "white";
    endif; 
    
    // Value라는 배열을 생성하고 color(사용자정의명)에 위의 $Theme를 대입
    $Values = array("color" => $Theme);
    // member 컨트롤러를 불러온다
    $oMemberController = getController('member');
    // member 컨트롤러의 update멤버확장변수 를 실행한다
    $oMemberController->updateMemberExtraVars($logged_info->member_srl, $Values);
    }
    </block>

     

    3.png

     

    레이아웃에서 셀렉트옵션을 선택하시고 적용을 누르시면 회원정보의 테마(color) 값이 변경됩니다.

     

    2.png

     

     

     

     

    이제 회원정보->color 값에 따라서 css를 선택해서 불러오게 처리하면 되겠네요

    <[email protected]($logged_info->color=="dark")-->
    <load target="./css/dark.css" />
    <[email protected]($logged_info->color=="pink")-->
    <load target="./css/pink.css" />
    <[email protected]>
    <load target="./css/white.css" />
    <[email protected]>

     

  • profile ?

    제가 딱 원하는 내용입니다 ㅠ 
    차근차근 하나하나 설명해주셔서 너무 감사합니다. 정말 큰도움이 되었고 많이 배웠습니다.

    안전하지 않은부분이 있다니 조심하도록 하겠습니다.

     

    하나 더 여쭤봐도 될까요?

    적용을 누르고, 새로고침하면 아래와 같은 화면이 나오긴 합니다. 계속 하면 잘 작동 되긴 하지만

    뭐때문에 그런지 궁금합니다.




     

  • ? profile
    form 값을 post로 전송해서 그런가봅니다.
    get 방식으로 변경하시거나 혹은 ajax, iframe 등을 이용해서 처리하시면 해결 될것 같습니다.
  • profile ?
    감사합니다!!