-1

このメソッドを使用して医師のリストを取得しています:

public static function getFiltered($specialist = null, $standby = null, $payedThisYear = null, $payedLastYear = null) 
{
    $mysqli = connectdbMySQLI();
    $query = "SELECT * FROM tblMember WHERE 1 = 1";

    if($specialist != null)
    {
        if ($specialist == true) 
            $query .= " AND specialist = true";
        else
            $query .= " AND specialist = false";
    }
}

パラメータ (true/false) は、異なるチェックボックスで設定されます。Firebug で var_dump を使用して $specialist-value を確認しました。$specialist が true の場合、クエリは正常に機能します。false の場合は if 文にも入っていないので、いきなり null になっているようです。

次に、elseステートメントを使用したifステートメントのエコーで確認したところ、同じ結果が得られました... $specialist = falseの場合、「elseステートメント」に直行します...

何が間違っている可能性がありますか?

4

3 に答える 3

7

PHP では、式(FALSE != NULL)は常に になるため、ブロックFALSE内のコードが実行されることはありません。if

これは、 を使用して実証できますvar_dump()。次の式を検討してください。

$specialist = false;
var_dump($specialist != null);
var_dump($specialist !== null);

出力は次のようになります。

bool(false) 
bool(true)

この問題を解決するには、厳密な比較を使用します。

if($specialist !== null)
{
    if ($specialist == true) 
        $query .= " AND specialist = true";
    else
        $query .= " AND specialist = false";
}

関数を使用することもできis_null()ます。

于 2013-10-22T12:40:06.980 に答える
2

その単純さ: チェックボックスがオフの場合、そのフィールドはフォームが送信されたときに POST または GET リクエストに含まれないため、null になります。

スーパーグローバルからその値を取得するときは、 isset() を使用してチェックボックスの状態をチェックし、マークされているかどうかを確認する必要があります。'dont care' 値も必要な場合は、チェックボックスを 3 つのラジオ入力で変更することを検討してください。チェックボックスには 2 つの状態しかありません。

于 2013-10-22T12:42:25.683 に答える
1

のようにしてみてください

if ($specialist) 
    $query .= " AND specialist = true";
else
    $query .= " AND specialist = false";  

または直接試してみてください

$query .= " AND specialist = $specialist";    
于 2013-10-22T12:38:35.110 に答える