4

クエリ文字列で true または false の値を送信して、php で使用するにはどうすればよいですか? 私は次のようにしようとしていますが、両方がfalseに設定されていてもtrueになります。これらの値は htaccess ファイルから取得します。

<?php
$var = $_GET['a'];
$bar = $_GET['b'];

if ($var && $bar)
{
echo "True";
}else
{
echo "False";
}

echo '<a href=?a=false&b=false>Check</a>';
?>
4

1 に答える 1

8

true適切なブール値またはfalseクエリ文字列を送信できないため、両方とも True と評価されています。PHP では、文字列 と の両方が"true"TRUE と"false"評価されます。次のいずれかを行います。

if ($var == "true" && $bar == "true") {

または、データ ソースの代わりに、および0データソースから送信します (ここで .htaccess がどのように適合するかについては完全にはわかりません。フォーム フィールドから変数をマッサージしていると想定していますが、最終的には無関係です。)1"true""false"

詳細については、この信じられないほど膨大な数の PHP の真理値の表を確認してください。PHP の型強制 - つまり、任意の変数を他の型の変数に変換する方法 - は予測が難しく、独自のロジックで動作します。

とはいえ、質問のクエリ文字列部分は本質的に PHP の問題ではありません。GETまたはPOSTパラメーターを介してブール値を通信する標準的な方法はありません。見てみると、すべてのサイトが独自の方法で処理していることに気付くでしょ"true"う。1TRUE

最終的な代替手段が 1 つあります。JSON です。あなたのケースでは役に立たないかもしれませんが、サーバーとデータを交換するための私の好みの方法は、すべてのデータを JSON の単一の文字列にエンコードすることです。これには、JSON オブジェクトにカプセル化された変数の型をきめ細かく制御できるなど、いくつかの利点がありますが、通常の HTML フォームでは実行できないという欠点があります。ただし、AJAX-ey Web アプリを実行している場合は素晴らしいことです。

于 2012-09-03T04:32:40.277 に答える