날짜계산 코드 쿼리? 업데이트가 안되서 질문드립니다.
본문
제가 부족함에 고수님들이 소중한 시간을 내주셔서 답변주신 덕분에 코드를 어느정도 완성하고 있습니다.
결제 버튼을 누르면, 사용할수 있는 기간이 늘어나는 코드를 제작하고 있습니다.
아래와 같은 기능을 구현하고자 합니다.
1. 예)기간이 없는 회원일 경우 : 3달 버튼 클릭시 현재 날짜로 부터 3달 기간 증가 -> 증가된 기간 필드 MB_3에 넣기)
2) 예) 기간이 이미 있는회원인경우 : 3달 버튼클릭시 기간만료시점(기존 저장된 MB_3값기준)으로 부터 3달 기간증가 -> 증가한 기간값 다시 MB_3로 업데이트하기
하기와 같이 코드를 짯는데 제가 아래코드 중 노란색 해당부분을 mb_3로 다시 넣어서 재순환 해야하는데
그렇게 하면 작동이 안됩니다.../
그래서 시도해본 방법이 mb-5값을 다시 mb_3로 재로드 하는 방법 도 초록색 코드처럼 해보았으나 작동이 안됩니다 ㅠㅠ
제가 말을 두서없이 설명드려서 잘 모르실 경우 말씀해주세요 ㅠㅠ
글 읽어주셔서 감사합니다.
sql_query("update {$g5['member_table']} set mb_3 = '{$member['mb_5']}'");
//버튼쪽
<a href="#" onclick="M3000(),M3(); return false;"> 시리얼링크 3000원,3달 버튼 </a></br>
<a href="#" onclick="M6000(),M6(); return false;"> 시리얼링크 6000원,6달 버튼 </a></br>
<a href="#" onclick="M12000(),M12(); return false;"> 시리얼링크 12000원,12달 버튼 </a></br></br></br>
//스크립트 문
function M3000() {
if (confirm('구매하시겠습니까?')) {
$.post("",{
addPoint: "-3000"
},function(dats,status){
alert("3000원 감소");
location.reload();
});
}
}
function M3() {
if (confirm('day')) {
$.post("",{
month: "+3"
},function(dats,status){
alert("3달 증가");
});
window.location.reload();
}
}
///php쪽
<?php
$timenow = date("Y-m-d"); //현재 날짜
$timetarget = $member['mb_3']; //mb_3
$timetargetk = $member['mb_4']; //mb_4
$str_now = strtotime($timenow); //현재날짜
$str_target = strtotime($timetarget); //mb3날짜
$str_targetk = strtotime($timetargetk);
if($str_now > $str_target) {
echo "이전";
} elseif($str_now < $str_target) {
echo "이후";
} else {
}
?>
<?php
if ($_POST['addPoint']||$_POST['month']) {
if($str_now > $str_target) { //현재날짜>mb_3날짜 (기간이 없는 회원인경우)
$addpoint = $_POST['addPoint'];
$month = $_POST['month'];
$daye = date("Y-m-d", strtotime($month.'month'));
insert_point($member['mb_id'] , $addpoint, '구매차감', G5_TIME_YMDHIS, $day);
if ($is_member){
$result = sql_query("update {$g5['member_table']} set mb_3 = '{$daye}' where mb_id='{$member['mb_id']}' ");
if ($result == true) {
$member['mb_3'] = $daye;
}
}
}
else if($str_now < $str_target) { //현재날짜<mb_3날짜 (기간이 이미있는회원인경우)
$addpoint = $_POST['addPoint'];
$month = $_POST['month'];
$daye = strtotime($member['mb_3'].$month.'month'); //mb3(기존기간에)에 개월(month)값더하기
insert_point($member['mb_id'] , $addpoint, '구매차감', G5_TIME_YMDHIS, $day);
$daye2 = date("Y-m-d", $daye); //개월(month) mb3를 y-m-d형식으로 보여주기
if ($is_member){
$result = sql_query("update {$g5['member_table']} set mb_5 = '{$daye2}' where mb_id='{$member['mb_id']}' ");
if ($result == true) {
$member['mb_5'] = $daye2;
} //최종목적은 mb_5가 아닌 mb_3를 재 업데이트 시키고자 합니다. ㅠㅠ
}
}
exit;
}
?>
답변 4
mb_5 사용하지 않고 한번에 처리 가능합니다.
$member['mb_3'] 는 update문 처리 이후 자동갱신되므로 특별히 처리를 해주지 않아도 됩니다.
if ($member['mb_3']) { // mb_3 값이 있으면
$sql = "update {$g5['member_table']} set mb_3 = date_add(mb_3, interval 3 month) where mb_id='{$member['mb_id']}' ";
sql_query($sql);
} else {
$sql = "update {$g5['member_table']} set mb_3 = curdate() where mb_id='{$member['mb_id']}' ";
sql_query($sql);
}
update {$g5['member_table']} set mb_3 = ifnull( str_to_date(mb_3), curdate()) interval 1 month where ...
이런 함수를 검토해 보세요.
https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html#function_str-to-date
위 방식으로 처리하기보다는 소스를 간단하게 처리할수 있는 방법이 있는데
해당 방법을 처리하기 어려우시다면 제작의뢰로 맡기시면 효율적이지 않을까 싶습니다.
$daye = strtotime($member['mb_3'].' '.$month.'month');
여기 띄어쓰기 추가하시고..
$result = sql_query("update {$g5['member_table']} set mb_3 = '{$daye2}' where mb_id='{$member['mb_id']}' ");
mb_3를 바로 업데이트해도 될 것 같습니다.