3

HTML から送信された値に基づいて、別の mySQL クエリを実行するための php コードがあります。HTML から送信された値は、私が使用した現在の日です。

<?php $day = date("w"); ?>

私が使用する場合:

<?php echo $day; ?>

6 が返されます。これは本来の動作 (土曜日であるため) であるため、HTML/php が適切な情報をスクリプトに送信していることを確認できます。

私のスクリプトでは、&& と || の両方を含む if/elseif ステートメントに mySQL クエリの大きなリストがあります。条件。

最初の 2 つの例を次に示します。

if(($noshow == 1) && ($day != 5 || $day != 6 || $day != 0)){
$run = mysql_query("UPDATE employee_data SET points=points+5 WHERE ID=" . $id) or die(mysql_error());
}
elseif(($noshow == 1) && ($day == 5 || $day == 6 || $day == 0)){
$run = mysql_query("UPDATE employee_data SET points=points+7 WHERE ID=" . $id) or die(mysql_error());
}

変数 $noshow も html ファイルから送信され、値が 1 のチェック ボックスの形式になっています (チェックされている場合)。だから私がする必要があるのは、今日が何日であるかに基づいてクエリを実行することです。最初のステートメントでは、HTML のボックスがチェックされていて、それが金曜日、土曜日、または日曜日 (5,6,0) でない場合、現在のポイントに 5 を加えた値になるようにポイントを更新します。

次のステートメントは、最初のステートメントと同じことを行うことになっていますが、その日が金曜日、土曜日、または日曜日の場合のみです。スクリプトは、私が作成したさまざまなチェック ボックス/オプションに対して約 10 個のステートメントを実行します。

だから私が抱えている問題は、日が6であっても最初のステートメントしか実行していないことです(これについては上で説明しました)

私はこの問題で約2時間ぐるぐる回っていますが、それは私の頭を悩ませています. 私の現在の考えでは、if ステートメントの構文が正しくないということです。

4

2 に答える 2

5

とてもシンプル。あなたが言ったので、day = 6の場合、最初のステートメントは機能します

IF DAY IS NOT EQUAL TO 5
OR
DAY IS NOT EQUAL TO 6

したがって、day が 5 に等しくない場合でも機能します。そして、2番目のステートメントにはelseifがあるため、最初に実行したときには機能しません。day = 6 のときに最初のステートメントが機能しないようにする場合は、それを伝える必要があります

IF DAY IS NOT EQUAL TO 5
AND
DAY IS NOT EQUAL TO 6

したがって、簡単な更新は次のようになります

if(($noshow == 1) && ($day != 5 && $day != 6 && $day != 0)){
$run = mysql_query("UPDATE employee_data SET points=points+5 WHERE ID=" . $id) or die(mysql_error());
}
elseif(($noshow == 1) && ($day == 5 || $day == 6 || $day == 0)){
$run = mysql_query("UPDATE employee_data SET points=points+7 WHERE ID=" . $id) or die(mysql_error());
}

ヒント:

IF 条件がどのように機能するかについて混乱している場合は、&& と || を変換してください。英語にして読む。たとえば、最初のステートメントは次のように読み取られます

IF NO SHOW IS 1 AND (DAY IS NOT EQUAL TO 5 OR DAY IS NOT EQUAL TO 6 OR DAY IS NOT EQUAL TO 0)

そのように読むと、このステートメントが6日目でも真実であることがより明白になります

于 2013-01-05T20:37:36.517 に答える
0

$day != 5 の場合、|| を使用しているため true が返されます。&& を使用して、すべてのテストが必要であることを確認してください。

于 2013-01-05T20:41:14.450 に答える