1

別の PHP ファイルから生成されたグラフを表示する PHP グラフ ページがあります。

このグラフ生成 PHP ファイルでは、AJAX スクリプトを使用して変数が変更されます。

PHP グラフ ページが最初に読み込まれるときに、生成している PHP ファイルの変数が空であるかどうかを識別できる必要があるため、$_get 関数を使用してデータが上書きされるまで、変数をデフォルト値に変更できます。

私はこれまでのところ運が悪く、少し行き詰まっています.PHPに非常に慣れていないので、どんな支援も大歓迎です. ありがとう :)

$course = $_GET['usercourse'];

if (empty($course))
{
    $course = 'All';
}

else
{
}
4

6 に答える 6

3

機能を使用してくださいisset()

if (isset($_GET['usercourse'])
{
    //do something
}
于 2012-11-12T18:38:54.030 に答える
2

関数を使用isset()します。

if (isset($_GET['usercourse'])
{
    //do something
}
于 2012-11-12T18:43:06.217 に答える
1

issetこのように関数を使用して、

if(isset($_GET['usercourse']))
$course = $_GET['usercourse'];

if (empty($course))
{
$course = 'All';
} else {
 //do something...
 }
于 2012-11-12T18:41:18.187 に答える
1

他の回答があなたの直接の質問に答えていますが、ここには説明すべきもっと深いものがあると思います.

通常、存在することが確実でない配列インデックスへのアクセスは避けたいと考えます。

例えば:

$a = array('foo' => 'bar');
echo $a['test']; //bad!

同じことが $_GET、$_POST、$_COOKIE などにも当てはまります。インデックスが存在することがわかっている場合を除き、インデックスにアクセスしないでください。

ユーザー定義のインデックスの場合、これは「インデックスが存在することを確認しない限り、インデックスにアクセスしない」という意味になることに注意してください。

$content = $_GET['content']; //ALWAYS wrong

配列インデックスをチェックするには、isset、empty、および array_key_exists の 3 つのオプションがあります。

isset($x)$x が null でない場合に true を返します。 isset が未定義のインデックス/変数通知を発行しないことを除いて、isset本質的には: と同等です。$x !== null

(empty($x) === (!isset($x) || !$x))

つまり、空の場合、おおむね false に等しいものはすべて空であると見なされます。これは特定の状況で役立ちます。

array_key_exists($key, $array)$array[$key]未定義のインデックス通知を発行しないという単純な保証です。

では、適切な方法でユーザー入力を抽出する最も簡単な方法は何でしょうか?

$content = (isset($_GET['content'])) ? $_GET['content'] : null;

$content !== nullユーザーが入力を提供した場合、この時点で重要な保証があります。


また、変数を未定義のままにする実行パスを持たないようにする必要があることに注意してください。

if (isset($_GET['content'])) {
    $content = $_GET['content'];
}

echo $content; //WRONG - $content is not guaranteed to be defined

$content が isset または空でラップされている場合は、その状況で使用できますが、コードの可読性が妨げられます。ある条件下で変数を未定義のままにしたい場合は、null として定義します。variable does not exist 警告を発行せずに「未定義」のままにします。

$a = null;
var_dump($a === $b); //true, because the non-existent $b is treated as false
//(note that this is terrible style though -- this would issue a variable doesn't exist warning for $b

もちろん、PHP のフィルター拡張機能もあります。特に、 filter_inputを使用すると、ユーザー入力を処理するための多くのコードを書き直す必要がなくなります。

適切な (または、パラノイアと呼ぶ人もいるかもしれませんが) 入力処理の詳細については、ここまたはここの適切なセクションを参照してください。


余談ですが、常にエラーを最大限に発生させて開発する必要があり、あらゆる種類のエラー (警告、通知など) を監視する必要があります。これは、潜在的な論理バグを防ぐのに役立ち、コードをきれいに保つ傾向があります。(通知を発行しないコードとよく書かれたコードの間には相関関係があるようです。)

于 2012-11-12T19:08:51.317 に答える
1

変数が設定されていて、空の文字列と等しくないかどうかをチェックする単純なコード例:

$course = isset($_GET['usercourse']) && $_GET['usercourse'] !== ''
    ? $_GET['usercourse']
    : 'All';

少し良い:

$course = isset($_GET['usercourse']) && preg_match('@^(LIST|of|AccEPtabLE|vaLUes)$@i', $_GET['usercourse'])
    ? $_GET['usercourse']
    : 'All';

$course = isset($_GET['usercourse']) && in_array($_GET['usercourse'], array('list', 'of', 'acceptable', 'values'))
    ? $_GET['usercourse']
    : 'All';

さらに良い:

フィルター関数を使用します。

于 2012-11-12T18:45:08.143 に答える
0

空の文字列と比較してみませんか?

if (!isset($course) || empty($course) ) {
    $course = 'All';
}
于 2012-11-12T18:39:08.773 に答える