2013-03-25 15 views
0

我有一個暫停布爾每個成員的工作人員。當顯示錶中的工作人員時,我想顯示文字「SUSPENDED」或「NOT SUSPENDED」而不是1或0.如果在一個WHILE(使用未定義的常量)

我一直收到錯誤, 注意:使用未定義的常量Staff_Suspension--假定爲'Staff_Suspension ' 我確定這是簡單的即時通訊相當新的PHP,只是卡住了,不想浪費任何時間試圖解決這個問題,並沒有得到任何地方。幫助讚賞

while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) 
{ 
    echo "\t<tr>\n"; 
     echo "\t\t<td> $row[Staff_ID] </td>\n"; 
     echo "\t\t<td> $row[Staff_Forename] </td>\n"; 
     echo "\t\t<td> $row[Staff_Surname] </td>\n"; 
     echo "\t\t<td> $row[Staff_Email] </td>\n"; 
     echo "\t\t<td>"; 

     if ($row[Staff_Suspension] == 1){ 
      echo 'Suspended'; 
     } else if ($row[Staff_Suspension] == 0){ 
      echo 'Not Suspended'; 
     } 

     echo "</td>\n"; 
     echo "\t\t<td> $row[Staff_Delete_Permissions] </td>\n"; 
    echo "\t</tr>\n"; 

} 
+2

你看過PHP手冊嗎? http://php.net/manual/en/language.types.array.php - 你必須引用用作數組索引的字符串。 – patrickmdnet 2013-03-25 01:57:41

+0

當然,那是當你工作到凌晨2點時會發生什麼事情。歡呼 – Kam 2013-03-25 02:05:04

回答

3

您必須引用索引。否則,PHP會假定您已經有defined a constant,名稱爲Staff_Suspension。如果不存在這樣的常量,則它假定你打算指定一個字符串文字。引用帶走任何猜測工作(和,因此,任何通知):

if ($row['Staff_Suspension'] == 1) { 
    echo 'Suspended'; 
} elseif ($row['Staff_Suspension'] == 0) { 
    echo 'Not Suspended'; 
} 

,或者簡化爲:

echo $row['Staff_Suspension'] ? 'Suspended' : 'Not Suspended'; 
+0

你爲什麼要用引號包裝它?這是應該註釋的內容 – 2013-03-25 02:05:42

+0

@Daryl,錯誤消息已經描述了爲什麼它必須在引號中(PHP首先檢查是否引用常量)。 – webbiedave 2013-03-25 02:08:27

+0

運算已經指定他是因爲已經使用PHP一會兒知道這個問題誰人們新的PHP所以我已經包括了一個大致的輪廓,爲什麼這是必需的,新手可能不明白爲什麼 – 2013-03-25 02:11:33

3

答:

while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) 
{ 
    echo "\t<tr>\n"; 
     echo "\t\t<td>". $row['Staff_ID'] ".</td>\n"; 
     echo "\t\t<td>". $row['Staff_Forename'] ."</td>\n"; 
     echo "\t\t<td>". $row['Staff_Surname']". </td>\n"; 
     echo "\t\t<td>". $row['Staff_Email'] ".</td>\n"; 
     echo "\t\t<td>"; 

     if ($row['Staff_Suspension'] == 1){ 
      echo 'Suspended'; 
     } else if ($row['Staff_Suspension'] == 0){ 
      echo 'Not Suspended'; 
     } 

     echo "</td>\n"; 
     echo "\t\t<td>". $row['Staff_Delete_Permissions'] ".</td>\n"; 
    echo "\t</tr>\n"; 

} 

粗略地解釋

使用常量c omes主要來自define();你不需要用於恆定值可變

您正在被呈現這個錯誤的原因來自於行:

if ($row[Staff_Suspension] == 1){ 
     echo 'Suspended'; 
    } else if ($row[Staff_Suspension] == 0){ 
     echo 'Not Suspended'; 
    } 

因爲你指定的陣列的關鍵由名字。你應該用引號把它包裹起來,雙倍或單一取決於你。一個恆定的

實施例:

define ('Name', 'ConstantValue'); 
echo Name; 

這將輸出:ConstantValue

現在

,從閱讀以上:

http://php.net/manual/en/function.define.php

鏈路上的恆定值的粗略explination 。

現在爲您的具體問題。

$row[Staff_Suspension]您已經定義了一個常數值,因爲這是一個列名,所以應該用引號括起來。

如果您從關鍵編號$row[0];指定,這是一個與您的問題無關的不同故事。

+0

***你的意思主要是**來自*嗎? – webbiedave 2013-03-25 02:20:59

+0

編輯代碼片段後,可能有其他原因導致此錯誤。我忘了添加該筆記,將我的編輯與OPs原始的 – 2013-03-25 02:23:23

+0

進行比較,我確實比較了它。他的代碼中還有哪些地方可以觸發錯誤? – webbiedave 2013-03-25 02:24:42