주문번호를 만들려고 합니다. > 그누4 질문답변

그누4 질문답변

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

주문번호를 만들려고 합니다. 정보

주문번호를 만들려고 합니다.

본문

영카트에서  주문번호를 날짜+일련번호 이런식으로 부여 한것을
본 기억이 납니다.

그래서, 이와 같이 함 만들어 볼라고 하는데요...

우선은

write.skin 에

주문번호변수를 wr_10 으로 주고.
<?
$aa=date(ymd);
$wr_10=$aa.$wr_id ;
?>

<input class="field" name=wr_10 id="wr_10" itemname="주문번호" value="<?=$wr_10?>" readonly>

이런식으로 추가 했습니다.

근데, 날자만 나오고 뒤에 글번호가 안나옵니다.

그래서 wr_id 값만 한번 찍어봤는데, 역시 암것도 안나오네요..이건 write후에 값이 들어가는건가요?
아님 다른 변수를 써야 하는건가요 ?

댓글 전체

네, 그럼 write 할때는 표시 하지 말고,

list 화면에서 표시 하던지 그래야 겠네요.....

근데 wr_id 의 자리수를 00001 이런식으로 할수 있는 포맷문이나
변환 명령어가 있나요 ?

그니까 8년 4월 27일 1번째 이면

*** 개인정보보호를 위한 전화번호 노출방지 ***  요런식으로 표시 하고 싶은데요...
방법이 아주 없는건 아닙니다만...

wr_id 를 timestamp형으로 지정해 주면
insert된 시간으로 알아서 들어가게 됩니다. 서버에따라서
20080427014102 이런식으로 저장되기도 하고(14바이트)
2008-04-27 01:41:02 이런식으로 저장되기도 합니다.
다행히 앞의경우면 원하시는 결과랑 비슷하게 되는데요. 후자일경우 일련번호라고 하기는 좀 그렇겠네요. 가공을 하셔야 할 듯 합니다.

사용하시는 방법은
아무이름.php 를 만드시고
<?
include("./_common.php");
sql_query("alter table g4_write_게시판테이블명 change wr_id wr_id timestamp");
?>


하시거나 디비에 바로 쿼리 날리실 수 있다면
alter table g4_write_게시판테이블명 change wr_id wr_id timestamp;

이것만 날려주시면 됩니다.
기 저장된 자료들은
timestamp가 저장되기는 유닉스 타임스탬프라는 DWORD(크기가 큰 부호가 없는 정수)값을 가지므로
이상한 날짜로 바뀔겁니다 1970년쯤
그외에는 문제 없을껍니다. 제가 써봤는데 큰문제 없었습니다.단지
그누보드나 스킨에서 wr_1를 int라고 가정하고 작은따옴표를안붙였을경우에 일일히 수정해주어야
하는 번거로움이 있습니다.
시험삼아 해보시는건 추천합니다만 실제 쓰는 곳에서 테스트는 금물입니다.
친절한 답변 감사드립니다.

말씀하신것을 제가 제대로 이해한것인지 모르겠지만,
2008042401402 이건 년월일시분초 맞죠 ?
제가 날짜 함수책을 참조하다..걍 이렇게
해밨었는데요..
<?
$aa=date(Ymdhjm);
$wr_10=$aa.$wr_id ;
?>

이것이 년월일시분초 일캐 다 나와서 써보까 생각했었는데, 자리수가 넘 길어서...
다른방법을 고민해 보고 있습니다.

아직 실제 쓸곳에 하지는 않구요...공부한후에 확실히 이해되면 그때 적용하겠습니다.ㅎㅎ

다시한번 감사드리고요, 좋은밤되세요...저는 오늘은 여기까지 하고 고만 자러가야겠어요..
네 주무세요.
제생각엔 그냥 wr_id 앞에 00000 만 붙여서 쓰시는게 나을것 같아요 그 게시판 안에선 유일값이니

그냥 앞에 0000 만 붙이는 것은

alter table g4_write_게시판bo_table change wr_id wr_id int(10) zerofill unsigned not null auto_increment 로 하시면 될꺼예요
저는 주문한 날짜 + 그날의 첫번째주문이냐 두번째주문이냐 이런식으로 구성했습니다.
초보인지라 여기저기 퍼오고 조합해서 소스가 다소 엉망일 수 있으나 작동은 잘~ 됩니다.. ^^;;
필요하신대로 응용하시면 될듯싶습니다.

write_update.skin.php
==============================================================
    $today = date("ymd", $g4['server_time']); //오늘날짜 구하기 070209

$time_stamp = mktime(0, 0, 0, date("m"), date("d"), date("y"));
$chk_date = date("Y-m-d H:i:s", $time_stamp); 
$sql = " select count(*) as cnt from {$g4[write_prefix]}{$bo_table} where wr_is_comment ='0' and wr_reply ='' and wr_datetime >= '$chk_date' ";

$result = sql_fetch($sql);
$count_a = "000".$result[cnt];
$wr_10 = $today."".substr($count_a, -3); //여유필드10에 주문번호넣기

==============================================================
07년02월09일 첫 주문 일시 결과값 => *** 개인정보보호를 위한 전화번호 노출방지 ***


헤에.. 이거 작년에 만든건데..
지금 보니
$time_stamp = mktime(0, 0, 0, date("m"), date("d"), date("y"));
$chk_date = date("Y-m-d H:i:s", $time_stamp); 
이부분 왜 이렇게 했을까요?
$chk_date =  date("Y-m-d 00:00:00", $g4['server_time']);
해도 될텐데..
테스트를 해보지 않아 정확도는 일단 윗 소스입니다. ^^;;
쵸코님, 치에님, 너굴탱이님 답변 감사합니다.

치에님이 올려주신 소스를 쵸코님의 말씀대로 chk_date 만 살짝 바꾸고

//오늘날짜 구하기 070209
$chk_date =  date("Y-m-d"); 
$sql = " select count(*) as cnt from {$g4[write_prefix]}{$bo_table} where wr_is_comment ='0' and wr_reply ='' and wr_datetime >= '$chk_date' ";

$result = sql_fetch($sql);
$count_a = "000".$result[cnt];
$wr_10 = $chk_date."".substr($count_a, -3); //여유필드10에 주문번호넣기

해봤어요....

잘되네요...근데요
sql 문중에
wr_is_comment ='0' and wr_reply ='' and wr_datetime >= '$chk_date' ";
이부분이 왜 커멘트가 0이고 reply가 " 인것을 해야 하는지 ??


$count_a = "000".$result[cnt];
$wr_10 = $today."".substr($count_a, -3);

$count_a는 몆번째 인지 찾아서 앞에 000을 붙이는거라 이해 했고요
wr_10에 오늘 날짜와 와 count_a의 값을 넣어 준것이자나요?
그럼 $wr_10 = $today."".$count_a; 로 하지 않고,
왜 뒤에서 -3을  했는지 ?
그냥 제 생각에는 앞에서 000 3개를 넣어으니 값을 넣어 줄때 -3 만큼
빼준거라 생각은 되는데 그럼 000은 표시가 안되자나요 ?

이건 제 생각이고요...그래서 이부분을

$count_a = "000".$result[cnt];
$wr_10 = $today."".$count_a; 걍 이렇게 바꿔밨어요....

그럼 wr_10이 날짜+000숫자      그러니깐
*** 개인정보보호를 위한 전화번호 노출방지 *** 000 01 모 이런식으로 나와야 되는거 아닌지요 ?

근데 
$count_a = "000".$result[cnt];
$wr_10 = $today."".$count_a;
게 해도 위에 치에님의 원소스와 똑같이 표시 되는데요... 제가 잘못이해 한건가요 ?
그누보드에서 wr_is_comment는 이게 코멘트인지 게시글인지를 나타내구요.
0 은 보통 1비트로 1이면 참 0이면 거짓을 나타냅니다. 가장 최소한의 용량으로 두가지 상태를 나타내는거지요. wr_reply 는 답글일경우를 대비해서 뭐 플래시 depth 비슷한 개념으로 알고있고요, "" 라는건 답글이 아니라는거지요.
그래서 치에님은 아마 코멘트가 아닌 게시글 중에서 답글(이건 주문이랑은 별개로 관리되는?)을 제외한
개수를 주문 수로 다루하신듯 합니다. 그리구
$count_a = "000".$result[cnt]; 이부분 보면 고민하신 흔적이 보이는데요.
일단 앞에 000을 세자리 붙여주면 0~9까지는 0000~0009 로 똑같은 결과입니다.
근데 10이 넘어가면? 00010 으로 다섯자리가 되어버립니다.
substr(문자,-3) 의 의미는 뒤에서부터 네자리(인지 세자리인지 헷갈리지만 의도상 네자리가 맞는거 같네요.) 를 뽑으란 것이고, 결국 00010 도 0010 이 되기 때문에 원하는 결과가 되겠지요.
치에님 귀엽네요. 숫자붙이시려고 고심하신 ㅠㅠ
저렇게 만들어 쓰는것이  오히려 속도 면에서 낫고 좋습니다. 하지만
자릿수가 커지면 앞에 무한정 0을 붙일수도 없고,
변수 일일히 리셋해주려면 코딩하기 불편하기 때문에

$count_a = sprintf("%04d",$result['cnt']);
이렇게 하면 자동으로 0을 채워줍니다.
%05d 하면 5자리 %06d 하면 6자리...
전체 24 |RSS
그누4 질문답변 내용 검색

회원로그인

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