2012-03-13 51 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()類型。一旦它滿足 - $ dateObj = date_create(「@ $ qucls」),$ dateObj返回false。我似乎無法找到訣竅。

回答

1

在查看代碼時,看起來$qucls是一個數組(基於行$qucls[$i++] = $row[1];)。 date_create不接受數組作爲第一個參數。

@標誌將指示date_create您正在傳遞unix時間戳。

我建議檢查以查看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"); 
} 

你可以做的print_r之前和循環之後,以確保所有$qucls值正在更新中...

+0

感謝dleiftah。 $ qutype是switch case中的單詞數組,每日,每週等。Theys是字段中的實際單詞。 – defacto7 2012-03-14 01:10:34

+0

對不起,編輯在我完成之前就超時了。謝謝dleiftah。 $ qutype只是開關案例中的一個詞,「每日」,「每週」等;他們是該領域的實際詞彙。查詢之後,$ qucls是表示日期的數字數組,雖然它們不是日期時間類型,只是int。 $ qucls中的信息在這一點上是正確的。在開關程序後,它會產生上述錯誤。這個想法只是根據$ qutype中的單詞添加一天或一週等到$ qucls中的日期數組。 – defacto7 2012-03-14 01:19:50

+0

這聽起來像你需要循環的值,並在他們每個人上執行操作......我已經編輯了我的答案和建議...... – keithhatfield 2012-03-14 13:39:16