2011-09-21 9 views
0

誰かがこれがうまくいかない理由を知っていますか?どのような加算も計算せず、データベースに0を入力するだけです。どんな助けも素晴らしいだろう、ありがとう!あなたは'pos_$i'を持っている。このラインで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'''のため、$ iは文字どおり '$ i'ですか? –

+0

'$ engine'と' $ enginequlifying'には実際に何が入っていますか? –

+0

'$ enginequalifying'のポイントは何ですか?その場所に '$ row'を使うだけでいいのですか? –

答えて

2
$enginequalifying["pos$i"] = $row['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

@Lee:歓迎します:-) –

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エイリアスがまったく同じことを達成できる場合に、データベースフィールドをフェッチ/名前変更するのはCPUサイクルの無駄です。

また、これにより、Rocketが答えで指摘した文字列引用エラーも取り除かれます。

+0

データベースのデータベースタスクを行うための+1 –

+0

ありがとう!私はこれらの変更を行います! – Lee

0

私はあなたのデータベースにあなたが持っていることを知らずに言うことはできないと思います。

最後のSQLクエリに構文エラーがあります($ enginepointsは引用符で終わります)。

関連する問題