회사의 모든 직원 (hr_employees)을 포함하는 테이블이 있습니다. 이 테이블 외에도 시작 날짜와 종료 날짜가 모두있는 다른 테이블과 계약 유형 (hr_employees_status)이 있습니다.루프가 올바른 값을 쓰지 않음
내가 얻은 데이터를 사용하여 계약 유형 (1 = 검정색, 0 = 파란색, 녹색, 흰색)에 따라 색상이 지정된 엑셀 스프레드 시트에 1 또는 0 (1 영구 기반, 0 기타) 회색 또는 빨간색), 매월 (2005 년 5 월부터 현재까지). 어떤 셀에 들어가야하는지 결정하는 방법은 case 절을 사용하는 것이며, hr_employee_status 테이블의 현재 상태를 살펴 보는 것입니다.
루프가 잘 돌아가고 올바르게 수행해야하는 작업의 99 %를 처리합니다. 유일한 문제는 직원이 임시 계약에서 영구적 인 계약으로 이전하자마자 셀에 올바른 값을 쓰지 않는 경우가 종종 있습니다.
코드를 데이터베이스에서 단지 1 년에 한 번만 가져 와서 (01을 01로 설정) 코드를 변경하여 월 및 연도가 모두 셀에 쓰기 위해 필요하기 때문에, 올바른 셀에 올바른 데이터를 쓸 것입니다. 그러나 아무 소용이 없습니다.
switch ($dates['status']) {
case '0':
$color = 'blue';
$cellcontent="0";
break;
case '1':
$color = 23;
$cellcontent="0";
break;
case '2':
$color = 'black';
$cellcontent="1";
break;
case '3':
$color = 'green';
$cellcontent="0";
break;
case '4':
$color = 'red';
if(mysql_num_rows($query) > 2)
$cellcontent = "0";
else {
$cellcontent="1";
}
break;
}
if($s['state'] == '4')
$color = 'red';
$format_content =& $workbook->addFormat(array('align' => 'center', 'size' => 11, 'numformat' => '@', 'fontfamily' => 'Calibri', 'left' => 1, 'bottom' => 1, 'right' => 1, 'color' => $color));
for($f = $start_at; $f <= $start_at+$count; $f++) {
$totalmonths = $totalmonths + $cellcontent;
$worksheet->write($k,15+$f,$cellcontent,$format_content);
}
$date
는 DB에서 수신 한 결과입니다 : 내가 게시 어떤 코드를 모르는
, 그래서 여기에 계약의 유형을 결정하고 엑셀 시트에 기록 루프입니다. $start_at
은 직원이 계약 유형으로 시작한 날짜이므로 표시 할 달을 결정합니다. $count
은 시작 날짜와 종료 날짜 (월 금액)의 차이입니다.
양식을 임시 계약으로 전환 할 때 올바른 날짜에 영구적으로 시작하지 않는 이유는 무엇입니까?
다른 정보가 필요하면 알려 주시기 바랍니다.
편집 1 : - DaveRandom 올렉의 의견에 응답
@DaveRandom : hr_employees
은 다음과 같습니다
------------------------------------------
|employee_id|name|surname|otherinfo|state|
|1 |Foo |Bar | ******* | 1 |
|2 |Ben |Smith | ******* | 1 |
------------------------------------------
hr_employees_status
은 다음과 같습니다
------------------------------------------
|employee_id|from_date |to_date |status|
|1 |2006-07-12|2009-08-11| 0 |
|1 |2009-08-12|0000-00-00| 1 |
|2 |2009-07-01|0000-00-00| 1 |
------------------------------------------
그리고 엑셀 시트가 출력됩니다
다음과 같이Name Surname Start Date *dates* June-06 July06 ->- July09 Aug09 Sep09
Foo Bar 2006-07-12 *empty* 0 ->- 0 1 1
Ben Smith 2009-07-01 *empty* *empty* ->- 1 1 1
@Oleg
$start_at
은 다음과 같습니다round(((substr($dates['from_date'],0,4) * 12) + substr($dates['from_date'],5,2)) - ((substr($start_date,0,4) * 12) + substr($start_date,5,2))) + 1; // $dates is a loop through the hr_employee_status table
위를 참조하십시오.
$dates
은 hr_employee_status 테이블을 통한 루프입니다. 나는 그 상태가 100 % 확신합니다.유형 저글링에 대해 설명해주세요. status에있는 모든 값은 varchar입니다. (왜 그런지 묻지 않습니다. 지금 보니 어리석은 짓처럼 보입니다 ...)
DB의 예제 데이터와 현재/원하는 스프레드 시트 출력을 표시 할 수 있습니까? – DaveRandom
* "때로는 올바른 값을 셀에 쓰지 않습니다."* 대신 무엇을 쓰나요? 또한 로그의 모든 오류/경고? – Oleg
유형 저글링은 기본적으로 자동 변수 유형 변환입니다. 예를 들어 String을 Integer와 비교할 때 String은 자동으로 Integer로 변환됩니다. 따라서 PHP에서 :'var_dump (0 == "a"); // true'. – Oleg