포인트삭감에서 작은따옴표 제목의 글은 에러가.. > 그누3질답

그누3질답

포인트삭감에서 작은따옴표 제목의 글은 에러가.. 정보

그누보드 포인트삭감에서 작은따옴표 제목의 글은 에러가..

본문

게시글을 읽을 때 5포인트씩 삭감하기위해서,
팁란을 뒤적여서 뷰페이지에 pointdel.php 라는 포인트삭감수행파일을 인클루드시켰습니다.
잘 돌아가긴 하는데 문제는 글 제목에 작은따옴표(')가 있는 경우 에러를 띄우거든요.
먼저 pointdel.php 파일은 팁참고해서 아래처럼 만들었구요.

<?
$point = 5;

// 글을 읽은 회원은 포인트가 줄고, 글쓴 회원은 포인트가 늘어남
if ($write[mb_id])
    $mb = get_member($write[mb_id]);

$ss_name = "ss_point_{$bo_table}_{$wr_id}";
if ($HTTP_SESSION_VARS[$ss_name] == false && $member[mb_id] != $mb[mb_id]) {
    // 글읽는 회원의 포인트는 빼고
    if ($member[mb_id]) {
        insert_point($member[mb_id], (-1) * $point, "$write[wr_subject] - 글읽기");
    }

    // 원글의 회원 포인트에 더하고
    if ($mb[mb_id]) {
        insert_point($mb[mb_id], $point, "$write[wr_subject] - 글읽기");
    }

    session_register($ss_name);
    $$ss_name = $HTTP_SESSION_VARS[$ss_name] = TRUE;
}
?>

그리고 만약에 He's korean - 1 이라는 제목의 게시글을 보려고한다면, 아래와 같은 에러구문이 뜹니다.

insert gb_point set mb_id = 'vitamong', po_datetime = '2005-06-11 18:16:34', po_content = 'He's korean - 1 - 글읽기', po_point = '-5'

1064 : You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 's korean - 1 - 글읽기', po_point =




다른 서버에서 테스트 했더니 한글로는 아래처럼 에러구문이 뜹니다.

insert gb_point set mb_id = 'vitamong', po_datetime = '2005-06-11 18:26:01', po_content = 'He's korean - 1 - 글읽기', po_point = '-5'

1064 : 'SQL 구문에 오류가 있습니다.' 에러 같읍니다. ('s korean - 1 - 글읽기', po_point = '-5'' 명령어 라인 4)


제가 sql도 잘 모르고 php도 이제 겨우 걸음마단계라 이 에러가 '(작은따옴표)에서 시작되었다는 것도 수십번 테스트를 해서 겨우 알아내었습니다.. ㅠ.ㅜ
포인트를 깍는 파일에서는 po_point 라는 변수도 없는데,,, 그리고 sql 구문도 없는데,,,,,
이거 어떻게 해야 하나요???
  • 복사

댓글 전체

오오~~ sjsjin님!! 잘 됩니다. 아주아주 잘 돌아갑니다. ^__^;;
실력도 없으면서 포인트삭감 만들었다고 폼잡다 '새'가 되었더랬습니다. ㅠ.ㅜ
덧붙여 주신 설명글도 매우매우 감사합니다~~~ (__)
포인트 테이블 인서트부분의 아래코드를 수정하십시오.

// 수정전
    if ($member[mb_id]) {
        insert_point($member[mb_id], (-1) * $point, "$write[wr_subject] - 글읽기");
    }

    // 원글의 회원 포인트에 더하고
    if ($mb[mb_id]) {
        insert_point($mb[mb_id], $point, "$write[wr_subject] - 글읽기");
    }

// 수정후
$write[wr_subject] = addslashes($write[wr_subject]);

    if ($member[mb_id]) {
        insert_point($member[mb_id], (-1) * $point, "$write[wr_subject] - 글읽기");
    }

    // 원글의 회원 포인트에 더하고
    if ($mb[mb_id]) {
        insert_point($mb[mb_id], $point, "$write[wr_subject] - 글읽기");
    }

* DB에 인서트할때 홀따옴표/쌍따옴표가 있을 경우는 addslashes 로 치환해서 인서트해야 합니다.
반대로 뿌려줄때는 stripslashes 로 뿌려주면 위 함수로 치환했던걸 정상적으로(따옴표등)뿌려줍니다.
© SIRSOFT
현재 페이지 제일 처음으로