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

· 2005-06-11 (토) 18:58:47 · 1500 · 2
게시글을 읽을 때 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 구문도 없는데,,,,,
이거 어떻게 해야 하나요???
|

댓글 2개

오오~~ 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 로 뿌려주면 위 함수로 치환했던걸 정상적으로(따옴표등)뿌려줍니다.
댓글을 작성하시려면 로그인이 필요합니다.

그누3질답

9,564건
+
제목 글쓴이 날짜 조회
05-06-12 조회 1,244
05-06-12 조회 1,332
05-06-12 조회 1,022
05-06-11 조회 1,501
05-06-11 조회 1,190
05-06-11 조회 1,023
05-06-11 조회 1,267
05-06-10 조회 1,413
05-06-10 조회 1,029
05-06-10 조회 1,020
05-06-10 조회 1,241
05-06-10 조회 1,033
05-06-10 조회 1,075
05-06-10 조회 1,171
05-06-10 조회 1,066
05-06-09 조회 1,168
05-06-09 조회 1,153
05-06-11 조회 1,161
05-06-09 조회 1,153
05-06-09 조회 1,005