$doc_num = $_REQUEST["d_num"];
    $m_srl = $_REQUEST["md_srl"];
    $data = $_REQUEST["t_data"];

    echo $doc_num;
    echo $m_srl;
    echo $data;

    $s = mysql_connect("localhost", "dbid", "dbpass") or die ("실패입니다.");
    print "성공입니다.";
    mysql_select_db("req", $s);

    $query = sprintf('UPDATE `dev_document_extra_vars` SET `value`="%s" WHERE `module_srl`=%s AND `document_srl`=%s AND `var_idx`=%s AND `lang_code`="ko"', $data, $m_srl, $doc_num, 2);
    mysql_query($query);

    echo $query;
    
    mysql_close($s);

 

이 코드를 통해서, get파라메터로 받은 함수에 해당하는 m_srl과 data에 맞게끔 수정되게 합니다.

 

버튼으로 OK, NO 버튼을 만들어서 관리자만이 이 확장 변수를 버튼을 클릭하여 DB를 몰라도 수정할 수 있게끔 하려 합니다.

(수정 버튼을 누르기에는 너무 번거로움이 있기에)

 

근데 이 페이지만을 로딩해도 500 에러가 나는데, 별도 php 확장 모듈이 있어야하나요?

현재 php7.1을 사용중에 있습니다.

  • ? Lv8
    php7 이상이면 mysql 이 아니라 mysqli 기반일겁니다.
    명령어들이 조금씩 달라요 ^^ ( 구글링하면 잘 나올거예요~ )
  • ? Lv8 Lv6
    엇 이러니 연결은 되었네요..!

    햇갈렸는데 감사합니다 ㅜㅜ!
  • ?
    14번 라인에...

    mysql_query($query, $s);
    가 되어야 합니다..!
  • ? Lv6
    뭔가 DB연결은 되었는데 DB가 안넘어가네요 ㅜㅜ

    분명 module_srl 과 document_srl 을 맞췄는데 DB값이 그대로... 다시 찾아봐야겠네요
  • Lv6 ?
    mysqli 를 사용할 때는, connection 값이 제일 앞에 옵니다..!
    mysqli_query($s, $query); 처럼요. select_db도 마찬가지로 순서가 바뀌어야 합니다!
  • ? Lv6
    그렇군요.. 생각보다 놓치는게 많네요 ㅠㅠ

    뭔가 바꿔도 동일하기에.. 새로 짰습니다..!

    뭔가 시원섭섭하지만 잘 작동하네요!
    덕분에 다시 새기네요!
  • Lv37

    updateDocumentExtraVar를 사용해서 정상적인 방법으로 쿼리하세요.

    저렇게 쿼리하면 해킹당합니다. 저 코드가 사용된 사이트 주소만 알면 당장이라도 DB 털어버릴 수 있어요.

    실제 해킹 사례라도 하나 나오면 개발팀이 불시에 막아버릴 가능성도 꽤 높습니다.

  • Lv37 Lv6
    그렇군요.

    우선 내부에서만 돌아가는 페이지라 간단하게 짜고 있는데, 실 서비스에는 그렇겠다 싶네요.

    조만간 제대로 된 코드를 사용해서 수정하겠습니다.
  • Lv37
    정확히 몰라서 여쭤봅니다.. 만약 mysqli 를 사용하거나, mysql일 때는 sql문을 mysql_real_escape_string으로 파라미터를 감싸서 쿼리해도 문제가 되는지..
    뭘 만들다보면 아직 xml 쿼리로는 구현 안되는 작업들이 조금 있더라구요..ㅠ
  • Lv37
    mysql일 때는 mysql_real_escape_string이고 mysqli일 때는 mysqli_escape_string입니다.
    반드시 set_charset을 해준 후에 커넥션 변수를 함께 넣어서 사용해야 하기 때문에,
    단지 저 함수를 사용했다고 100% 안전하다는 보장은 없습니다.
    mysqli라면 prepared statement를 사용하는 것이 가장 안전합니다.
  • Lv37

    xe에 내장된 db 클래스를 열어보면 mysqli는 use_prepared_statements 지원 여부를 확인 후에 mysqli_prepare 함수를 사용하는 것 같더라구요. 반면 mysql은 아무 보안 장치가 없기도 하고, 커넥션 변수가 담기는게 또 문제가 될 수 있다면, 양쪽의 호환과 보안을 고려한 코드를 짜는게 현실적으로 어렵겠군요..  xml 쿼리를 확장할 수 있는 방법을 고안해봐야겠습니다. 답변 감사합니다. 

  • Lv37

    use_prepared_statements는 지원 여부를 판단하는 것이 아니라 그냥 XE 설정입니다. 아주 오래된 서드파티 자료들 중 xml 쿼리를 정말 엉망으로 짜놓아서 prepared statement를 쓸 수 없거나, 아주 오래된 버전의 DB서버와 연동하는 경우 N으로 변경하라고 있는 설정이예요. 지난 몇 년간은 기본값이 Y였고 변경할 수 있는 옵션조차 없었으니, 새로 개발하신다면 그 설정 무시하고 mysqli_prepare를 바로 쓰셔도 됩니다. DB type이 mysql로 되어 있는 사이트라도 그냥 무시하고 mysqli 쓰셔도 되고요.

  • Lv6
    뭔가.. 민폐가 된 모양이네요..ㅜ

    다음에는 뭔가 좀... 제대로 된 쿼리를 짜야겠습니다