해결이 안 되고 미련이 남아 다시 질문을 올립니다

해결이 안 되고 미련이 남아 다시 질문을 올립니다

QA

해결이 안 되고 미련이 남아 다시 질문을 올립니다

본문

안녕하세요?

해결이 안 되고 미련이 남아 다시 질문을 올립니다. 죄송합니다...ㅜㅜ

 

여분필드 wr_2를 이용하여 list.skin.php에서 다음과 같이 하였습니다.
마감일 입력 시에는 오늘이라면 '19-01-05' 이렇게 값을 넣었고 정해지지 않은 것은 그냥 문자로 '채용시'라고 넣었습니다.

 

<?php
if(strtotime($list[$i]['wr_2'] ) - G5_SERVER_TIME > (86400 * 1)){
    echo $list[$i]['wr_2'] ;

} else if(strtotime($list[$i]['wr_2'] ) - G5_SERVER_TIME < (86400 * 1)){
    echo '마감임박';

} else if( is_string($list[$i]['wr_1']) == true ){
echo '채용시';

} else{
    echo $list[$i]['wr_2']  ;
}
?>


즉, 바라는 결과는
하루 이상이 남으면 '연-월-일'로
하루 미만이 남으면 '마감임박'으로
'채용시'라고 문자로 입력한 곳은 그냥 '채용시'로 나타내고 싶습니다. 


위에처럼 하였더니 다른 것은 잘 되는 것 같은데...'채용시'가 '마감임박'으로 나타납니다.
어떻게 해야 하는지요?

 

즐거운 주말 되시기 바랍니다.
감사합니다.

이 질문에 댓글 쓰기 :

답변 4


$left = strtotime($list[$i]['wr_2']) - G5_SERVER_TIME;
if($list[$i]['wr_2'] == "채용시") {
    echo "채용시";
} else {
    echo $left >= 86400 ? $list[$i]['wr_2'] : "마감임박";
}

감사합니다.
약 200개 리스트 중 1~2개 뺴 놓고는 전체적으로는 잘 됩니다.
1~2개는 제가 다시 "채용시로 "입력하였더니 그것도 잘 됩니다.
새해 복 많이 받으십시오~^^)

조건문의 순서를 바꿔 보세요.

'채용시'의 조건을 위쪽으로..

 

데이타타입이 문자이군요..

조건문을 바꿔 보세요.
1. wr_2 값이 '채용시' 이면, 그냥 그대로 뿌려주고,
2. 날짜시간 체크해서 echo
3. 나머지는 그냥 echo

if(strtotime($list[$i]['wr_2'] ) - G5_SERVER_TIME > (86400 * 1)){
    echo $list[$i]['wr_2'] ;

} else if(strtotime($list[$i]['wr_2'] ) - G5_SERVER_TIME < (86400 * 1)){
    echo '마감임박';

위 두개로 날짜조건이 충족되고 있기 때문에

아래에 위치하고 있는 else if문이나 else문은 더 이상 수행되지 않고 if문을 벗어 나게 되니

당근 '채용시'는 나타나지 않는 로직입니다.

그리고 '채용시'에 해당하는 조건은 위것들과는 전혀 다른 것이기 때문에 거기에 끼어 있으면

안되는 겁니다.

 

아래 처럼 바꿔야겠죠.

 

if ( !empty($list[$i]['wr_1']) && is_string($list[$i]['wr_1'])) {
    echo '채용시';
}

if (strtotime($list[$i]['wr_2'] ) - G5_SERVER_TIME >= (86400 * 1)) {
    echo $list[$i]['wr_2'] ;

} else {
    echo '마감임박';

감사합니다. 그대로 적용하였더니 아렇게 나옵니다.

채용시마감임박
채용시19-02-01
채용시마감임박
채용시마감임박
채용시19-01-11
...
그리고, 제가 잘못 적었습니다.
wr_1은 없고 모두 다 wr_2 입니다.

잘된거 아닌가요? 원하시는대로 '채용시'와 '마감임박' 또는 날짜가 나와주니 말이죠.
그런데 wr_2는 없고 wr_1만 있다는가요?

그렇다면 '채용시' 아니면 '마감임박' 아니면 '그냥 날짜' 이 셋중에 하나가 찍혀야 한다는 건가요?

허당빵님 질문에 채택 받기 겁나 어렵소. 레벨 올려 쓸데도 없는데
그냥 오기가 날라하요 ㅎㅎㅎ
저도 올리신 소스대로 무심결에 올렸다 wr_2를 다시 wr_1으로 수정해 다시 올립니다 ㅎㅎ

if (is_string($list[$i]['wr_1'])) {
    echo '채용시';
} else {
    if (strtotime($list[$i]['wr_1'] ) - G5_SERVER_TIME >= (86400 * 1))
        echo $list[$i]['wr_1'] ;
    else
        echo '마감임박';
}

로직에서 

1. wr_1 이 문자열이면 '채용시' 로 표시하는것으로 보이는데

2. wr_2 의 값은 날짜 입니다.

 

그러면 wr_1의 값은 무엇인가요?

 

wr_2에 기록된 일자가 날짜인지 아닌지 정확하지 않은상황입니다.

 

 

현 출력화면이 문제라기 보다는

 

로직 설계에서 먼저

 

wr_1에는 채용시/일자 두개중 하나로 값을 선택하게 입력받고

wr_1 의 값이 '채용시' 라면

   출력을 '채용시' 로 표기하고

wr_1의  값이 '일자' 라면

   wr_2의 값에 일자가 오늘이면 '마감임박'

   wr_2의 값이 오늘 이후이면 wr_2 출력

   wr_2의 값이 오늘보다 이전날짜이면 '마감' 

으로 로직을 재정리 하시는게 맞는것 같습니다.

 

이 때 wr_1의 값을 '채용시', '날자' 로 하시는것도 좋고

좀더 간결한 로직을 위해서 wr_1의 값을 0은 날짜('기본값'), 1은 채용시 형태로 하면

 

if ($list[$i]['wr_1'])  {   // <-- 숫자로 한경우 0이면 날짜는 거짓으로 작동, 1이면 채용시는 채용시를 출력

    echo "채용시";

로 처리하시는게 더 효율적이 아닐까 싶습니다.

 

 

-----------------

 

 

위 로직에서 오타로 wr_2가 wr_1로 표기된것이라면

 

평정심님의 의견대로 wr_1에 해당되는 '채용시'는 조건이 선행되어야 합니다.

지정하여 로직을 만들면

답변을 작성하시기 전에 로그인 해주세요.
전체 60
QA 내용 검색

회원로그인

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