2013-01-16 61 views
1

我試圖通過WHILE的幫助一個接一個地添加兩個DB_QUERY的結果,但得到的結果只有一個而當我下載CSV時,我在哪裏打印最終的變量。這裏是代碼 -兩個WHILE裏面的函數 - 沒有執行一個

<?php 

function getPaidScoutUsers($nid) { 
    $csv_output = ''; 
    $all_paid_scouts_entry = db_query("SELECT * FROM {signup_event} WHERE event_nid = %d",$nid); 
    while($paid_user = db_fetch_object($all_paid_scouts_entry)){ 
    $role_name  = 'Scout'; 
    $profile  = content_profile_load(scout_profile, $paid_user->attendee_uid); 
    $firstname  = $profile->field_sfname[0]['value']; 
    $lname   = $profile->field_last_name[0]['value']; 
    $patrol  = get_term_name($profile->field_scout_patrol[0]['value']); 
    $position  = get_term_name($profile->field_scout_rank[0]['value']);  
    $homephone  = ""; 
    $cellphone  = ""; 
    $email   = ""; 
    $paid_status = 'Paid'; 
    $payment_date = date_format_date($paid_user->created_date[0]['value'],$type = 'custom', $format = 'm/d/Y'); 
    $csv_output .= "\"".$role_name."\"".","."\"".$lname ."\"".","."\"".$firstname."\"".","."\"".$patrol."\"".","."\"".$position."\"".","."\"".$homephone."\"".",".$cellphone.",".$email.","."\"".$paid_status."\"".","."\"".$payment_date."\""."\r";  
    } 
    return $csv_output; 
} 

function getUnpaidUsers($nid) { 
    $csv_output = ''; 
    $all_unpaid_scout_list = db_query("SELECT * FROM users 
            INNER JOIN users_roles ON users.uid = users_roles.uid 
            WHERE users_roles.rid =7 
            AND users.uid NOT IN (
            SELECT attendee_uid FROM signup_event WHERE event_nid = %d) 
            ORDER BY name ASC",$nid); 
    while($unpaid_user = db_fetch_object($all_unpaid_scout_list)){ 
     $role_name  = 'Scout'; 
     $profile  = content_profile_load(scout_profile, $unpaid_user->uid); 
     $firstname  = $profile->field_sfname[0]['value']; 
     $lname   = $profile->field_last_name[0]['value']; 
     $patrol  = get_term_name($profile->field_scout_patrol[0]['value']); 
     $position  = get_term_name($profile->field_scout_rank[0]['value']); 
     $homephone  = trim($profile->home_phone[0]['value']); 
     $cellphone  = trim($profile->cell_phone[0]['value']); 
     $email   = $profile->email_1; 
     $paid_status = 'Unpaid'; 
     $payment_date = ''; 
     $csv_output .= "\"".$role_name."\"".","."\"".$lname ."\"".","."\"".$firstname."\"".","."\"".$patrol."\"".","."\"".$position."\"".","."\"".$homephone."\"".",".$cellphone.",".$email.","."\"".$paid_status."\"".","."\"".$payment_date."\""."\r"; 
    } 
    return $csv_output; 
} 

function event_signup_download_detail($nid) 
{ 
    //global $user; 
    module_load_include('inc', 'signup_event', 'event_signup_view'); 
    $csv_output = ''; 
    $csv_output .= "Role,Last name,First Name,Patrol,Position,Home phone,Cell Phone,Email,Payment Status,Payment Date\n";   
    $nid = 2001; 

    // add the paid users to the csv 
    $csv_output .= getPaidScoutUsers($nid); 

    // get unpaid users, add them to the csv 
    //$csv_output .= getUnpaidUsers($nid); 

    echo $csv_output; 

    header("Content-type: application/vnd.ms-excel"); 
    header("Content-Disposition: attachment; filename=\"Registration_Dues_Information.csv\""); 
    print $csv_output; 
    exit; 

} 

我在哪裏錯了?任何人都可以幫忙嗎?

+0

echo $ csv_output是否顯示正確的結果? – cartina

+0

你可以添加var_dump(db_fetch_object($ all_paid_scouts_entry));在進入while循環之前?它是否返回一個對象數組? – thecodeassassin

+0

我不能告訴你在這裏使用了哪個數據庫接口,但許多接口一次只能保持一個資源句柄處於活動狀態。所以可能會發生這樣的情況:一個接一個地執行兩個'db_query'調用基本上拋出一個。哪些查詢正在添加,哪些不顯示?嘗試在第一個while循環之後移動第二個'db_query'調用。 –

回答

0

嘗試將功能拆分爲單獨的方法。

function getPaidScoutUsers($nid) { 

    $csv_output = ''; 
    $all_paid_scouts_entry = db_query("SELECT * FROM {signup_event} WHERE event_nid = %d",$nid); 
    while($paid_user = db_fetch_object($all_paid_scouts_entry)){ 
    $role_name  = 'Scout'; 
    $profile  = content_profile_load(scout_profile, $paid_user->attendee_uid); 
    $firstname  = $profile->field_sfname[0]['value']; 
    $lname   = $profile->field_last_name[0]['value']; 
    $patrol  = get_term_name($profile->field_scout_patrol[0]['value']); 
    $position  = get_term_name($profile->field_scout_rank[0]['value']); 
    $homephone  = trim($paid_user->home_phone); 
    $cellphone  = trim($paid_user->cell_phone); 
    $email   = $profile->email_1; 
    $paid_status = 'Paid'; 
    $payment_date = date_format_date($paid_user->created_date[0]['value'],$type = 'custom', $format = 'm/d/Y'); 
    $csv_output .= "\"".$role_name."\"".","."\"".$lname ."\"".","."\"".$firstname."\"".","."\"".$patrol."\"".","."\"".$position."\"".","."\"".$homephone."\"".",".$cellphone.","."\"".$paid_status."\"".","."\"".$payment_date."\""."\r";  
    } 

    return $csv_output; 
} 

function getUnpaidUsers($nid) { 
    $csv_output = ''; 
    $all_unpaid_scout_list = db_query("SELECT * FROM users 
            INNER JOIN users_roles ON users.uid = users_roles.uid 
            WHERE users_roles.rid =7 
            AND users.uid NOT IN (
            SELECT attendee_uid FROM signup_event WHERE event_nid = %d) 
            ORDER BY name ASC",$nid); 
    while($unpaid_user = db_fetch_object($all_unpaid_scout_list)){ 
     $role_name  = 'Scout'; 
     $profile  = content_profile_load(scout_profile, $unpaid_user->uid); 
     $firstname  = $profile->field_sfname[0]['value']; 
     $lname   = $profile->field_last_name[0]['value']; 
     $patrol  = get_term_name($profile->field_scout_patrol[0]['value']); 
     $position  = get_term_name($profile->field_scout_rank[0]['value']); 
     $homephone  = trim($profile->home_phone[0]['value']); 
     $cellphone  = trim($profile->cell_phone[0]['value']); 
     $email   = $profile->email_1; 
     $paid_status = 'Unpaid'; 
     $payment_date = ''; 
     $csv_output .= "\"".$role_name."\"".","."\"".$lname ."\"".","."\"".$firstname."\"".","."\"".$patrol."\"".","."\"".$position."\"".","."\"".$homephone."\"".",".$cellphone.",".$email.","."\"".$paid_status."\"".","."\"".$payment_date."\""."\r"; 
    } 


    return $csv_output; 
} 

function event_signup_download_detail($nid) 
{ 
    global $user; 
    module_load_include('inc', 'signup_event', 'event_signup_view'); 
    $csv_output = ''; 
    $csv_output .= "Role,Last name,First Name,Patrol,Position,Home phone,Cell Phone,Email,Payment Status,Payment Date\n";   

    // add the paid users to the csv 
    $csv_output .= getPaidScoutUsers($nid); 

    // get unpaid users, add them to the csv 
    $csv_output .= getUnpaidUsers($nid); 

    header("Content-type: application/vnd.ms-excel"); 
    header("Content-Disposition: attachment; filename=\"Registration_Dues_Information.csv\""); 
    print $csv_output; 
    exit; 

} 

注:我沒有測試此代碼

+0

我得到了這個問題,但最好是通過分解它們來解決這個問題。 – RajeevK

+0

@RajeevK好吧,如果它的作品讓我知道:) – thecodeassassin

+1

我已經使它的工作和你的分裂功能的想法做得很好...我接受這個作爲答案.. 謝謝.. – RajeevK

0
while($unpaid_user = db_fetch_object($all_unpaid_scout_list)){ 
     $role_name 1 = 'Scout'; 
     $profile1  = content_profile_load(scout_profile, $unpaid_user->uid); 
     $firstname1  = $profile->field_sfname[0]['value']; 
     $lname1   = $profile->field_last_name[0]['value']; 
     $patrol1  = get_term_name($profile->field_scout_patrol[0]['value']); 
     $position1  = get_term_name($profile->field_scout_rank[0]['value']); 
     $homephone1  = trim($profile->home_phone[0]['value']); 
     $cellphone1  = trim($profile->cell_phone[0]['value']); 
     $email1   = $profile->email_1; 
     $paid_status1 = 'Unpaid'; 
     $payment_date1 = ''; 
     $csv_output .= "\"".$role_name1."\"".","."\"".$lname1 ."\"".","."\"".$firstname1."\"".","."\"".$patrol1."\"".","."\"".$position1."\"".","."\"".$homephone1."\"".",".$cellphone1.",".$email1.","."\"".$paid_status1."\"".","."\"".$payment_date1."\""."\r"; 
    } 

echo $csv_output; 

只需更換第二while循環與這一個。

+0

它不起作用 – RajeevK

+0

echo $ csv_output是什麼;打印? – cartina

+0

和以前一樣.. – RajeevK