0

URL のクエリに依存するページを作成しています (europe.php?country=france など)。論文を SEO などの htaccess を使用して europe.php/france として書き直すと便利であることは承知していますが、そのページにクエリ文字列なしでアクセスするとどうなるでしょうか。

$_GET クエリに php を使用しているので、クエリなしでページにアクセスすると、「var=;」が返されます。つまり、空です (エラーを取得します)。$_GET が何も取得しないかどうかを確認するために if ステートメントを使用しようとしていますが、これが正しいことかどうかはわかりません。

では、デフォルトを設定できるように、取得されていない変数を確認するにはどうすればよいですか? または:これについて間違った方法をとっていますか?

4

5 に答える 5

1

次のようなものを使用してみてください。

$var = ( isset($_GET['var']) ? $_GET['var'] : 'default value' )
于 2012-07-10T13:05:12.883 に答える
1

isset()は実際には「NOTNULL」をテストするため、empty()を使用して、空の文字列が指定されているかどうかをテストする必要があります。

if (empty($_GET['country'])) {
  $_GET['country'] = "default";
}

つまり0、有効な入力であることが期待されない限り、その場合は、issetをチェックして、文字列に少なくとも1文字が含まれていることを確認する必要があります。

if (!isset($_GET['country']) || !strlen($_GET['country'])) {
    $_GET['country'] = "default";
}

に最適化することができます

if (!isset($_GET['country']) || !isset($_GET['country'][0])) {
    $_GET['country'] = "default";
}
于 2012-07-10T13:05:54.647 に答える
1

へのインデックスがわかっている場合は、次$_GETを使用しisset()ます。

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

countryこれは、パラメーターが渡されたかどうかのみをテストしますが、空の文字列に設定されている可能性があります。これが無効な入力である場合は、次を使用してチェックを組み合わせることができますempty()

$country = 'default';
if( isset( $_GET['country']) && !empty( $_GET['country'])) {
    $country = $_GET['country'];
}

これを 1 行に要約し、次のように三項演算子$countryを使用して結果を変数に保存できます。

$country = (isset( $_GET['country']) && !empty( $_GET['country'])) ? $_GET['country'] : 'default';

最後に、 on$_GETを呼び出して、パラメーターがまったくないかどうかを確認できます。count()$_GET

if( count( $_GET) == 0) {
    die( "No parameters - Invalid input!");
}
于 2012-07-10T13:03:59.750 に答える
0

これをやってみてください

if(isset($_GET['your_variable'])) { 
    $variable = $_GET['your_variable']; 
} else { 
    $variable = "not set"; 
}

これにより、URLに設定されている場合は変数が設定されます。または、URLに設定されていない場合は、変数を他の値に設定できます。

于 2012-07-10T13:04:55.623 に答える
0

ページの先頭でチェックを実行して、var が設定されているかどうかを確認します。空の場合は、次のようなものを使用してリダイレクトできます。

header("HTTP/1.0 404 Not Found"); 
header('Location:YOUR PAGE NOT FOUND PAGE');
    exit();

補足として、$_GET からのデータを使用している場合は、XSS などのあらゆる種類のセキュリティ侵害や、データベースを使用している場合は MYSQL インジェクションを防ぐために、このデータが検証および消去されていることを確認する必要があります。ページの先頭でテストを実行して、それが空かどうかを確認することは、最初の一歩に過ぎません。また、データが期待どおりのものであることを確認することもできます (たとえば、英数字であることを確認します)。その後、$_GET データを使用すると、誰でも URL バーに好きなものを入力でき、Web サイトに損害を与える可能性があります。

これが役に立ったことを願っています!

于 2012-07-10T13:08:03.440 に答える