2013-03-07 28 views
-1
while($row=mysql_fetch_array($res)) { 
    $country_adcounts[$row['countryid']] += $row['adcnt']; 
    $city_adcounts[$row['cityid']] += $row['adcnt']; 
} 

我得到未定義的索引錯誤。所以我改變了代碼,並把isset。php頁面顯示未定義的索引錯誤

while($row=mysql_fetch_array($res)) { 
    $country_adcounts[$row['countryid']] += isset($row['adcnt']); 
    $city_adcounts[$row['cityid']] += isset($row['adcnt']); 
} 

但是錯誤仍然是相同的.....什麼可能是解決方案?

+0

'isset'將返回true或false,而不是'$ row ['adcnt']' – 2013-03-07 21:52:47

+0

'$ row ['countryid']'沒有設置的值 – Pitchinnate 2013-03-07 21:53:33

+0

你得到了什麼索引錯誤? – Drewdin 2013-03-07 21:58:00

回答

0

您應該使用mysql_fetch_assoc()來獲得命名指數mysql的結果。

  • $ country_adcounts
  • $ city_adcounts

除非你明確所有可能的初始值設定爲0(或一些很好的初始化):未定義的指標也可能與兩個數組變量,第一次設置任何一個數組值(例如$ country_adcounts [「US」])時,未定義的索引是$ country_adcounts [「US」]。

因此,解決方案是如果陣列[索引]值被設置爲第一檢查:

while($row=mysql_fetch_assoc($res)) { 
    if (!isset($country_adcounts[$row['countryid']]) { 
    $country_adcounts[$row['countryid']] = 0; 
    } 
    if (!isset($city_adcounts[$row['cityid']]) { 
    $city_adcounts[$row['cityid']] = 0; 
    } 
    $country_adcounts[$row['countryid']] += $row['adcnt']; 
    $city_adcounts[$row['cityid']] += $row['adcnt']; 
} 

順便提一下,()你上面使用是不正確的isset。 isset的結果是布爾值,而不是數字。

+0

絕對正確....感謝您指出我的錯誤正確.....你搖擺...... – CogniProgram 2013-03-07 22:04:45

1

兩個主要問題:

您使用mysql_fetch_array(),返回鍵數值數組,所以$行永遠不會有adcntcountryid,等等在裏面。這將是$row[0]$row[1],等...

你可能想mysql_fetch_assoc()

你isset()函數的使用也是錯誤的。它返回一個布爾真/假值,從來沒有一個整數。 Youv'e也忽略了做isset()檢查$row['countryid']$row['cityid'],所以你的代碼在多個層次上被破壞。

+0

另外,在數據庫行變量上使用'isset'是你永遠不應該使用的東西;你(應該......)知道行成功獲取時有什麼。 – jeroen 2013-03-07 21:59:40

0

這樣的事情(不完全)

while($row=mysql_fetch_assoc($res)) { 
    if(isset($row['countryid']) && isset($row['adcnt'] && isset($row['cityid']){ 
     $country_adcounts[$row['countryid']] += $row['adcnt']; 
     $city_adcounts[$row['cityid']] += $row['adcnt']; 
    } 
    } 

你不應該使用mysql,