2012-03-13 3 views
0

이것은 나를위한 학습 프로젝트이며 이미이 사이트에서 몇 가지 질문을 해주었습니다. 그러나 "스위치"루틴에 문제가있어 내가 소집 할 수있는 지침을 알려 주시면 감사하겠습니다. 이 스위치 루틴은 제안 이었지만 오류가 발생했습니다. 나는 꽤 많은 연구를 해왔으나이 과정을 어떻게 성취 할 수 있는지 아직 알 수 없다. 나는 또한 "@"이 "date_create ("@ $ qucls ")"에서 무엇을 의미하는지 이해하지 못한다. 그것은 그것이 존재하는지 아닌지는 중요하지 않지만 이것이 루틴과 함께 제안되었습니다.오류없이 스위치 루틴을 추가 할 수 없음

질의는 내가 생산하고 싶은 것을 얻는 한 체크 아웃하지만 일단 시간 문자열을 업데이트하려고 시도하면 쿼리가 중단됩니다. 오류는 "date_format()은 매개 변수 1이 DateTime이 될 것으로 예상하고 부울은 ...을 지정합니다". 내가 아는 한 $ qucls는 참/거짓이 아닌 숫자의 문자열이어야합니다. 이 테이블 필드에는 int 형식의 숫자 문자열이 있습니다.

다른 게시물을 반복해서 사용하면 머리를 쓰지 않고 데이터베이스를 변경할 수 없습니다. 캘린더 프로그램에서 이메일 알리미를 만들기 위해 정보를 가져와야합니다. 테이블은 비정상적인 형태와 날짜/시간 문자열로 복잡하게 뒤얽혀 있으므로 여기에 표시되는 것보다이 스크립트에 훨씬 더 많은 부분이 있습니다. 내 과정에서, 이것은 내가 알아 내고있는 곳이며 중부 유럽인에게도 그렇게 나쁘지 않습니다. 올바른 결과를 얻는 프로세스를 파악한 후에 정리를 위해 갈 것입니다.

다음은 스크립트의 해당 부분이다 :

date_default_timezone_set('UTC'); 
$today = date("Ymd"); 
mysql_select_db($dbname); 
$querydel = "SELECT cal_entry_id, cal_type FROM webcal_entry_log WHERE cal_type = 'D'"; 
$delqu = mysql_query($querydel); 
$i = 0; 
while ($row = mysql_fetch_array($delqu, MYSQL_NUM)) { 
    $qudel[$i] = $row[0]; 
} 
$query1 = "SELECT cal_id, cal_name, cal_date, cal_time, cal_type, cal_description FROM webcal_entry WHERE cal_type = 'M' AND cal_date != ' . $today . ' AND cal_id != " . $qudel[$i]; 
$wequ1 = mysql_query($query1); 
while ($row = mysql_fetch_array($wequ1, MYSQL_NUM)) { 
    $quid1[$i] = $row[0]; 
    $quname[$i] = $row[1]; 
    $qutime[$i] = $row[3]; 
    $qudesc[$i] = $row[5]; 

    $query2 = "SELECT cal_id, cal_type FROM webcal_entry_repeats WHERE cal_id = " . $quid1[$i]; 
    $wer1 = mysql_query($query2); 
    if ($row = mysql_fetch_array($wer1, MYSQL_NUM)) {   
     $qutype[$i] = $row[1]; 
    } 

    $query3 = "SELECT cal_id, cal_last_sent FROM webcal_reminders WHERE cal_id = " . $quid1[$i]; 
    $wer2 = mysql_query($query3); 
    if ($row = mysql_fetch_array($wer2, MYSQL_NUM)) { 
     $qucls[$i++] = $row[1]; 
    } 
} 
for ($j = 0; $j < $i; $j++) { 
} 
// date calculations - switch routine 

$dateObj = date_create("@$qucls"); 

switch($qutype) { 
    case "daily": 
    date_add($dateObj, date_interval_create_from_date_string("1 day")); 
    break; 
    case "weekly": 
    date_add($dateObj, date_interval_create_from_date_string("1 week")); 
    break; 
    case "monthly": 
    date_add($dateObj, date_interval_create_from_date_string("1 month")); 
    break; 
    case "yearly": 
    date_add($dateObj, date_interval_create_from_date_string("1 year")); 
    break; 
} 

$qucls = date_format($dateObj, "U"); 

감사합니다!

편집 : $ qucls는 쿼리 루프가 끝난 후 Unix 시간 스탬프 배열을 int() 유형으로 출력합니다. 일단 encouters - $ dateObj = date_create ("@ $ qucls"), $ dateObj false를 반환합니다. 트릭을 찾을 수없는 것 같습니다.

답변

1

코드를 살펴보면 $qucls은 줄 ($qucls[$i++] = $row[1];을 기반으로 함) 인 것으로 나타났습니다. date_create은 첫 번째 매개 변수로 배열을 허용하지 않습니다.

@ 부호는 유닉스 시간 소인을 전달한다는 것을 date_create으로 표시합니다.

을 확인하여 date_create가 적절한 값을 반환하는지 확인하는 것이 좋습니다.

또한 $qutype이 배열 인 것처럼 보입니다. 별로 확인하는 방법 배열을 전달되기 switch 반응하여 ...

당신이 date_create를 호출하기 전에

이 ... 당신이 print_r($qutype)print_r($qucls) 당신이 상대하고있는 데이터의 종류를 알고 있는지 확인해야한다.

그래서, 당신이 이런 식으로 뭔가를 시도하고 있습니다

foreach($qutype as $key => $type){ 
    $time = $qucls[$key]; 
    $dateObj = date_create("@$time"); 

    switch($type) { 
     case "daily": 
     date_add($dateObj, date_interval_create_from_date_string("1 day")); 
     break; 
     case "weekly": 
     date_add($dateObj, date_interval_create_from_date_string("1 week")); 
     break; 
     case "monthly": 
     date_add($dateObj, date_interval_create_from_date_string("1 month")); 
     break; 
     case "yearly": 
     date_add($dateObj, date_interval_create_from_date_string("1 year")); 
     break; 
    } 

    $qucls[$key] = date_format($dateObj, "U"); 
} 

당신은 모든 $qucls 값이 업데이트되고 있는지 확인하기 전에 루프 후 인 print_r을 할 수있는 ...

+0

감사 dleiftah. $ qutype은 스위치 케이스, 매일, 매주 등의 단어 배열입니다.이 필드는 실제 단어입니다. – defacto7

+0

죄송합니다. 편집을 마치기 전에 시간이 초과되었습니다. 고마워 dleiftah. $ qutype은 스위치 케이스에서 "일일", "주간"등의 단어입니다. 그들은 현장에서 실제 단어입니다. 쿼리 후, $ qucls는 datetime 유형이 아니고 날짜 만 나타내는 숫자 배열입니다. $ qucls의 정보는 그 시점에서 정확합니다.스위치 루틴이 끝나면 위에서 언급 한 오류가 발생합니다. $ qutype에있는 단어를 기반으로 $ qucls의 날짜 배열에 일 또는 주 등을 추가하는 것입니다. – defacto7

+0

값을 반복하고 각각의 작업을 수행해야하는 것처럼 들리지만 ... 내 대답을 제안으로 편집했습니다 ... – keithhatfield

관련 문제