2012-08-09 58 views
1

任何人都可以看到我在這裏做錯了嗎? 我試圖根據數據庫中的字段值來包含某個頁面。Php SQL if field.value ='?' include page.php else

我有2個表來檢查,

如果用戶名顯示在table.1和field.units =天inlcude days.php

如果用戶名顯示在table.1和field.units =小時inlcude hours.php

如果用戶名顯示在table.2和field.units =天inlcude days.php

如果用戶名顯示在table.2和field.units =小時inlcude hours.php

$username = $USER->firstname.' '.$USER->lastname; 

    echo $username; 

    $is_academic_result = mysql_query('SELECT * from holiday_entitlement_academic where employee = '.$username.''); 
    $is_business_result = mysql_query('SELECT * from holiday_entitlement_business_manual where employee = '.$username.''); 

    if(mysql_num_rows($is_academic_result) > 0){ 
    while($is_academic = mysql_fetch_array($is_academic_result)) { 
    if ($is_academic['units'] == 'days'){include('days.php');} 
    else if ($is_academic['units'] == 'hours'){include('hours.php');} 
    } 
    } 

    else if(mysql_num_rows($is_business_result) > 0){ 
    while($is_business = mysql_fetch_array($is_business_result)) { 
    if ($is_business['units'] == 'days'){include('days.php');} 
    else if ($is_business['units'] == 'hours'){include('hours.php');} 
    } 
    } 
+2

它可能無助於你的答案,但你應該停止使用'mysql_ *'函數。他們正在被棄用。請使用[PDO](http://php.net/manual/en/book.pdo.php)(自PHP 5.1起支持)或[mysqli](http://php.net/manual/en/book)。 mysqli.php)(自PHP 4.1起支持)。如果你不確定使用哪一個,[閱讀這篇文章](http://stackoverflow.com/questions/13569/mysqli-or-pdo-what-are-the-pros-and-cons)。 – Matt 2012-08-09 12:25:41

+2

您在數據庫中的用戶名是否真的包含' ',如'$ USER->名字中的'。  '。$ USER-> lastname' ??? – 2012-08-09 12:26:14

+0

沒有用戶名不包含 我的不好 – Codded 2012-08-09 13:21:14

回答

1

首先,你不需要做這些操作在while循環中,因爲:如果你沒有對結果有些資源錯誤檢查

// Use double quotes on the string, and single around $username 
$is_academic_result = mysql_query("SELECT * from holiday_entitlement_academic where employee = '$username'"); 
// Same thing... 
$is_business_result = mysql_query("SELECT * from holiday_entitlement_business_manual where employee = '$username'"); 

這些問題將被揭示將只返回一個或零個結果(您正在檢查主鍵,對嗎?)。其次,您的查詢設置不正確 - 您使用的是單引號,但從未逃脫它們。

因此,考慮到這一點,我們做到以下幾點:

$is_academic_result = mysql_query('SELECT * from holiday_entitlement_academic where employee = \'' . $username . '\''); 
$is_business_result = mysql_query('SELECT * from holiday_entitlement_business_manual where employee = \'' . $username . '\''); 

if($is_academic = mysql_fetch_array($is_academic_result)) { 
    switch($is_academic['units']) { 
     case 'days': 
      include_once('days.php'); 
      break; 
     case 'hours': 
      include_once('hours.php'); 
      break; 
     default: 
      break; 
    } 
} else if ($is_business = mysql_fetch_array($is_business_result)) { 
    switch($is_business['units']) { 
     case 'days': 
      include_once('days.php'); 
      break; 
     case 'hours': 
      include_once('hours.php'); 
      break; 
     default: 
      break; 
    } 
} 

請注意應停止使用mysql_*功能。他們正在被棄用。請使用PDO(自PHP 5.1起支持)或mysqli(自PHP 4.1起支持)。如果您不確定要使用哪一個,請致電read this SO article

編輯如果你不確定問題所在,你總是可以echo您的查詢,以確保你傳遞你認爲你傳遞到數據庫(往往不是,當查詢ISN沒有工作,不是這個,或者你的邏輯不好)。

+0

感謝您的回答,效果很好。我看看實施PDO :) – Codded 2012-08-09 13:22:20

+1

@Codded注意到使用'include_once()'而不是'include()'。這將確保您不會多次包含相同的文件(可能包含函數定義)。 – Matt 2012-08-09 13:24:03

1

如果您的用戶名確實包含 (這看起來像一個糟糕的設計),那麼您的查詢中缺少有關$username附近的引號。正如您現在所知道的那樣,語法問題在最後留下單引號並且根本不引用$username

if (!$is_academic_result) { 
    // Query problem 
    echo mysql_error(); 
} 
// Same for the other query...