php
  • sql
  • arrays
  • while-loop
  • 2016-04-13 9 views -1 likes 
    -1

    私は助けが必要です...私はsqlテーブルからデータを取得しようとしていて、特定のIDのifステートメントと比較し、変数を更新しています。しかし、何らかの理由で変数が更新されていないようです。以下は私のコードは...sqlから配列を取得して条件をチェックする

    $query2 = "SELECT prcID, tProDone 
          FROM vw_fdwTracker 
          WHERE AgrNo = '$agreement'"; 
    
    $result2= sqlsrv_query($conn, $query2); 
        if ($result2==false){ 
         die("<pre>".print_r(sqlsrv_errors(), true)); 
        } 
    
    $current = 0;  
    while($id= sqlsrv_fetch_array($result2, SQLSRV_FETCH_ASSOC)){  
    
        //echo $id['prcID']." ". $id['tProDone'].'<br>'; 
    
        if(($id['prcID']===3) && ($id['tProDone']===TRUE)){ 
         $current=12.5; 
        }elseif(($id['prcID']===4) && ($id['tProDone']===TRUE)){ 
         $current=25; 
        }elseif(($id['prcID']===5) && ($id['tProDone']===TRUE)){ 
         $current=37.5; 
        }elseif(($id['prcID']===9) && ($id['tProDone']===TRUE)){ 
         $current=50; 
        }elseif(($id['prcID']===10) && ($id['tProDone']===TRUE)){ 
         $current=62.5; 
        }elseif(($id['prcID']===14) && ($id['tProDone']===TRUE)){ 
         $current=75; 
        }elseif(($id['prcID']===12) && ($id['tProDone']===TRUE)){ 
         $current=87.5; 
        }elseif(($id['prcID']===17) && ($id['tProDone']===TRUE)){ 
         $current=100; 
        }else{ 
         $current=0; 
        } 
    } 
    
    +0

    '$ current'は更新していませんか? '$ current'を意味するならば、複数の行を持っていると、すべてのループでそれ自身を上書きします。 – Rasclatt

    +0

    また、 '$ id ['tProDone']'が本当であることを要求している場合は、その中のif($ id ['tProDone'] === true){} 'のラッパーだけでなく、スイッチをする?それはおそらく少しクリーナーだろう。あなたはすべての '&&($ id ['tProDone'] === TRUE')を必要としません。 – Rasclatt

    +0

    はい$現在は更新されていません。異なるIDを持つ複数の行があります。 IDを更新し、それに応じて$ currentを更新します...もしそれが上書きされたとしても、最後には何らかの価値があるはずですが、ここでは出力が得られません... $ currentはまだ0です... – Sachin

    答えて

    0

    に動作します以下のようにちょうどあなたのコードを実行するに保存してくださいコードの開始で$現在の変数値を定義する必要はありませんあなたがそれが動作しているかどうかを知るための配列。

    function getCurrentArr($agreement,$conn) 
        { 
         $query = "SELECT prcID, tProDone FROM vw_fdwTracker WHERE AgrNo = '$agreement'"; 
         $result = sqlsrv_query($conn, $query); 
         if(!$result){ 
          die("<pre>".print_r(sqlsrv_errors(), true)); 
         } 
    
         return $result; 
        } 
    
    function getCurrVal($value) 
        { 
         $return[3] = 12.5; 
         $return[4] = 25; 
         $return[5] = 37.5; 
         $return[9] = 50; 
         $return[10] = 62.5; 
         $return[14] = 75; 
         $return[12] = 87.5; 
         $return[17] = 100; 
         return (isset($return[$value]))? $return[$value] : 0; 
        } 
    
    $curr = array(); 
    $result = getCurrentArr($agreement,$conn); 
    while($id= sqlsrv_fetch_array($result, SQLSRV_FETCH_ASSOC)){ 
        if(!$id['tProDone']) { 
         $curr[] = 0; 
         continue; 
        } 
    
        $curr[] = getCurrVal($id['prcID']); 
    } 
    // See what this gets you for an array 
    // If what is in this array is what you expect, then 
    // make the $curr array the variable, but you will overwrite 
    // every time it loops, just keep that in mind 
    print_r($curr); 
    
    +0

    私はこの解決方法を試しましたが、ここからの出力です... Array([0] => 0 [1] => 0 [2] => 0 [3] => 0 [4] => 12.5 [5] => 0 [6] => 0 [7] => 0 [8] => 0 [9 0] = 0 [11] => 0 [12] => 0 [13] => 0 [14] => 0 [15] > 0 [18] => 0 [19] => 0 [20] => 0 [21] => 0 [22] => 0) – Sachin

    +0

    そのため、配列の4番目のキーの値だけが有効な条件(真と一致したID) – Rasclatt

    +0

    さらに、ループ内に1つの変数を設定する場合、最後の行の値(この場合は0)が変数に適用されます。 – Rasclatt

    0

    であるあなたは、それはまた、ループ上

    $id['prcID']=3; 
    $id['tProDone']=false; 
    
    if(($id['prcID']==3) && ($id['tProDone']==true)){ 
        $current=12.5; 
    }else{ 
        $current=0; 
    } 
    echo $current; 
    
    +0

    thax ram singhの提案です。私はそれが今必要であることを知っていますが、常に変数を事前に宣言する方がいいです...どんな方法でもまだ動作しています... – Sachin

    関連する問題