2011-09-21 104 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以引号结尾)。