본문에 html로 작성된 소스를 가져와서 그대로 다른 글에 넣는 방법
본문
예를들어 특정 게시판에
html로 된 테이블 소스가 있다고 가정하고
각 게시물을 1~10번 번호를 정했다고 가정하겠습니다.
wr_id = 1의 본문은 A형식의 테이블 html 소스
wr_id = 2의 본문은 B형식의 테이블 html 소스...
..... 이렇게 그때 마다 서로 다른 테이블 html 소스를 만들어 둡니다.
즉 일종의 템플릿인데
저렇게 특정 테이블 html 소스를 쭉 만들어 두고
다른 게시판에서 1, 3, 5 이렇게 선택하면
만들어둔 1, 3, 5번 테이블 html 소스들이 자동을 본문의 html 소스로
삽입되어 원하는 테이블 표를 만들려고 합니다.
문제는 해당 게시글의 다른 값들은 불러와지는데 wr_content 테이블 소스는 불러오기가
안되는데 이유가 html 소스라 그런걸까요?
좋은 방법이 있는지 궁금합니다.
답변 3
HTML 테이블 템플릿을 다른 게시판에 활용할 때 데이터 불러오기 문제의 주요 원인은
데이터베이스에서 wr_content 필드에 저장된 HTML 소스를 제대로 처리하지 못하거나,
HTML 소스가 저장 및 출력 과정에서 이스케이프 처리가 되지 않아
원본 형태가 깨지는 경우입니다.
- - 해결 방안 - -
1) 데이터베이스에서 HTML 소스를 저장할 때
이스케이프 처리나 불필요한 변환을 방지하도록 데이터 형식을 확인하고,
2) 불러오는 과정에서 원본 HTML이 깨지지 않도록
HTML 이스케이프를 해제하는 출력 로직을 적용하며,
3) 테이블 템플릿을 효율적으로 관리하려면 별도의 테이블을 생성하여
wr_id별 템플릿 HTML을 저장한 뒤, 해당 게시판에서
wr_id 값을 기반으로 동적으로 불러와 출력하도록 구현해야 합니다.
이를 위해 PHP에서는
데이터베이스에서 HTML 데이터를 쿼리로 불러와 htmlspecialchars_decode를 사용하거나
템플릿 엔진을 활용해 안전하게 HTML을 출력하도록 설정할 수 있습니다.
선택한 템플릿 ID에 따라 템플릿 HTML을 동적으로 불러오고,
게시글의 본문 콘텐츠로 활용하려면 아래 코드 참고 :
// 사용자로부터 template_id가 전달된 경우 처리
if (isset($_POST['template_id'])) {
// template_id를 정수로 변환하여 보안 강화
$template_id = intval($_POST['template_id']);
// 데이터베이스에서 템플릿 콘텐츠 가져오기
$template_query = "SELECT template_content FROM html_templates WHERE id = {$template_id}";
$template_result = sql_query($template_query);
$template_row = sql_fetch_array($template_result);
// 가져온 템플릿 콘텐츠를 본문에 삽입
$content = htmlspecialchars_decode($template_row['template_content']);
} else {
// template_id가 없는 경우 기본값 처리
$content = $_POST['wr_content'];
}
// 이후 본문 콘텐츠를 저장하는 기존 로직과 연결
/bbs/write.php 파일에서 해당 부분의 소스를 추가해줘야 합니다.
$content = "해당 html";
쓰기 페이지에서 $write['wr_content'] 로 선언해보세요.