테스트 사이트 - 개발 중인 베타 버전입니다

신규 db에서 개수를 구해서 가져오고 싶습니다. 채택완료

카라카스 2년 전 조회 2,041

현재 댓글을 달면 새로 만든 테이블 $g5_comment_history에 회원 id와 게시글(원글)의 임의 코드가 저장되게 만들었습니다.

그렇게 해서 comm_mb_id와 comm_code를 비교해서 4개까지만 댓글을 작성 가능하게 만들고 싶은데 $g5_comment_history에서 같은 값을 가진 개수를 가져오지 못하고 있습니다.

아래 쿼리의 어떤 문제가 있을까요?? 고수님들의 도움 부탁드립니다....ㅠ.ㅠ

 

write_comment_update.skin.php

</p>

<p>$sql = " select count(*) as cnt from {$g5_comment_history} where comm_mb_id = '{$g5_comment_history[comm_mb_id]}' and comm_code = '{$g5_comment_history[comm_code]}' ";

$row = sql_fetch($sql);</p>

<p>if ($row[cnt] > "4" ) {

    sql_query($sql2); //작성한 댓글 삭제

    sql_query(" update {$write_table} set wr_comment = wr_comment - 1, wr_last = '{$row['wr_last']}' where wr_id = '{$write['wr_parent']}' ");

    alert('회원별 동일 종류의 댓글은 최대 4번까지만 가능합니다.');

    exit;

};</p>

<p>

댓글을 작성하려면 로그인이 필요합니다.

답변 4개

채택된 답변
+20 포인트
2년 전

write_comment_update.skin.php 파일보다는

write_comment_update.head.skin.php 파일을 만들어서, 댓글을 등록하기 전에

갯수를 체크하는 게 좋을 것 같습니다.

 

또한 $g5_comment_history['comm_mb_id']는 $mb_id로 수정하시면 될 것 같고,

게시글 원글의 임의코드를 만드셨다고 했는데, 해당 게시글 원글의 임의 코드를 가져오는 부분이 있어야 할 것 같네요.

</p>

<pre>
<code>$sql = "SELECT COUNT(*) AS cnt FROM {$g5_comment_history} WHERE comm_mb_id = '{$comm_mb_id}' AND comm_code = '{$comm_code}'";
$row = sql_fetch($sql);
if ($row['cnt'] >= 4) {
    //sql_query($sql2); // 작성한 댓글 삭제 (댓글 등록전에 체크하여, 굳이 등록했다 삭제하는 번거로움을 없앱니다.
    //sql_query("UPDATE {$write_table} SET wr_comment = wr_comment - 1, wr_last = '{$row['wr_last']}' WHERE wr_id = '{$write['wr_parent']}'");
    alert('회원별 동일 종류의 댓글은 최대 4번까지만 가능합니다.');
    exit;
}</code>
</pre>

<p><code>

로그인 후 평가할 수 있습니다

답변에 대한 댓글 8개

카라카스
2년 전
답글 감사합니다.
말씀하신대로 했는데 여전히 $g5_comment_history db테이블 자체를 가져오지 못하네요...ㅠ.ㅠ
메이드
2년 전
$g5_comment_history <= 변수가 지정이 되어 있나요?
변수가 지정이 되어 있지 않다면 그냥 g5_comment_history 로 사용하셔야 할 듯 합니다.
카라카스
2년 전
변수 지정은 안되어 있습니다.
그래서 말씀하신대로 $를 삭제하고 하니 db테이블은 나옵니다...^^
그런데 역시나 comm_mb_id와 comm_code는 못 불러옵니다...ㅠ.ㅠ
현재 comm_mb_id를 mb_id로 변경하면 회원 id는 불러오는데 g5_comment_history 테이블의 comm_code를 불러오지 못하고 있습니다.
메이드
2년 전
게시글 원글의 임의코드가 comm_code 인거 같은데,
임의코드를 어떤 형태로 만드셨을까요?
올려주신 코드에는 comm_code를 가져오는 부분이 없습니다.
카라카스
2년 전
아...이 부분이 좀 복잡하게 돼 있는데요...^^
게시글 작성할 때 글 제목에 제가 여분필드를 이용해서 넣게 만들었어요.
그 후 댓글을 달면 임의코드가 g5_comment_history에서 comm_mb_id필드에는 회원id를 comm_code필드에는 임의코드를 저장하게 만들었거든요.
그래서 g5_comment_history에서 같은 id에 동일 임의코드가 4개 들어가면 동일 임의코드가 들어간 게시글에는 댓글을 못 쓰게 하려는 거거든요.
메이드
2년 전
g5_comment_history 테이블을 수정하시는 건 어떨까요?
comm_mb_id, bo_table, wr_id 이렇게 3개의 필드를 가지고 구분하는 게 좋을 것 같네요.
카라카스
2년 전
바쁘실텐데 계속 답변 달아주셔서 대단히 감사합니다.
mb_id는 comm_mb_id필드로 wr_id는 comm_id필드로... 테이블이 구성되어 있습니다.
bo_table은 게시판 만들 때 게시판명이 들어가는 거 아닌가요?? bo_table이 들어가는 특별한 이유가 있나요??
g5_comment_history의 경우 관리자가 따로 댓글의 db를 축적해서 excel로 출력할 수 있게 만든 테이블이거든요...
메이드
2년 전
bo_table 과 wr_id 를 통해 어떤 게시판의 어떤 원글인지를 파악할 수 있고,
g5_comment_history TABLE 에 댓글 작성 시 회원아이디, 게시판 아이디, 원글 아이디 정보를 보관해 놓으면

write_comment_update.head.skin.php 파일에서 아래와 같이 댓글의 갯수를 파악할 수 있습니다.

$sql = "select count(*) as cnt from g5_comment_history where comm_mb_id = '{$mb_id}' and bo_table = '{$bo_table}' and wr_id = '{$wr_id}'";

댓글을 작성하려면 로그인이 필요합니다.

현재 댓글을 달면

== view 페이지에서 작업하는 듯하네요.

 

 

g5_comment_history가 실 테이블 이름인가요?

 

select count(*) from g5_comment_history

where comm_mb_id='$member['mb_id']}'

and comm_code='{$view['코드컬럼']}'

 

으로 한번 해 보세요.

 

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

M
2년 전

</p>

<p>$sql = " select count(*) as cnt from {$g5_comment_history} where comm_mb_id = '{$g5_comment_history[comm_mb_id]}' and comm_code = '{$g5_comment_history[comm_code]}' ";

echo $sql;</p>

<p>

echo 쿼리를 출력해서 정상적으로 쿼리가 완성되는지를 보셔야 할듯 합니다.

로그인 후 평가할 수 있습니다

답변에 대한 댓글 4개

카라카스
2년 전
답변 감사드립니다.
말씀하신대로 쿼리 출력해보니 comm_mb_id와 comm_code값뿐만아니라
$g5_comment_history 테이블을 못 찾아가네요...ㅠ.ㅠ
M
Mins아빠
2년 전
문제점은 아셨으니 그 부분을 해결하시면 될듯 합니다. ^^
카라카스
2년 전
감사합니다. 어쨌든 문제를 발견했으니 고심해 봐야겠어요...^^
엑스엠엘
2년 전
$g5_comment_history
대신 그냥 테이블명을 쓰세요.

댓글을 작성하려면 로그인이 필요합니다.

변수 가 올바르게 작성이 되지 않아 아래와 같이 수정 해봤습니다

</p>

<p>$sql = "SELECT COUNT(*) AS cnt FROM {$g5_comment_history} WHERE comm_mb_id = '{$comm_mb_id}' AND comm_code = '{$comm_code}'";

$row = sql_fetch($sql);

if ($row['cnt'] > 4) {

    sql_query($sql2); // 작성한 댓글 삭제

    sql_query("UPDATE {$write_table} SET wr_comment = wr_comment - 1, wr_last = '{$row['wr_last']}' WHERE wr_id = '{$write['wr_parent']}'");

    alert('회원별 동일 종류의 댓글은 최대 4번까지만 가능합니다.');

    exit;

}

 

1. $g5_comment_history[comm_mb_id]를 $comm_mb_id로 수정
2. $g5_comment_history[comm_code]를 $comm_code로 수정
3. $row[cnt]를 $row['cnt']로 수정하여 배열 요소에 접근 하도록 함.
4. if ($row[cnt] > "4")를 if ($row['cnt'] > 4)로 수정하여 비교 연산을 올바르게 함.

 

이렇게 하시면 되지 않을까 합니다

로그인 후 평가할 수 있습니다

답변에 대한 댓글 2개

카라카스
2년 전
도움 감사드립니다...
말씀하신 부족한 부분은 수정을 하고 echo $row['cnt']; 넣어서 확인해봐도 개수를 구해오지 못하네요...ㅠ.ㅠ
웹메이킹
2년 전
다음과 같이 시도해 볼 수 있을 것 같습니다

[code]
$sql = "SELECT COUNT(*) AS cnt FROM {$g5_comment_history} WHERE comm_mb_id = '{$comm_mb_id}' AND comm_code = '{$comm_code}'";
$result = sql_query($sql);
$row = sql_fetch_array($result);
if ($row['cnt'] > 4) {
sql_query($sql2); // 작성한 댓글 삭제
sql_query("UPDATE {$write_table} SET wr_comment = wr_comment - 1, wr_last = '{$row['wr_last']}' WHERE wr_id = '{$write['wr_parent']}'");
alert('회원별 동일 종류의 댓글은 최대 4번까지만 가능합니다.');
exit;
}
[/code]

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인