2017-09-07 6 views
0

IFステートメント内でデータベースを更新しようとしていますが、動作していないようです。 email_sentは1に変更されません。私のステートメントは正しいですか?IFステートメントでデータベースを更新する

$result2 = mysql_query ("SELECT * FROM stock_control WHERE id = '$id' "); 

while ($row1 = mysql_fetch_array($result2)) 
{ 
$item=$row1['item']; 
$location=$row1['location']; 
$quantity=$row1['quantity']; 
$threshold=$row1['threshold']; 
$emailSent=$row1['email_sent']; 
} 


if ($quantity <= $threshold && $emailSent == 0) { 
mysql_query("UPDATE stock_control SET quantity=quantity - '$n_quantity', 
email_sent = '1' WHERE id = '$id' "); 
} else { 
mysql_query("UPDATE stock_control SET quantity=quantity - '$n_quantity' WHERE 
id = '$id' "); 
} 
+0

email_sentは整数か文字列ですか。 '' 1 ''は文字列であるためです。あなたはちょうど '1'を使用する必要があります –

+0

@JuanCarlosOropezaは問題ではない、MySQLは自動的にタイプを変換する –

+0

多分あなたはより良い理解のためにスクリプト全体を表示する必要があります。たとえば、$ n_quantity変数はどこから来ますか? –

答えて

1

しばらくループを閉じすぎています。あなただけのループの最後の値を取得している:適切に定義されていないよう$n_quantity変数に

$result2 = mysql_query ("SELECT * FROM stock_control WHERE id = '$id' "); 

while ($row1 = mysql_fetch_array($result2)) 
{ 
    $item=$row1['item']; 
    $location=$row1['location']; 
    $quantity=$row1['quantity']; 
    $threshold=$row1['threshold']; 
    $emailSent=$row1['email_sent']; 

    if ($quantity <= $threshold && $emailSent == 0) { 
     mysql_query("UPDATE stock_control SET quantity=quantity - '$n_quantity', 
     email_sent = '1' WHERE id = '$id' "); 
    } else { 
     mysql_query("UPDATE stock_control SET quantity=quantity - '$n_quantity' WHERE 
     id = '$id' "); 
    } 
} 
+0

それはデータベースを更新しますが、それが意味をなさせるならば、次のIFを実行するのに十分な時間ではありません。 ($ emailSent == 1){ $ message = implode( "\ r \ n"、$ message);私はそれを準備してメールしてからこのコードを作成します。 mysql_query( "UPDATE stock_control SET email_sent = 2 WHERE id = '$ id'");; } – Coops

+0

いいえ、申し訳ありませんが、タイミングの問題ではなく、間違って説明しました。あなたはINSループをwhileループで更新する必要があります。 while ... .. {...}。私は単純にループを囲むようにwhileの終了を移動しました。 –

0

確認し、。代わりに$quantityを意味しましたか?

テーブルの1つの行(指定されたIDを持つ行)のみを処理しているので、whileループは必要ありません。それ以外の場合は、より多くの行がある場合、指定されたwhileループは時期尚早に閉じられてしまいます。

SELECT *が多すぎる列を選択する可能性があります。これは不利になる可能性があります。また、msyql_queryの使用は推奨されていません。mysqli_queryまたはPDOを使用する必要があります。

$result2 = mysqli_query($con,"SELECT item, location, quantity, threshold, email_sent from stock_control where id = '$id'"); 

list($item,$location,$quantity,$threshold,$emailSent) = mysqli_fetch_array($result2); 

if ($quantity <= $threshold && $emailSent == 0) { 
     mysqli_query($con,"UPDATE stock_control SET quantity=quantity - '$quantity', 
     email_sent = '1' WHERE id = '$id' "); 
    } else { 
     mysqli_query($con,"UPDATE stock_control SET quantity=quantity - '$quantity' WHERE id = '$id' "); 
    } 
0

解像度は、クエリに関連した時間だったので、私は接続を閉じ、DBを照会するために私のHTMLの後に新しい接続を開くために必要な:だから次は$conは、データベース接続であると仮定すると、役に立つかもしれません。

皆さんのご意見にとても感謝しており、今後も私は非常に役に立ち、お手伝いをします。

:)

関連する問題