아래에 이어서 조금 더 세부적으로 질문하겠습니다.. > 그누4 질문답변

그누4 질문답변

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

아래에 이어서 조금 더 세부적으로 질문하겠습니다.. 정보

아래에 이어서 조금 더 세부적으로 질문하겠습니다..

본문

// 글이 길어서.. 안되는 부분만 줄여서 질문 하겠습니다..
// install/install_db.php를 수정하였습니다..
// 여기에서 변수는 제가 임의로 install/install_config.php에서 받은 값들이구요..


01) explode해서 문자열을 하나씩 받는 부분입니다..
'homepage_sub'.$i.'_subject' 가 "새신을|신고|뛰어보자" 일 때..
새신을 이라는 테이블이 생성,
신고라는 테이블이 생성,
뛰어보자라는 테이블이 생성 되어야 합니다..

아래 문법이 문제가 없는건지요?
(사실 안되더라구요..) 값을 입력 받지 못하고 있는데..
배열이 0번 부터 시작하는건 알겠는데..

for ($i=1; $i<=3 $i++) {
    $homepage_subject = explode ("|", ${'homepage_sub'.$i.'_subject'});

    @mysql_query("insert into $g4[board_table] set gr_id = 'homepage', bo_table = '$bo_table', bo_subject = '".$homepage_subject[$i-1]."'");
}



02) 다음은 if 함수 입니다..
위와 비슷한 예제인데요..
임의의 숫자를 받습니다.. 1|2|3 라고 했을 때..
1을 받으면 이러한 명령을 내리고,
2를 받으면 요러한 명령을 내리는...
3이라는 값을 받으면 이런 명령을 내리는..

물론 이 명령도 지금 인식을 안하고는 있는데요..
문법적으로 전혀 문제가 없다면 쿼리문이 틀린거겠죠?

for ($i=1; $i<=3 $i++) {
    $homepage_skin = explode ("|", ${'homepage_sub'.$i.'_skin'});

    if ($homepage_skin[$i-1] == 1) {
                @mysql_query("alter table $g4[board_table] change `bo_skin` `bo_skin` varchar(255) not null default 'sub01'");
                }

    elseif ($homepage_skin[$i-1] == 2) {
                @mysql_query("alter table $g4[board_table] change `bo_skin` `bo_skin` varchar(255) not null default 'sub02'");
                }

    elseif ($homepage_skin[$i-1] == 3) {
                @mysql_query("alter table $g4[board_table] change `bo_skin` `bo_skin` varchar(255) not null default 'sub03'");
                }
}



03) 마지막으로 하나 더 남기겠습니다..

    for ($i=1; $i<=$homepage_totalpage; $i++) {

일 때.. 이전 페이지에서.. 제가 임의의 수를 homepage_totalpage 값으로 받는데요..
저렇게 쓰이는게 맞는건지 궁금합니다..

책보니깐.. sizeof($homepage_totalpage)도 있었는데..

차이점도 궁금하구요..



/////
답변 남겨 주실 때 마다 너무나도 감사의 마음이 생기고 있습니다..

밤세도록 책보고 응용해봤는데.. 단지 단 하나의 답변이 제 6시간의 시간을 더욱 빛을 발휘하게 해주신다는 점 정말 감사 드립니다..

댓글 전체

1) 바깥의 for 에서 $i 값의 변화에 따라 $homepage_sub1_subject ~ $homepage_sub3_subject 까지 3개의 변수를 각 explode 해서 처리 하는 것 같은데 내부에서 쿼리 문에 변수 사용시 문제가 있는듯한데요.

$homepage_subject 는 만약  $homepage_sub1_subject = '새신을|신고|뛰어보자'; 일 경우
$homepage_subject[0] = '새신을';
$homepage_subject[1] = '신고';
$homepage_subject[2] = '뛰어보자'; 가 되고 같은 원리로 $homepage_sub2_subject , $homepage_sub3_subject  의 경우도 동일하게 배열이 생성 되겠죠
만약
$homepage_sub1_subject = '새신을|신고|뛰어보자';
$homepage_sub2_subject = '헌신을|벗고|달려보자';
$homepage_sub3_subject = '맨발을|씻고|누워보자';

등이라면
해당 조건에서는

  @mysql_query("insert into $g4[board_table] set gr_id = 'homepage', bo_table = '$bo_table', bo_subject = '".$homepage_subject[$i-1]."'"); 의 부분에서

$homepage_subject[$i-1] 의 부분이
루프를 돌면서
$i = 1 에서
$homepage_subject[$i-1] = '새신을'; <= $homepage_subject[0]
"insert into $g4[board_table] set gr_id = 'homepage', bo_table = '$bo_table', bo_subject = '새신을'"

$i = 2 에서  $homepage_sub2_subject 의 explode 결과에 따라
$homepage_subject[$i-1] = '벗고'; <= $homepage_subject[1]
"insert into $g4[board_table] set gr_id = 'homepage', bo_table = '$bo_table', bo_subject = '벗고'"


$i = 3 에서  $homepage_sub3_subject 의 explode 결과에 따라
$homepage_subject[$i-1] = '누워보자'; <= $homepage_subject[2]
"insert into $g4[board_table] set gr_id = 'homepage', bo_table = '$bo_table', bo_subject = '누워보자'"

의 결과가 됩니다.


2) 의 경우...문법상의 문제는 없는데 문제는 로직문제 인듯한데요..왜 저렇게 비교가 되어야 하는지 이해가 안됩니다.
즉 1번의 분해결과중 1번째값 또는 2번의 분해 결과중 2번째값 또는 3번의 분해 결과중 3번째값을 비교하는 것이...
통상은 변수값에 따라 처리를 분기 할경우 대상 변수를 특정 지어야 하는 것이 아닌가 하는데요.
구체적으로 전달 되는 변수 및 해당 변수에 따라 의도하는 명령을 말씀해주시면 좀더 상세한 답변을 드릴수 있을듯 합니다.


3) sizeof 는 배열에서 요소의 수를 알아내는 함수 입니다. (count 와 동일)
말씀 하신 경우는 상황에 따라서 다른데요.
루프를 돌리는 회수를 정할때 전달 변수의 형식 등에 따라 다를수 있다고 생각됩니다.
만약 사람 3명의 이름을 입력 받아서 출력 하는 경우가 있다고 가정할때.
사람 3명의 이름을 배열로 전달 할수도 있고. 또는 순차적 변수로 전달 할수도 있을 텐데요.
예 ) $name[0] = '홍길동' , $name[1] = '이순신' , $name[2] = '아무게';
또는 $name1 = '홍길동' , $name2 = '이순신' , $name3 = '아무게'; 등
두가지의 경우 여러 가지 방법중 아래와 같은 방법의 구현들이 가능할것입니다.

$name[0] = '홍길동' , $name[1] = '이순신' , $name[2] = '아무게'; 로 전달 될 경우 는
for($i=0;$i<count($name);$i++){
  echo $name[$i];
}
일 경우 name 의 수에 따라 순차적으로 이름을 출력해주게 됩니다.

그리고
$name1 = '홍길동' , $name2 = '이순신' , $name3 = '아무게';  등의 방법으로 전송시에는 변수의 수가 가변적인경우 알기 힘들기 때문에 (물론 isset 등의 함수로 변수의 생성 여부를 확인할수도 있겠지만.) 변수의 수가 몇인지를 $totalname 라는 변수 등을 이용해서 전달한다고 가정 할경우 $totalname = 3; 이라는 형식으로 보낸다고 가정할때.

for($i=1;$i<$totalname;$i++){
  echo ${'name'.$i};
}

등의 형식으로 사용 가능할듯합니다.

제 짧은 생각으로는 우선 배열에 관해서 좀더 이해하시는 게 좋을듯하구요. 배열을 이용해서 변수명을 사용하는 방법 및 php 에서 동적으로변수명을 매칭 시키는 방법등에 대해서 좀 더 찾아보시면 도움이 될듯합니다.
지금 천천히 크게 세번쯤 읽어 봤습니다.. 1)번의 경우는 제가 코드를 잘 못 올린 것 같네요.. 원래는 for문 두번 돌리는건데... 라고 적고 봤는데 역시 쿼리문에 변수명을 잘 못 적었네요^^;; 초보자의 실수이지만 다음부터는 신경을 좀 더 써야겠습니다.. 2)번의 경우는.. 제가 조금 더 고민을(어떻게 여쭤볼지를 고민 더 해봐야겠습니다.. 3)번의 경우는 제가 공부가 부족했던 것 같습니다.. 한 세시간 더 고민해보고 글을 남길지 말지 고민해봐야겠습니다.. 감사합니다.. 정말 감사합니다..
전체 66,554 |RSS
그누4 질문답변 내용 검색

회원로그인

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