2014-11-01 110 views
0

我忙於開發一個包含博客的網站。現在我想添加一個dev_mode檢查。如果我正在編輯文章頁面,檢查應該返回'true',以便我可以發佈消息,如'此頁面正在編輯。請待會再過來'。我想對所有頁面只有一個功能,但它得到安寧我沒有運氣..全局設置php函數

我目前的功能:

function development_mode($mysqli, $dev_blog=false, $dev_article=false, $dev_cv=false, $dev_contact=false, $dev_bio=false, $dev_cpanel=false, $get_development_status=false) { 
    $get_development_status = mysqli_query($mysqli,"SELECT * FROM global_settings") or die (mysqli_error($mysqli)); 
    $status = mysqli_fetch_array($get_development_status); 
    $dev_blog = $status['dev_blog']; 
    $dev_article = $status['dev_article']; 
    $dev_cv = $status['dev_cv']; 
    $dev_contact = $status['dev_contact']; 
    $dev_bio = $status['dev_bio']; 
    $dev_cpanel = $status['dev_cpanel']; 

    if ($dev_blog == 'yes') { 
     return true; 
    } else { 
     return false; 
    } 

    if ($dev_article == 'yes') { 
     return true; 
    } else { 
     return false; 
    } 

    if ($dev_cv == 'yes') { 
     return true; 
    } else { 
     return false; 
    } 

    if ($dev_contact == 'yes') { 
     return true; 
    } else { 
     return false; 
    } 

    if ($dev_bio == 'yes') { 
     return true; 
    } else { 
     return false; 
    } 

    if ($dev_cpanel == 'yes') { 
     return true; 
    } else { 
     return false; 
    } 
} 

這是我想如何顯示訪問者「來了回來以後」時,文章頁面正在被編輯的消息

if (development_mode($mysqli, $dev_article) == true) { 
    echo "This page is being edited. Come back later!"; 
    die(); 
} else { 
//Content 
} 

謝謝:)

+0

對不起,我們不能提供你想要實現的邏輯。你必須在你的問題中添加更多細節。但是一見鍾情:第一個if/else語句之後的代碼將會_never_被執行,因爲_always_函數在該語句中返回。要麼給出真或假,但它永遠不會繼續下去。 – arkascha 2014-11-01 14:54:11

回答

1

除了dev_blog之外,它不會按預期的方式工作,因爲它不考慮您傳遞給它的值作爲參數,在$dev_article示例中。

不管你通過什麼變化,該網頁會永遠執行第一if

if ($dev_blog == 'yes') { 
    return true; 
} else { 
    return false; 
} 

,並返回由查詢返回的設置dev_blogtruefalse依賴。

原樣,執行不再繼續檢查$dev_article$dev_contact$dev_bio$dev_cpanel不管他們的價值觀是什麼,或者什麼參數,你試圖傳遞給development_mode()功能。


解決方法:正確檢查將嘗試像下面

的一種方法,使用列的字符串索引調用函數:

if (development_mode($mysqli, 'dev_article') == true) { 

,然後在功能有:

function development_mode($mysqli, $status_column) { 
    $get_development_status = mysqli_query($mysqli,"SELECT * FROM global_settings") or die (mysqli_error($mysqli)); 
    $status = mysqli_fetch_array($get_development_status); 

    $dev_status = $status[$status_column]; 

    if ($dev_status == 'yes') { 
     return true; 
    } else { 
     return false; 
    } 
} 

thi s可以進一步優化,只返回所需的列,因爲你只關心那個列,但你明白了兩者之間的不同之處。

+0

我不知道..看起來像我必須爲每個頁面創建一個函數,不是嗎?感謝您的回答和解釋。不勝感激! – user3723069 2014-11-01 14:55:58

+0

不用擔心,我用一個快速的例子更新了答案,說明如何實現這個解決方案。 – Kypros 2014-11-01 15:00:58

+1

真棒,讓它工作!謝謝! – user3723069 2014-11-01 15:06:07