2011-09-21 103 views
0

嘿,有沒有人知道爲什麼這不起作用的原因?它不計算任何附加信息,只需在數據庫中輸入0即可。任何幫助將是偉大的,謝謝!PHP變量添加

$member_id = //users member id in database// 
$track = //the track results being updated// 
$engine = //the engine id from the members table in database// 

$engine_points_system = array(); 
$engine_points_system["qualpos1"] = 30; 
$engine_points_system["qualpos2"] = 20; 
$engine_points_system["qualpos3"] = 18; 
$engine_points_system["qualpos4"] = 17; 
$engine_points_system["qualpos5"] = 16; 

$enginepoints = 0; 
$qualifyingpoints = 0; 

$results_query = mysql_query("SELECT pos_1, pos_2, pos_3, pos_4, pos_5 
from engine_qualifying_results WHERE track_id = '$track'") 
or die ("Failed to update" . mysql_error()); 

$row = mysql_fetch_array($results_query); 

$enginequalifying = array(); 
for ($i = 1; $i <= 5; $i++) { 
    $enginequalifying["pos$i"] = $row['pos_$i']; 
} 

for($i = 1; $i <=5; $i++) { 
    if($engine == $enginequalifying["pos$i"]){    
     $enginepoints += $engine_points_system["qualpos$i"]; 
     $qualifyingpoints += $engine_points_system["qualpos$i"]; 
    } 
} 

$results_query = mysql_query("INSERT INTO member_results (member_id, engine_points)    
VALUES ('$member_id', $enginepoints')") 
or die ("Failed to update" . mysql_error()); 
+4

由於簡單引號''pos_ $ i''所以$我字面上'$我'? – 2011-09-21 20:32:01

+0

'$ engine'和'$ enginequlifying'實際上包含了什麼? –

+0

'$ enginequalifying'有什麼意義?難道你不能在它的地方使用'$ row'嗎? –

回答

2
$enginequalifying["pos$i"] = $row['pos_$i']; 

在這一行你有'pos_$i'。這是字符串'pos_$i'。您應該改用"pos_$i"

$enginequalifying["pos$i"] = $row["pos_$i"]; 

UPDATE

在你的代碼$enginequalifying是多餘的,並沒有必要。您可以在其位置使用$row

for($i = 1; $i <=5; $i++){ 
    if($engine == $row["pos_$i"]){    
    $enginepoints += $engine_points_system["qualpos$i"]; 
    $qualifyingpoints += $engine_points_system["qualpos$i"]; 
    } 
} 

另外,作爲@ax。指出,您在INSERT中有額外的'(或缺少')。

$results_query = mysql_query("INSERT INTO member_results (member_id, engine_points) 
    VALUES ('$member_id', '$enginepoints')") 
or die ("Failed to update" . mysql_error()); 
+0

+1好點......錯過了。 –

+1

非常感謝!這麼小的東西,現在工作正常!謝謝你的時間。 – Lee

+0

@李:不客氣:-) –

2

看看這段代碼:

<?php 
$i = 5; 

print "i is $i"; 
print "\n"; 
print 'i is $i'; 

?> 

你希望它打印:

i is 5 
i is 5 

但是,相反,它會打印:

i is 5 
i is $i 

出現這種情況因爲當字符串包裹在單引號中時,$i未被評估。它只是字符串$i

修復代碼,請嘗試更換這行:

$enginequalifying["pos$i"] = $row['pos_$i']; 

這一行:

$enginequalifying["pos$i"] = $row["pos_$i"]; 

行情有所作爲。


順便說一下,逃避你的SQL!。請?

2

不是一個答案,但太醜陋投入評論:

SELECT pos_1 AS pos1, pos_2 AS pos2, etc... 

您的查詢,那麼只需有:

您可以通過簡單地做繞過整個循環建立enginequalifying陣列
$enginequalifying = mysql_fetch_assoc($result); 

當原始查詢字符串中的簡單as別名可以完成完全相同的操作時,爲您獲取PHP獲取/重命名數據庫字段會浪費CPU週期。

順便說一下,這也會消除你在Rocket指出的答案中指出的字符串引用錯誤。

+0

+1在數據庫中做數據庫任務 –

+0

感謝您的支持!我會做出這些改變! – Lee

0

我不認爲有可能說不知道你的數據庫中有什麼。

但我可以告訴你,在最後的SQL查詢中有一個語法錯誤($ enginepoints以引號結尾)。