* 모아 회색 갤러리 기본형 ( moa_gray_gallery_V1.0 ) https://www.moa.ai.kr/bbs/board.php?bo_table=new_gallery *...
신고가 접수되어 자동으로 블라인드 된 글입니다.
원글을 보시려면 를 클릭하세요.
좋은 댓글과 좋아요는 제작자에게 큰힘이 됩니다.
* 모아 회색 갤러리 기본형 ( moa_gray_gallery_V1.0 ) https://www.moa.ai.kr/bbs/board.php?bo_table=new_gallery *...
어느분이 만드신 것을 최신화 했습니다. 문제가 되면 바로 내리겠습니다. - 감사합니다. (모아) -
설치방법 1. 압축해제후 그누보드 설치한 디렉토리에 업로 2. 환경설정 > 기본환경설정 > 여분필드 기본 설정 > 여분필드10 제목과 값에 적당한 제목과 API KEY값 입력 여분...
* 설치 가능한 PHP 버전은 5.4 ~ 8.0 설치테스트완료 ## 설치방법 ## 1. 다운로드 2. 압축해제 3. 압축해제후 adm 폴더와 contact 폴더를 그누보드 설치한곳...
혹시 분류를 혹시 여분필드에서 추가 하는 방법없을가요 여분필드1 : 1단 여분필드2 : 2단 여분필드3 : 3단 여분필드4 : 4단 여분필드5 : 5단 으로 추가하게 할수없어요?...
와 좋은 스킨 감사합니다 서울 인천을 다중선택이 가능하길 희망합니다^^ =============================== 일전에 올린 스킨이 있는데 .... 모 회원님이 다...
외형은 basic 그대로 입니다. 첨부파일에 md 마크다운 첨부시 뷰페이지 하단에 노출됩니다.
혹시 분류를 혹시 여분필드에서 추가 하는 방법없을가요 여분필드1 : 1단 여분필드2 : 2단 여분필드3 : 3단 여분필드4 : 4단 여분필드5 : 5단 으로 추가하게 할수없어요?...
등록 후 정해진 시간에 볼 수 있는 게시판 입니다. 캡슐이 열린 글이 제일 위로 올라 옵니다. (최신글 동일) 나머지는 일반 게시판 하고 별반 차이가 없습니다. 딱히 설명 ...
게시판 에서 지정한 곳에 포스트잇 붙이는 겁니다. 최신글 방식 으로 불러 옵니다.. latest.skin.php 는 latest 폴더에 postit 폴더를 만드신 후 넣어 주세요...
별 다른건 없고 월 일정 입력 후 보는 겁니다. 글 작성시 달력 네모칸 클릭 후 진행 합니다. 시작일 그대로 ..... 종료일 미입력시 당일 종료. (달력에 정상적으로 남아 있...
댓글 98개
locale 홈에 설치해서 그런가 보네요.. 다른 사이트에 설치하니 잘 됩니다.
junny1님 감사 합니다.
불쾌 하셨다면 사과 드리겠습니다.app123123.com 는 뭔가요?
이게 정상적 생성이 되는건가요?
발견된 취약점 요약
심각 2개
.php파일을 이미지로 위장해 업로드한 뒤 서버에서 실행(웹셸)할 수 있습니다.높음 3개
innerHTML로 직접 삽입 → 저장형 XSS중간 2개
그런데 정말 속상해요. 모두가 편리하게 사용할 수 있도록 밤을 새워 개발했는데, 근거 없는 언어 공격을 받았어요. 원래는 다음 단계로 app123123.com의 소스 코드를 업로드해 모두가 무료로 다운로드할 수 있게 할 계획이었어요. 하지만 이런 무분별한 언어 폭력이 너무 힘들어요. 이제는 이 웹사이트의 소스 코드도 절대 업로드하지 않을 거예요. 앞으로는 더 이상 개발하고 공유할 의향이 없어요.
사실 contact 폴더 내 파일들에는 XSS 공격 방지를 위한 입력 필터링 코드와 웹쉘 공격 차단을 위한 파일 필터링 로직이 모두 적용되어 있거든요. 만약 제 코드에 실제 취약점이 있다면 직접 공격 시도해보셔도 돼요! 그렇게 하시면 제 코드의 안전성을 직접 확인하실 수 있을 거에요.
그런데 이런 식으로 댓글을 남기시면 다른 사용자들이 제 코드에 문제가 있다고 오해하고 다운로드를 망설일 수 있거든요. 이로 인해 다운로드 수가 줄어들어 정말 아쉬워요.
그리고 뜻을 몰라서 ( phpMyAdmin에 임포트하세요. )이걸 모르겠내요 임포트 하세요 뜻을몰라 망서리고 있습니다
아직 배우는 사람입니다잘 부탁드릴께요 설치는 다됬었습니다
기본 가져오기 절차
- phpMyAdmin 로그인: 웹 브라우저에서 phpMyAdmin에 접속하여 로그인합니다.
- 데이터베이스 선택: 왼쪽 사이드바에서 파일을 가져올 대상 데이터베이스를 클릭합니다. (데이터베이스가 없다면 '새로 만들기'로 생성해야 합니다.)
- '가져오기(Import)' 탭 클릭: 상단 메뉴바에서 [가져오기] 탭을 선택합니다.
- 파일 선택: '가져올 파일' 섹션에서 [파일 선택] 버튼을 눌러 컴퓨터에 있는
- 가져오기 실행: 페이지 하단의 [실행(Go)] 버튼을 클릭합니다.
- 완료 확인: "가져오기가 성공적으로 완료되었습니다"라는 메시지가 뜨면 데이터와 테이블이 정상적으로 가져와진 것입니다.
주의사항 및 팁.sql또는.zip(압축된 SQL) 파일을 선택합니다.- 파일 크기 제한: 대용량 SQL 파일은 PHP 설정(
- 대용량 파일 처리: 파일이 너무 크면 압축 파일(
- 오류 발생 시: 데이터베이스가 이미 존재하거나, SQL 쿼리 문법에 오류가 있는 경우 임포트가 실패할 수 있습니다.
데이터베이스를 선택하고 [가져오기] 탭에서 파일을 찾아 [실행]하면 간단하게 처리됩니다.upload_max_filesize,post_max_size)에 따라 임포트 제한이 발생할 수 있습니다..zip)을 사용하거나, 터미널/명령 프롬프트에서mysql명령어를 사용하는 것이 좋습니다.다운로드해서 바로 사용하시면 됩니다.
phpMyAdmin 서버 설정은 저도 익숙하지 않아서 직접 만들어 사용해봤습니다.
서버 작업이 부담스러우신 분들께 도움이 되길 바랍니다. 테스트는 10번을 서버에서 지우고 설치하고 했습니다.
SQL 파일 임포트에 어려움을 겪는 분들에게 큰 도움이 될 것 같아요.
10번이나 테스트하셨다니 꼼꼼하시네요. 덕분에 서버 작업이 부담스러운 사용자들이 더 쉽게 접근할 수 있을 것 같습니다.
공유해 주셔서 다시 한번 감사드립니다. 잘 사용해 보겠습니다!
해당 채팅 기능에 대한 추가 개발은 저는 더 이상 진행하지 않을 예정이며, 추가개발에 관심 있는 분들은 마음껏 자유롭게 개발하셔도 저와는 전혀 상관없습니다. 우리 모두 함께 배우고 성장하기 위한 목적이니, 추가개발하신 결과물은 추가개발자 본인의 작품으로 인정되며 저와는 상관없습니다. 모두 함께 배우고 발전할 수 있기를 바랍니다.
그리고 저는 현재 그누보드 표준에 맞춰 채팅 기능과는 별도의 다른 기능을 제작할 계획을 가지고 있습니다. 다만 구체적으로 어떤 기능을 개발할지 아직 확정하지 못했기 때문에, 이후 구체적인 아이디어가 떠오르면 제작 후 해당 게시판에 다시 업로드하도록 하겠습니다.
다시 한번 소중한 의견을 내주셔서 감사드립니다.
---------------------------------------------------------------------------------------------------
죄송하지만 "추가개발" 단어를 수정했습니다 .
감사합니다
함께 배우면서 더 멋진 결과물을 만들어 보아요!
이 코드는 질문과 답변을 구현하기 위한 코드입니다.
자동 질문과 답변 코드이며, 필요에 따라 아래 코드를 추가 수정하시면 됩니다
그리고 관리페이지에서 퇴근상태로 설정 후 자동 로봇 회답 됩니다.
파일주소
contact/include/setting.php
대략 60줄 추가
//1
$gjc[]="안녕";
$fhc[]="무엇을 도와 드릴가요?";
//2
$gjc[]="안녕하세요";
$fhc[]="무엇을 도와 드릴가요?";
//3
$gjc[]="고마워";
$fhc[]="별말씀을요";
//4
$gjc[]="감사";
$fhc[]="별말씀을요";
//5
$gjc[]="고마워요";
$fhc[]="별말씀을요";
여기까지는 데었는데 다음은 어떻게 해야할지 모르겠네요 도와주세요
adm 폴더와 contact 폴더를 그누보드 설치한곳에 넣으시면 됩니다 .
테스트 글 남겨드렸습니다.
이고요 살펴줴요
https://www.daet24.com 웹사이트 관련하여 말씀드리자면, 어제 진행하신 테스트에서는 메시지 전송에 문제가 없었던 것으로 확인되었습니다. 혹시 파일 업로드 과정에서 일부 파일이 누락되지는 않았을까 하는 생각이 들어 안내 말씀드립니다.
FTP를 통해 파일을 업로드하실 때, adm 폴더 내의 모든 하위 폴더와 파일이 정상적으로 업로드되었는지 다시 한번 확인해 주시면 좋겠습니다.
업로드를 완료하신 후에는 관리자 페이지에서 ‘고객센터’ 기능이 정상적으로 표시되는지도 함께 확인해 주시기 바랍니다.
추가로 궁금하신 사항이나 확인이 필요한 부분이 있다면 언제든지 말씀해 주세요. 도움을 드리기 위해 항상 준비되어 있습니다.
입니다
너무 고생하였네요... 한가지 아이디어로.
몇명이 대기하고 있습니다. 답변 예정시간은 --분입니다. 라고 추가로 있었으면 좋겠네요.
감사합니다.~
저희 테스트 사이트는 실시간 초단계 채팅 기능을 테스트하기 위해 자동 회답 내용은 간단하게 설정해두었습니다.
실제로 본인의 웹사이트에 적용하실경우, 대기 인원이 많으시면, 자동회답에 (답변 예정시간은 --분입니다.)라고 운영 상황에 맞게 입력하시면 됩니다.
그리고 추가 기능 개발은 진행하지 않겠습니다. 감사합니다.
다시 한번 귀중한 의견을 주셔서 진심으로 감사드립니다.
만약 고객센터 문의자가 많아서 답변이 늦어지는 경우,
이미지에 설명된 위치에 내용을 수정하시면 됩니다.
예를 들어:안녕하세요. 무엇을 도와드릴까요?
문의사항을 남겨주시면 순차적으로 답변드리겠습니다.
저는 메인화면에서 바로 상담을 할 수 있도록 수정을 약간했습니다.
상담이 들어오면 메인화면에서 관리자로 채팅창을 열면
상대방과 바로 채팅할 수 있습니다.
아무튼 너무 감사하며 앞으로도 좋은 프로그램 부탁드립니다.
- 감사합니다. (모아) -
저도 성공했습니다. 전에 될거같은데 아무리해도 안되서 포기할까하다가 모아비즈님꺼 보고 역시 되는구나 하고 열심히 수정했습니다. 하하하
좋은 하루되세여~~~!!! ㅎㅎㅎㅎ
띄어쓰기 해결했습니다
https://shooter.dothome.co.kr/
띄어쓰기 해결방법
contact -> include 폴더 안에 function.php 이파일에서
function dealMessage($fsnr){
global $wgc1;
global $wgc2;
// 필터링 반복문
foreach ($wgc1 as $ra){
// 만약 필터링 대상($ra)이 공백(" ")이라면 삭제하지 않고 건너뜁니다.
if($ra == " " || $ra == " ") continue;
$fsnr = str_replace($ra, "", $fsnr);
}
foreach ($wgc2 as $rb){
$fsnr = str_replace($rb, "*", $fsnr);
}
return $fsnr;
}
이걸로 교체하시면 사용자에서도 띄어쓰기 됩니다.
근데요.
제가 ETY_보바펫테마_v1.0 테마를 쓰는데요
뭐가 문제인지 이 테마의 문제 인지 해결이 안됩니다.
저만 그런건지....이 테마가 보기에 좋아서 그냥 쓰는데요
뭐하나 수정하려면 잘 안되요.
죄송하지만
어떤 폴더의 어떤php파일에 어느 부분을 어떻게 바꾸라고 좀 알려 주시면 감사하겠습니다.
제가
60대 인데 뭐하나 이해하는데 좀 오래 걸립니다ㅜㅜ
화면 한번만 클릭해놓으면 채팅창을 안열어도 채팅 알림음과 숫자 알림 뱃지 추가했습니다.
https://shooter.dothome.co.kr/
상담내용 카운트 되면서 표시됩니다.
// action.php 맨 하단
if(isset($_POST['act']) && $_POST['act'] == 'getTotalUnreadCount'){
$sql = "SELECT COUNT(*) as cnt FROM `aidex_chatMessage` WHERE `type` = '1' AND `isRead` = '0'";
$row = sql_fetch($sql);
// 이 줄 앞에 다른 echo나 출력문이 있으면 안 됩니다.
ob_clean(); // 혹시 모를 앞선 출력을 비움
echo json_encode(array("jg" => "ok", "count" => (int)$row['cnt']));
exit;
}
tail.sub.php
<?php include_once(G5_PATH.'/contact/index.php');?>
<span id="chat-unread-count" style="
display:none;
position:absolute;
top: 1205px;
right: 24px;
background: #ff4d4f;
color: #fff;
font-size: 10px;
font-family: 'Pretendard', sans-serif;
font-weight: 700;
padding: 0 5px;
border-radius: 20px;
border: 1.5px solid #fff;
min-width: 18px;
height: 18px;
line-height: 15px;
text-align: center;
box-shadow: 0 2px 5px rgba(0,0,0,0.2);
z-index: 9999;
box-sizing: border-box;
justify-content: center;
align-items: center;
">0</span>
</div>
<audio id="alarm-sound" src="<?php echo G5_URL ?>/contact/mp3/notice.mp3" preload="auto"></audio>
<script>
$(function() {
var lastCount = 0;
var isFirstCheck = true;
var audio = document.getElementById('alarm-sound');
// [중요] 브라우저 정책 해결: 사용자가 페이지를 처음 클릭할 때 오디오를 한 번 로드함
$(document).one('click', function() {
if(audio) {
audio.play().then(function() {
audio.pause(); // 권한만 얻고 즉시 멈춤
audio.currentTime = 0;
}).catch(function(e) { console.log("Audio Init Fail"); });
}
});
function updateChatBadge() {
$.ajax({
url: "/adm2/contact/action.php",
type: "POST",
data: { act: "getTotalUnreadCount" },
cache: false,
success: function(data) {
try {
var res = JSON.parse(data);
if (res.jg == "ok") {
var count = parseInt(res.count);
// 새로운 메시지가 왔을 때만 소리 재생
if (!isFirstCheck && count > 0 && count > lastCount) {
if (audio) {
audio.muted = false;
var playPromise = audio.play();
if (playPromise !== undefined) {
playPromise.catch(function(error) {
console.log("재생 차단됨: 페이지 내 아무곳이나 클릭이 필요합니다.");
});
}
}
}
lastCount = count;
isFirstCheck = false;
if (count > 0) {
$('#chat-unread-count').text(count > 99 ? '99+' : count).css('display', 'flex');
} else {
$('#chat-unread-count').hide();
}
}
} catch(e) {
console.log("파싱 에러");
}
}
});
}
setInterval(updateChatBadge, 10000);
updateChatBadge();
});
</script><span id="chat-unread-count" style="
display:none;
position:absolute;
top: -3px;
right: -3px;
background: #ff4d4f;
color: #fff;
font-size: 10px;
font-family: 'Pretendard', sans-serif;
font-weight: 700;
padding: 0 5px;
border-radius: 20px;
border: 1.5px solid #fff;
min-width: 18px;
height: 18px;
line-height: 15px;
text-align: center;
box-shadow: 0 2px 5px rgba(0,0,0,0.2);
z-index: 9999;
box-sizing: border-box;
justify-content: center;
align-items: center;
">0</span>
</div>
<audio id="alarm-sound" src="<?php echo G5_URL ?>/contact/mp3/notice.mp3" preload="auto"></audio>
<script>
$(function() {
var lastCount = 0;
var isFirstCheck = true;
var audio = document.getElementById('alarm-sound');
// [중요] 브라우저 정책 해결: 사용자가 페이지를 처음 클릭할 때 오디오를 한 번 로드함
$(document).one('click', function() {
if(audio) {
audio.play().then(function() {
audio.pause(); // 권한만 얻고 즉시 멈춤
audio.currentTime = 0;
}).catch(function(e) { console.log("Audio Init Fail"); });
}
});
function updateChatBadge() {
$.ajax({
url: "/adm2/contact/action.php",
type: "POST",
data: { act: "getTotalUnreadCount" },
cache: false,
success: function(data) {
try {
var res = JSON.parse(data);
if (res.jg == "ok") {
var count = parseInt(res.count);
// 새로운 메시지가 왔을 때만 소리 재생
if (!isFirstCheck && count > 0 && count > lastCount) {
if (audio) {
audio.muted = false;
var playPromise = audio.play();
if (playPromise !== undefined) {
playPromise.catch(function(error) {
console.log("재생 차단됨: 페이지 내 아무곳이나 클릭이 필요합니다.");
});
}
}
}
lastCount = count;
isFirstCheck = false;
if (count > 0) {
$('#chat-unread-count').text(count > 99 ? '99+' : count).css('display', 'flex');
} else {
$('#chat-unread-count').hide();
}
}
} catch(e) {
console.log("파싱 에러");
}
}
});
}
setInterval(updateChatBadge, 10000);
updateChatBadge();
});
</script>
그런데 tail.sub.php에 넣는 코드 중에 url: "/adm2/contact/action.php", 이 부분 경로가 맞나요?
제가 다운받은 파일에는 adm2 폴더가 없어서요.
right: -6px;
일단 말이없어서 ....패스 ㅎㅎ 감사합니다. ^^
채팅하기를 누르면 채팅 내용이 새로고침을 해야 올라오고 다른 사람들이 쓴 내용까지 모두 공개가 되는 건가요?
관리자에서는 분리가 되어서 확인이 가능하던데요.
상담 내용을 입력하니
이런 식으로 되네요 수정할수 있도록 도와주세요.
주소는 https://www.daet24.com dlqslek
주소는 https://ecnib24.dothome.co.kr/ 입니다