2017-12-05 7 views
1

こんにちは私は現在、forループでデータベースの数量を更新する際に問題が発生しています。今、私は買い物カゴを作成し、ユーザーがアイテムを購入すると、私のデータベースの数量を更新したいと思っています。問題は、私は買い物に最後の製品IDを挿入することしかできないので、ループ内にあるにもかかわらず、アイテムの1つだけが更新されるということです。コードは長いので、私は問題を抱えている部分だけを表示するつもりです。データベース内の数量を適切にループして更新するにはどうすればよいですか?

for($i=0; $i<count($cart); $i++){ 
    $s += $cart[$i]->price * $cart[$i]->quantity; 
    $tax= $s*.05; 
    $shipping=$s* .02; 
    $total=$s+$tax+$shipping; 
    ?> 
<tr> 
    <td><?php echo $cart[$i]->id; ?></td> 
    <td><?php echo $cart[$i]->name; ?></td> 
    <td><?php echo $cart[$i]->price; ?></td> 
    <td><?php echo $cart[$i]->quantity; ?></td> 
    <td><?php echo $cart[$i]->price * $cart[$i]->quantity; ?></td> 
    </tr> 

    <?php 
$index++; 
$quantitycart=$cart[$i]->quantity; 

    } 
     if(array_key_exists('submit', $_POST)) 
     { $results = mysqli_query($con, "select * from products"); 

    while($products= mysqli_fetch_object($results)){ 
    for($i=0; $i<count($cart); $i++){  
    $quantity= $products->quantity; 
    $idcart=$cart[$i]->id; 


    $sql = "UPDATE products SET quantity= quantity -'$quantitycart' WHERE 
id='$idcart'"; 
    }} 
if ($con->query($sql) === TRUE) { 
    echo "Record updated successfully"; 
} else { 
    echo "Error updating record: " . $con->error; 
} 

問題は$ idcartにあります。なんらかの理由で、適切にループしておらず、正しいIDだけをカートに残しておきます。どんな助けもありがとう。

ありがとうございます。

+1

本当に実行してもよろしいですか? '$ results = mysqli_query($ con、" select * from products ")'次に、すべての結果を 'quantity - '$ quantitycart''で更新します。私はあなたのロジックが問題の一部かもしれないと思います。 – Tigger

+0

@TIgger私は何をお勧めしますか?私の問題を解決する方法があまりにもわからないので。 – harrison

答えて

1

問題はループ内にあります。ここでは、最後のSQLクエリが実行されるように、各ループにSQLクエリが書き込まれます。したがって、毎回SQLクエリを追加して、multi_queryメソッドを使用して実行することができます。

if(array_key_exists('submit', $_POST)) 
     { $results = mysqli_query($con, "select * from products"); 
    $sql="";//init 
    while($products= mysqli_fetch_object($results)){ 
    for($i=0; $i<count($cart); $i++){  
    $quantity= $products->quantity; 
    $idcart=$cart[$i]->id; 
    $sql .= "UPDATE products SET quantity= quantity -'$quantitycart' WHERE 
    id='$idcart';";//here u need to append the query 
    }//end for 
    }//end while 
    if ($con->multi_query($sql) === TRUE) {//use multi_query 
    echo "Record updated successfully"; 
    } else { 
    echo "Error updating record: " . $con->error; 
    } 
+0

ありがとうございます。しかし、私は正反対の問題を抱えています。数量は間違った量を減算していますが、IDは正しいです。 – harrison

+0

クエリで$ quantitycartの代わりに$ cart [$ i] - > quantity –

+0

を使用すると、すべての行も同じ量を減算します。私のコードで何がうまくいかないのか分かりません。私は現在これを持っています。 $ sql。= "UPDATE products SET quantity = '$ quantity' - "。$ cart [$ i] - > quantity。 "; WHERE id = '$ idcart';"; – harrison

関連する問題