$bo_table 값의 변경, 다르게 질문드려요
본문
예를 들어,
/board.php?bo_table=free 에 새 글을 쓴 후에
/board.php?bo_table=qa 에 다른 새글을 쓰려고 합니다.
그럼 여기서 $bo_table값이 free에서 qa로 바꾸게 하는 url 소스가 어디에 있는지요.
view.skin, list.skin에서 url을 보면
<?php if ($write_href) { ?><li><a href="<?php echo $write_href ?>" class="btn_b02 btn"><i class="fa fa-pencil" aria-hidden="true"></i> 글쓰기</a></li><?php } ?>
$write_href 을 호출하는데, 이는
$write_href = './write.php?bo_table='.$bo_table; 이렇게 되어있습니다.
여기에 $bo_table값이 free인지 qa 인지 어떻게 구분을 할 수 있을까요?
새로운 글을 쓸때 write.skin 에
<input type="hidden" name="bo_table" value="<?php echo $bo_table ?>">
여기 또한 $bo_table을 호출할뿐, 그 $bo_Table이 그 $bo_table인지..
$bo_table값이 정해진 값이 아니라는거 알고 있어요. 매번 다른 게시판 값이 될 수 있으니까요. 예를 들어 free에서 qa로 바꾸려고 할때, 그것을 가능하게 해주는 url소스코드인지 $bo_table 변수의 "분류 형식" 코드같은 소스가 어디에 있는지요.
감사합니다
답변 9
write.skin.php 파일에 아래 소스 있잖아요.
<input type="hidden" name="bo_table" value="<?php echo $bo_table ?>">
이 소스가 주소창의 bo_table 변수를 담아두는 역할을 해요.
그럼, 글쓰기 확인 버튼 누르잖아요.
그럼, form 에 적용된 action 링크 타고 숨김 형식으로 글쓰기 업데이트 파일로 넘어가요.
그럼, 업데이트 파일이 저 변수를 받아서 해당 게시판 테이블 형식의 변수로 만들고,
글이 해당 게시판 테이블로 저장된답니다.
원하는 게 이게 아니실려나..ㅎ
url 에 bo_table = free 라고 값을 받아 왔잖아요. 그 값에 bo_table 의 값은 free 라고 선언을 했는데 그걸 어디서 받아 왔는지 확인 하시려는 건가요?
list.skin, view.skin, write.skin 에 대해선 bo_table 은 정해진 값으로 db 테이블에 연결해서 값을 보여 주거나 저장하거나 합니다.
링크 값에서 이미 bo_table 에 대한 값을 지정(선언)했습니다.
board.php?bo_table=free 라고요.. bo_table = free
url의 bo_table값을 $_GET['bo_table']로 가져오지 않고
바로 $bo_table 변수로 참조할 수 있는 것은 extract함수 때문입니다.
이것은 common.php 라인 113에 보면 거기서 처리되어 있어
편하게 바로 $bo_table로 게시판을 참조할 수 있게됩니다.
http://demo.sir.kr/gnuboard5/bbs/board.php?bo_table=n_gallery&wr_id=11
이런식으로 URL에 따라서 bo_table의 값이 적용됩니다.
요청해주시는 문의는 한번 글을 작성을 했다면 free 게시판에서 qa게시판 글쓰기로 링크 걸어주고싶으신거같은데 그럴려면 커스터마이징 개발을 하셔야 합니다.
해당 게시판에서 글쓴 이력이 있나 확인하여야 하고 있다면 글쓰기 버튼의 링크를 qa글쓰기 버튼 링크로 이동하게끔 작업이 필요합니다.
메뉴나 버튼에 원하는 곳으로 링크를 겁니다.
<a href='/board.php?bo_table=free'>자유게시판</a>
<a href='/board.php?bo_table=qa'>질문게시판</a>
그럼 board.php 에서 $bo_table 값으로 인해 자유게시판이 되고 질문게시판이 됩니다.
$_REQUEST['bo_table'] 은 bo_table 에 대한 전달값이 POST 일수도 있고 GET 일수도 있을 때 사용합니다.
common.php 파일에서
$bo_table 을 가공하는 걸로 기억합니다.
/bbs/list.php
/bbs/view.php
if($bo_table == 'free'){
$write_href = './write.php?bo_table=qa';
}elseif($bo_table=='qa'){
$write_href = './write.php?bo_table=free';
}else{
$write_href = './write.php?bo_table='.$bo_table;
}
주제 넘는 이야기일지 모르겠지만 음바폐님께서는 php 기본 강좌부터 시작하셔야 할 것 같습니다.
!-->음 제가 질문을 잘 이해 못하고 있는 건가요?
php.ini 에서 변수의 성격을 정의 하고 있습니다.
음 까먹었는데, scgp 였나?
$_COOKIE['bo_table']='bb';
$_SESSION['bo_table']='cc';
$_GET['bo_table']='dd';
$_POST['bo_table']='ee';
$_REQUEST['bo_table'] = 'ff';
라고 했을때 $_POST['bo_table'] 의 값인 'ee' 가 $bo_table의 값이 됩니다.
php.ini 에서
register_globals ='on';
이 되어 있을때,
echo $bo_table; 했을때 위 순서에 맞게 알아서 $bo_table에 값을 할당합니다.
만약 register_globals='off'; 라면
$bo_table = $_POST['bo_table'];
라고 선언하지 않고 echo $bo_table; 하면 값이 없게 되어 '' 빈문자열로 나오게 됩니다.
이것을 한번더 확실히 하고자 extract($_POST);extract($_GET); 로 값을 가공합니다.
위에서 언급한 $_POST['bo_table'] 은 <form></form>을 통해서 넘어오게 되므로 사람의 눈으로는 확 인 안되고 .. $_GET['bo_table'] 은 ?bo_table=aa&wr_id=3 이렇게 주소에 남겨지게 됩니다.
$_REQUEST['bo_table']은 $_POST['bo_table']이 있으면 이 값을 갖고 없으면 $_GET['bo_table']값을 갖습니다. 즉 $_POST가 우선권이 있습니다.
이러한 변수의 정의를 물어 보시는지요?
$bo_table의 값을 변경하는 것은
common.php 에서 생성된 $bo_table변수를 변경하면 됩니다.
common.php의 젤 하단이나 변경하고자 하는 페이지에서
include_once '../common.php';
$bo_table='cc'; 라고 하게 되면 해당 페이지에서 $bo_table을 강제로 바꾸게 됩니다.
아니면 bo_table값을 가공하기전에
$_POST['bo_table'] ='cc';
$_GET['bo_table']='cc';
include_once '../common.php';
라고 하셔도 되고
혹은
$is_page='yes';
common.php 의 젤 하단에
if(is_set($is_page) && $is_page=='yes')
{
$bo_table='bb';
}
라고 할 수도 있습니다.