비회원 쪽지 쓰기에 대해서 > 그누4 질문답변

그누4 질문답변

그누보드4 관련 질문은 QA 로 이전됩니다. QA 그누보드4 바로가기
기존 게시물은 열람만 가능합니다.

비회원 쪽지 쓰기에 대해서 정보

비회원 쪽지 쓰기에 대해서

본문

만약

비회원일 경우 자신의 IP를 아이디 값으로 넘겨주어서 일종의 임시 아이디를 만들고

그걸 이용해서 비회원도 관리자에게 쪽지를 쓰고, 또 답장을 받을 수 있게 할 수는 없을까요..?

오늘 하루 종일 들여다 보고 있는데...

프로그램 초보라 잘 안돼네요...

처음부분에 "회원이 아니라면... " 이런 조건문은 주석처리하고

memo_form_update.php 부분에 멤버 아이디가 없을때 me_send_mb_id 값에 IP를 넣으면 될까...

혹시나 했는데 역시나 안돼더군요...

답답해서 글 올려 봅니다.

댓글 전체

간단히 해결 될 문제는 아닙니다만 제가 하는 방법을 대충 열거해 보겠습니다

1. 우선 관리자에게 쪽지보내기 링크가 있어야하겠지요
<a href='javascript:;' onclick='window.open("bbs/memo_form.php?me_recv_mb_id=admin","","left=50,top=50,width=616,height=460,scrollbars=1")'>관리자에게 쪽지 보내기</a>
//////////////////////////////////////////////////////////////////////////////////////////////////////

2. bbs/memo_form.php <--제 소스를 몽땅 올립니다

<?
include_once("./_common.php");

if (!$member[mb_id] && $me_recv_mb_id !='admin')  //관리자에게는 비회원도 메모 가능하게함(memo_form_update.php도 수정)
    alert_close("회원만 이용하실 수 있습니다.");

if (!$member[mb_open] && $is_admin != "super" && $member[mb_id] != $mb_id)
    alert_close("자신의 정보를 공개하지 않으면 다른분에게 쪽지를 보낼 수 없습니다.\\n\\n정보공개 설정은 회원정보수정에서 하실 수 있습니다.");

$content = "";
// 탈퇴한 회원에게 쪽지 보낼 수 없음
if ($me_recv_mb_id) {

 if( !eregi("[0-9]+\.[0-9]+\.[0-9]+.[0-9]+",$me_recv_mb_id ) ) { //받는사람 아이디가 IP가 아닐 경우;
    $mb = get_member($me_recv_mb_id);
    if (!$mb[mb_id])
        alert_close("회원정보가 존재하지 않습니다.\\n\\n탈퇴하였을 수 있습니다.");

    if (!$mb[mb_open] && $is_admin != "super")
        alert_close("정보공개를 하지 않았습니다.");
 }
    // 4.00.15
    $row = sql_fetch(" select me_memo from $g4[memo_table] where me_id = '$me_id' and (me_recv_mb_id = '$member[mb_id]' or me_send_mb_id = '$member[mb_id]') ");
    if ($row[me_memo])
    {
        $content = "\n\n\n>"
                . "\n>"
                . "\n> " . preg_replace("/\n/", "\n> ", get_text($row[me_memo], 0))
                . "\n>"
                . "\n";

    }
}

$g4[title] = "쪽지 보내기";
include_once("$g4[path]/head.sub.php");

$member_skin_path = "$g4[path]/skin/member/$config[cf_member_skin]";
include_once("$member_skin_path/memo_form.skin.php");

include_once("$g4[path]/tail.sub.php");
?>
/////////////////////////////////////////////////////////////////////////////////////////////////////

3. bbs/memo_form_update.php

<?
include_once("./_common.php");

///////////// 비회원도 관리자에게 메모 보내기 위하여 추가 ##################
if (!$member[mb_id] && $me_recv_mb_id !='admin')
    alert("회원만 이용하실 수 있습니다.");
if (!$member[mb_id]) {$member[mb_id]=$_SERVER[REMOTE_ADDR];
  $tmp_id="비회원이보낸쪽지"; }

$tmp_list = explode(",", $me_recv_mb_id);
$msg = "";
$comma = "";
$mb_list = array();
for ($i=0; $i<count($tmp_list); $i++) {

 if( ! eregi("[0-9]+\.[0-9]+\.[0-9]+.[0-9]+",$tmp_list[$i]) ){ // 받을사람 아이디가 IP가 아닐경우
    $row = get_member($tmp_list[$i]);
    if (!$row[mb_id] || $row[mb_leave_date] || $row[mb_intercept_date]) {
        $msg .= "$comma$tmp_list[$i]";
        $comma = ",";
    } else {
        $mb_list[] = $tmp_list[$i];
    }
 }
else $mb_list[] = $tmp_list[$i]; //ip로 된 아이디에게 메모 보내기
}

if ($msg)
    alert($msg . " 은(는) 존재하지 않는 회원아이디 이거나 탈퇴, 접근차단된 회원아이디 입니다.\\n\\n쪽지를 발송하지 않았습니다.");

for ($i=0; $i<count($mb_list); $i++) {
    if (trim($mb_list[$i])) {
        $tmp_row = sql_fetch(" select max(me_id) as max_me_id from $g4[memo_table] ");
        $me_id = $tmp_row[max_me_id] + 1;

        // 쪽지 INSERT
        $sql = " insert into $g4[memo_table]
                        ( me_id, me_recv_mb_id, me_send_mb_id, me_send_datetime, me_memo )
                values ( '$me_id', '$mb_list[$i]', '$member[mb_id]', '$g4[time_ymdhis]', '$me_memo' ) ";
        sql_query($sql);

        // 실시간 쪽지 알림 기능
        $sql = " update $g4[member_table]
                    set mb_memo_call = '$member[mb_id]'
                  where mb_id = '$mb_list[$i]' ";
        sql_query($sql);
    }
}
if($tmp_id) alert_close("관리자에게 쪽지를 전달하였습니다.");
else alert("$me_recv_mb_id 님께 쪽지를 전달하였습니다.", "./memo.php?kind=send");
?>
////////////////////////////////////////////////////////////////////////////

4. bbs/memo.php

<?
include_once("./_common.php");
   
if (!$member[mb_id]) {
    alert_close("회원만 이용할 수 있습니다.");
}

$g4[title] = "내 쪽지함";
include_once("$g4[path]/head.sub.php");

// 설정일이 지난 메모 삭제
$sql = " delete from $g4[memo_table]
          where me_recv_mb_id = '$member[mb_id]'
            and me_send_datetime < '".date("Y-m-d H:i:s", $g4[server_time] - (86400 * $config[cf_memo_del]))."' ";
sql_query($sql);

if (!$kind) $kind = "recv";

if ($kind == "recv")
    $unkind = "send";
else if ($kind == "send")
    $unkind = "recv";
else
    alert("\$kind 값을 넘겨주세요.");

$sql = " select count(*) as cnt from $g4[memo_table] where me_{$kind}_mb_id = '$member[mb_id]' ";
$row = sql_fetch($sql);
$total_count = number_format($row[cnt]);

if ($kind == "recv")
{
    $kind_title = "받은";
    $recv_img = "on";
    $send_img = "off";
}
else
{
    $kind_title = "보낸";
    $recv_img = "off";
    $send_img = "on";
}

$list = array();

$sql = " select a.*, b.mb_id, b.mb_nick, b.mb_email, b.mb_homepage
          from $g4[memo_table] a
          left join $g4[member_table] b on (a.me_{$unkind}_mb_id = b.mb_id)
          where a.me_{$kind}_mb_id = '$member[mb_id]'
          order by a.me_id desc ";
$result = sql_query($sql);
for ($i=0; $row=sql_fetch_array($result); $i++)
{
    $list[$i] = $row;

    $mb_id = $row["me_{$unkind}_mb_id"];

    if ($row[mb_nick])
        $mb_nick = $row[mb_nick];
    else
        $mb_nick = "<font color=silver>정보없음</font>";

////////////////////////////////////////// 비회원의 메모이면 ip를 아이디로 사용  ##################
  if( eregi("[0-9]+\.[0-9]+\.[0-9]+.[0-9]+",$mb_id) ) $name=get_sideview($mb_id,$mb_id);
  else $name = get_sideview($row[mb_id], $row[mb_nick], $row[wr_email], $row[wr_homepage]);

    if (substr($row[me_read_datetime],0,1) == '0')
        $read_datetime = '아직 읽지 않음';
    else
        $read_datetime = substr($row[me_read_datetime],2,14);

    $send_datetime = substr($row[me_send_datetime],2,14);

    $list[$i][name] = $name;
    $list[$i][send_datetime] = $send_datetime;
    $list[$i][read_datetime] = $read_datetime;
    $list[$i][view_href] = "./memo_view.php?me_id=$row[me_id]&kind=$kind";
    $list[$i][del_href] = "./memo_delete.php?me_id=$row[me_id]&kind=$kind";
}

echo "<script language='javascript' src='$g4[path]/js/sideview.js'></script>";

$member_skin_path = "$g4[path]/skin/member/$config[cf_member_skin]";
include_once("$member_skin_path/memo.skin.php");

include_once("$g4[path]/tail.sub.php");
?>
/////////////////////////////////////////////////////////////////////////////

5. 메모를 보내고 리스트를 출력하는 부분은 여기까지입니다
무언가 빠진 부분이 있는 듯도 한데 예전에 만든 것이라 저도 헷갈리는군요

아이피로 받은 메모에 대하여 보낸 ip에 답변을 하면 ip 3자리 부분(예를들어 123.111.222)까지 같은 IP로 접속하면
답변 메모를 볼 수 있도록  하는 부분도 있지만 일반적으로 통용되지 않을 것입니다
(제가 운영하는 사이트의 경우는 유동 아이피라 할지라도 거의 끝자리 부분을 제외하고는 같은 아이피 대역으로
접속하며 접속자가 불특정이 아니어서 운영가능 합니다)

위 소스를 잘 살펴 보시고 하나씩 에러를 죽여나가면 가능할 것입니다....성공하시기를....
전체 66,554 |RSS
그누4 질문답변 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1402호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT