1

下の表からわかるように、ID が 1 のユーザーは合計で 10 ポイントを持って
います。私がしようとしているのは、フォーム$edit_pointsから送信された 1 つの数値をループスルーしてユーザー 1 から減算する
ことです。この数値は、たとえば次 のようになります。

$edit_points = 6
は、最初のレコードから 4 を引き
、次に次のレコードに移動し、残りの 2 だけを引き、
ループから抜け出します。

UserID  | TotalPoints      
-------------------
 1      | 4        
 1      | 4      
 1      | 2      
 4      | 3        
 3      | 3       
 5      | 4      

これは私がこれまでに得たものです

$pointLeft = $edit_points;//sent from form    
while($point = mysqli_fetch_array($output)){

if($pointLeft > $point["TotalPoints"]){//if pointsLeft more than this record
$remainder =  $pointLeft-$point["TotalPoints"];//get remainder
$query2 = "UPDATE pointstable SET TotalPoints=0 WHERE UserID=".$UserID;
$output2 =  $mysqli->query($query2);

}elseif($pointLeft < $point["TotalPoints"]){

$remainder =  $point["TotalPoints"] - $pointLeft;   
$query2 = "UPDATE pointstable SET TotalPoints=".$remainder." WHERE UserID=".$UserID;
$output2 =  $mysqli->query($query2);

}

$pointLeft = $remainder;

}

それはある程度機能し、残りが保持する最後の値と同じ値をすべてのレコードに入力するようです。ブレークを試み、最初の if の上に if ($pointLeft<=0) を配置しまし
たが、何も機能しません。
助けはありますか?または、できればphpを使用してそれを行うより良い方法

4

1 に答える 1

0

マーティに感謝
以下の改訂されたコード
私が今使用している一意の ID PointID があります

$poinstLeft = $edit_points; //sent from form

while($point = mysqli_fetch_array($output)){
    //if pointsLeft more than this record
    if($poinstLeft >= $point["TotalPoints"]){
        //get remainder
        echo $poinstLeft." ";
        $remainder =  $poinstLeft-$point["TotalPoints"];
        $query2 = "UPDATE pointstable SET TotalPoints=0 WHERE UserID=".$UserID." AND PointID=".$point["PointID"];

        $output2 =  $mysqli->query($query2);
        // Calculate new pointsleft
        $poinstLeft = $remainder;

    } elseif ($poinstLeft < $point["TotalPoints"]){
        $remainder =  $point["TotalPoints"] - $poinstLeft;
        echo $poinstLeft." ";
        $query2 = "UPDATE pointstable SET TotalPoints=".$remainder." WHERE UserID=".$UserID." AND PointID=".$point["PointID"] ;
        $output2 =  $mysqli->query($query2);
        // Here, your remainder is different from the upper half of your if-function!
        // So, you don't have to recalculate pointsleft... It's just:
        $poinstLeft = 0;

        // Break the while loop:
     break 2;
    }


}
于 2013-09-04T21:08:04.720 に答える