-2
if ((!$_GET['month']) && (!$_GET['year'])) {
  $month = date ("n");
  $year = date ("Y");
} else {
  $month = $_GET['month'];
  $year = $_GET['year'];
}

それは示していますNotice: Undefined index: month in....

error_reporting(null);上記のコードを使用すると、通知が表示されないことはわかっていますが、このエラーを修正する方法はありますか?

4

5 に答える 5

2

配列要素が存在しない場合は、存在しない要素にアクセスしようとしているため、通知が表示されます。isset()それを使用またはチェックする必要がありますempty()(これらは関数ではなく言語構造であるため、これらの要素へのアクセスは考慮されません)。おそらく空/ゼロの年/月は決してないので、emptyより理にかなっています。!isset()を使用することもできますが、0空の文字列も使用できます。

if(empty($_GET['month']) || empty($_GET['year'])) {
    $month = date('n');
    $year = date('Y');
}
else {
    $month = (int)$_GET['month'];
    $year = (int)$_GET['year'];
}

ただし、これら 2 つの変数を個別にチェックする方が理にかなっている場合があります。

$month = empty($_GET['month']) ? date('n') : $_GET['month'];
$year = empty($_GET['year']) ? date('Y') : $_GET['year'];
于 2012-04-28T08:24:53.300 に答える
1

あなたが現在持っている方法は、一度に両方をチェックし、どちらかが変更に失敗した場合は、おそらく月と日付を事前設定してから、パラメータが渡された場合に変更することをお勧めします。さらに、数値を確認することをお勧めします。そうしないと、文字列によってコードがさらに壊れる可能性があります

<?php 
$month = date ("n");
$year = date ("Y");
if (isset($_GET['month']) && is_numeric($_GET['month'])) {
    $month = $_GET['month'];
}
if (isset($_GET['year']) && is_numeric($_GET['year'])) {
    $year = $_GET['year'];
}

//Or better yet
$month = (isset($_GET['month']) && is_numeric($_GET['month']))?$_GET['month']:date("n");
$year = (isset($_GET['year']) && is_numeric($_GET['year']))?$_GET['year']:date("Y");
?>
于 2012-04-28T08:27:36.687 に答える
0

または を使用して、変数が定義されているかどうempty()かを確認する必要があります。isset()

if ( empty($_GET['month']) || empty($_GET['year']) ) {
   $month = date ("n");
   $year = date ("Y");
} else {
   $month = $_GET['month'];
   $year = $_GET['year'];
}
于 2012-04-28T08:23:48.230 に答える
0
 $month = date('n');
 $year = date('Y');
 if (isset($_GET['month'])) {
   $month=$_GET['month'];
 }
 if (isset($_GET['year'])) {
   $year=$_GET['year'];
 }
于 2012-04-28T08:25:48.243 に答える
0

if(isset($_GET['month']) && isset($_GET['year']))はい、ifブロックで使用できます

于 2012-04-28T08:26:38.007 に答える